---
title: "サービスロボット導入シミュレーション Log#36 | 配膳ロボットが止まり合う原因は、待機点への入り方"
slug: serving-robots-jam-cause-standby-entry
date: 2026-11-07
day: 456
meta_description: "Unity で再現した大型ファミレスで配膳ロボット5台が止まり合う原因は、間0.8mの待機点へ斜めに寄ることだった。真下からまっすぐ入る決まりで、待機場所のそばの止まり合いは1回の営業あたり3,317秒から1,255秒に減った。"
tags: [サービスロボット導入シミュレーション, 配膳ロボット, 飲食店, ファミレス, Unity, シミュレーション, 原因の切り分け]
series: "導入シミュレーション"
---

70卓・312席の大型ファミレスを Unity の3Dで再現したシミュレーションでは、**配膳ロボット5台が止まり合う大きな原因は、0.8m 間隔で並んだ待機点へ斜めに寄るため、隣で待つロボットが前のセンサーに入ってしまうことだった。** 待機点の真下まで来てからまっすぐ入る決まりにすると、待機場所のそばの止まり合いは、1回の営業あたり3,317秒から1,255秒に減りました（同じお客さんの来かたで10回回した中央値）。実物の店で測った数字ではなく、シミュレーションの中の結果です。

この回で、次のことが良くなり、分かるようになりました。

- 近くのスタッフが、止まったロボットをすぐ押して動かす決まりを入れた。ロボット5台の店で、ロボットが止まっていた時間の合計は1回の営業あたり12,896秒から8,068秒へ、約1時間20分減り、入店待ちは17.6分から11.3分に縮んだ
- 待機点への入り方を変えるだけで、店の形（待機点の数・並び・間隔）を変えずに、待機場所のそばの止まり合いを約6割減らせた。待機場所を広げる工事をしなくても、ロボットの動き方の設定で直せる候補が見えた
- どの直し方が効いて、どれが効かなかったかを、1つずつ切り替えて比べた数で残した。待機点を列で使う・2列に並べ直す、の2つは効かず、2列のほうは元に戻した
- 入店待ちは、まっすぐ入る決まりで12.2分から14.9分に延びた。原因はロボットではなく、Unity の人が待機点の列の中を通り道にしていることだと分かり、次に直す所がはっきりした

困っていたのは、ロボットを増やすと店が遅くなることでした。前の回（LOG452）で、この大型店⑧は、ロボットを2台から5台に増やすと入店待ちが11.7分から17.2分に延び、ロボットどうしが待機場所のまわりで止まり合っていました。原因の候補はいくつもあり、数字の表だけではどれが効いているのか分かりませんでした。

そこで、店を⑧の1つ、使い方を配膳だけに絞り、原因の候補を1つずつ入れたり外したりして比べました。

| やったこと | なぜ | 結果 |
|---|---|---|
| 近くのスタッフが、5秒止まったロボットを押して動かす決まりを入れた | 現実の店なら、スタッフが真っ先にロボットを動かすため | 3台以上で効いた。5台の止まりの合計は12,896秒→8,068秒 |
| 待機場所のそばの止まり合いを10の型に分けた | どこで何が詰まるのかを知るため | 待機点に戻る台が、隣の台のそばで入れない型がいちばん多かった |
| 待機点を、受け渡し口に近い方から列のように使った | 入る順を決めれば止まり合いが減ると考えたため | ほとんど変わらなかった（行ったり来たりの1件を除くと6.3時間→6.0時間） |
| 待機点を2列に並べ直した | 間を広げるため | 戻れない待機点が出て、卓までの道も延びた。元の1列に戻した |
| 待機点の真下からまっすぐ入る決まりを入れた | 間0.8mのまま、隣の台をセンサーに入れないため | 待機場所のそばの止まり合いが3,317秒→1,255秒 |

この回では、どれか1つを直して終わりにするのではなく、何を変えたら何が変わったかを数で並べることを目的にしています。シミュレーションを実物に近づけ続けることが目的ではなく、店で問題が起きたときに原因を切り分けるための材料を集める道具として使っています。

配膳ロボットを自分の店に入れたらどうなるかは、このシリーズの試算をもとにした別のページで試せます。

【バナー】serving-robot-one-less-staff


## 作業ログ ― 大型店⑧の配膳だけに絞って、止まり合いの原因を探した

前の回の終わりに、Unity のシミュレーションのまずい所を8つ洗い出し、直し方をまとめたレポートを作りました。そのレポートを読みながら、まず範囲を絞りました。

> まずは⑧だけに絞るのはどう？問題をもっと明確にしたい

⑧は70卓・312席の大型店で、厨房が中央にあります。お客さんの来かた・人数・スタッフ6人は前の回と同じで、ロボットの台数（2〜5台）だけを変えます。ほかの店・⑨・下げ膳（食べ終えた皿を運ぶ使い方）は、この回では回していません。途中で一度、ほかの店と下げ膳まで広げた依頼（依頼101）を出してしまい、すぐ止めて⑧だけの依頼に出し直しました。

### この回で使う言葉：待機点・前のセンサー・種・30秒の呼び出し

この記事で何度も出てくる言葉を先に説明します。

| 言葉 | 意味 |
|---|---|
| 待機点 | 配膳ロボットが、運ぶ料理がない間に止まって待つ場所。⑧ではパントリー（料理を出す棚）の前の壁ぞいに、6つが0.8m 間隔で1列に並んでいる |
| 受け渡し口 | 厨房から料理を受け取る所。ロボットは待機点からここへ行き、料理を載せて卓へ運び、待機点へ戻る |
| 前のセンサー | ロボットが前にある物を見て止まるための目。ロボットの中心から0.85m（台の半径0.25m＋0.6m）先まで届く。実物の配膳ロボットにも、前の人や物で止まる仕組みがある |
| 種 | お客さんがいつ何人で来るかなど、偶然で決まる部分を作るための番号。種が同じなら同じお客さんが同じ時刻に来るので、決まりを変えたときの違いだけを比べられる。1つの条件を種0〜9の10回で回し、真ん中の値（中央値）で見る |
| 30秒の呼び出し | Unity の店で前から入れていた決まり。ロボットが30秒動けないと、スタッフが呼ばれて助けに行く |
| 依頼箱 | Unity の作業を [Claude Code](https://claude.com/claude-code) に頼む仕組み。依頼文を iCloud のフォルダに置くと、Mac で Claude Code が順に作業し、結果を書き戻す。依頼100 のような番号は、この依頼の番号 |

[Unity](https://unity.com/) は、ゲームや3Dの場面を作る道具です。このシリーズでは、店の形と条件をサイトの試算（表計算で出した見込み）から写し、Unity の中に店を建てて、お客さん・スタッフ・ロボットを動かしています。店の形と条件の正はサイトで、Unity はそれを読みます。


## 作業ログ ― 依頼100：近くのスタッフが止まったロボットを動かす決まりを入れた

レポートを見たあと、シミュレーションのいちばんまずい所は、別の所にあると分かりました。Unity の画面で、スタッフがロボットのすぐ横に立っているのに、ロボットを動かして通路を開けようとしない場面です。

【画像】LOG456_01_staff_beside_robots.png ⑧の Unity の画面。客席の間の通路で、白い配膳ロボット2台と青いスタッフ、黄色いお客さんが固まっている。スタッフはロボットの横に立っているが、ロボットを動かさない

> 単純にシミュレーションとしてまずいのは、スタッフがロボットの近くにいるのにロボットを動かして通路を開けたりすることをシミュレーションで行わないところ（現実なら接客中でなければ、まず一番最初にロボットを動かすはず）なのでまずはスタッフが何を重要視しているかと、ロボットに対してどんな時に働きかけるかを明確にした方が良さそう。

> この画像の状態だったら真っ先にロボットを止めて動かすね

それまでの Unity の店では、ロボットが30秒動けないと呼び出しがかかり、呼ばれたスタッフが行って押すだけでした。近くにいる人が自分から動かすことはありません。どんなときにスタッフが動くかを、次のように決めました。

> どのくらい近くにいる人が動かすか7メートルくらいかな／料理や皿を持って歩いている途中の人は動かさない（料理や皿を置いてからロボットを動かしにくる）／自分の道をふさがれたときに、すり抜けられる幅があっても動かすか：その時は動かさないでいい／お客さんはロボットに触らない

> ロボットが何秒止まっていたら、近くのスタッフが動かしに行くか：5秒かな。

この決まりを、サイトの条件の表（serving-robot-params.json）の unity_rules に staff_moves_robot として足しました。既定は切で、Unity は入にした回だけこの動きをします。

- ねらい：現実のスタッフと同じように、止まったロボットを近くの人がすぐ動かし、ロボットどうしの止まり合いが長引かないようにする
- 変わったこと：ロボットが5秒止まると、7m 以内で手の空いているスタッフ（料理や皿を持っていない人）が動かしに行く
- 見込める効果：止まりの合計と30秒の呼び出しが減る。結果は下の依頼100・101b の表で確かめた

### params の差分（p2m-site commit 143aaf2）

```diff
commit 143aaf25114291821fa7d722bf5fa4ad353a037a
Author: Claude <noreply@anthropic.com>
Date:   Fri Nov 6 23:15:56 2026 +0900

    params: unity_rules に staff_moves_robot（近くのスタッフがロボットを動かす・既定は切）を足す


diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index 6a78d4c..8234b1e 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -417,6 +417,13 @@
     }
    },
    "wait_points_checked": "2026-11-01 ロボットの地図で、待つ点はどれもふだんの道（1.0m）が通れるマス（free_class=2）で、障害物から0.59m以上離れていることを確かめた"
+  },
+  "staff_moves_robot": {
+   "value": false,
+   "role": "site_rule",
+   "stopped_s": 5,
+   "reach_m": 7,
+   "note": "（切）近くのスタッフがロボットを動かして通路を空ける（2026-11-06 エイイチと決めた。まず⑧で今のままと比べ、標準にするかは結果を見て決める）。ロボットが走っている途中で5秒以上止まったとき（待機場所・受け渡し口・卓で決まって待っているときは除く）、止まったロボットから歩いて7mくらいまでにいるスタッフのうち一番近い1人が、真っ先に行ってロボットを止め、脇へ動かす（瞬間移動はしない）。行かない人：お客さんの対応中（案内・会計・卓での接客）。料理や皿を持って歩いている人は、それを置いてから動かしに来る。自分の道をふさがれても、すり抜けられる幅があるなら動かさない。お客さんはロボットに触らない。7m以内に行ける人がいなければ、今までどおり30秒で呼ぶ。試算の数字は変わらない"
   }
  },
  "stores": {
```

### 依頼100 の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 600
---
# 依頼100：近くのスタッフがロボットを動かして通路を空ける決まりを入れ、⑧だけで今のままと比べる

エイイチと決めたこと（2026-11-06）：
- シミュレーションとしていちばんまずいのは、スタッフがロボットのそばにいても、ロボットを動かして通路を空けないこと。現実なら、接客中でなければ真っ先にロボットを止めて動かす
- 今の作りでは、ロボットを動かすのは30秒止まって呼んだときだけ。⑧ 5台・種7（large95）では、呼ばれたスタッフが歩いた距離の中央値は3m。人がロボットで詰まった1,147回は、ほぼ全部が体を横に向けてすり抜けていた
- 問題をはっきりさせるため、まず⑧（large_p6）だけに絞る。⑨やほかの店はこの依頼では回さない

決まりの正はサイト。p2m-site の public/sim/serving-robot-params.json の unity_rules に `staff_moves_robot` を足した（commit 143aaf2。既定は切。stopped_s 5・reach_m 7）。note の文がそのまま決まり。試算の数字・条件・店の形は変えていない。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。時刻で止めず、全部終わるまで続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が最新の check-in の cs、保留 0。Unity エディタ・night_runner／rec_runner が動いていない（依頼99 の舞台の撮影が残っていないことも見る）。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳を archive/unity_ledger_v1_pre_100_20261106/ に退避（行数と md5 を報告に）
2. サイトの params を Unity に写し直す（依頼95 と同じやり方）。前の写しと比べ、違いが unity_rules.staff_moves_robot が1つ増えたことだけであることを確かめる

## 1. 近くのスタッフがロボットを動かす（切り替え。名前は staffMovesRobot、既定は切）
params の note のとおりに作る。決まりの要点：
- きっかけ：ロボットが走っている途中で 5秒以上止まったとき（待機場所・受け渡し口・卓で、決まって待っているときは除く）。秒数と距離は params の stopped_s・reach_m から読む（コードに書き込まない）
- 行く人：止まったロボットから、歩く道のりで 7m 以内にいるスタッフのうち一番近い1人。1台に行くのは1人だけ
- 行かない人：お客さんの対応中（案内・会計・卓での接客や呼び出しの対応）。入口番は、入口で案内・会計をしていなければ行ってよい
- 料理や皿を持って歩いている人：その場では動かさない。置いてから、まだロボットが止まっていて 7m 以内なら動かしに来る
- 自分の道をロボットにふさがれたとき：すり抜けられる幅があれば今までどおりすり抜ける。すり抜けられないときは、止まって5秒を待たずにロボットを動かしてから通る
- 動かし方：今の助けの動かし方（相手の前のセンサー 0.6m にかからない所まで、押して動かす。案a）を使う。瞬間移動はしない。動かしたら、スタッフは元の仕事・持ち場へ戻る
- お客さんはロボットに触らない
- 7m 以内に行ける人がいなければ、今までどおり 30秒で呼ぶ（stuck_rescue はそのまま）
- パネルでは、動かしに行っている間を「ロボットの助け」に入れる
- 記録：動かした1回を1行で staff_moves.csv に（店の時刻・ロボット・止まってからの秒・スタッフ・行く前にしていたこと・歩いた道のり・動かした距離・かかった秒・きっかけ〔5秒／道をふさがれた〕）。summary.json に回数・合計秒・30秒の呼び出しの回数を足す
- 人の動きの部品があれば、その中に入れる。check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- 切のとき、⑧ 2台 serve 種7 を回し、large95 の同じ回と記録が1行も違わないこと（人の先よけを入にして比べる。large95 は先よけ入のため）
- 入のとき、⑧ 5台 serve 種0 を2回回して記録が1行も違わないこと
- 入のとき、瞬間移動 0

## 3. 回す（画面なし・同時4本・⑧ serve だけ・人の先よけは標準の切）
- ⑧ の条件 92・136・137・138（2・3・4・5台）× 種0〜9 を、staffMovesRobot 切（label sm100off）と入（label sm100on）で ＝ 80 回
- 先よけ切は今の標準。large95 は先よけ入なので、比べるのは sm100off と sm100on の間だけにする
- 1回の上限は 90 分。止まっても回し直さない

## 4. 表にすること（10種の中央値。切と入を並べる）
- 台数ごとに：ロボットの止まりの合計秒・うちロボット同士・5秒以上の止まりの回数と秒・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数と合計秒・料理ができてから届くまで・料理が受け渡し口でロボットを待った秒・2分待って人が運んだ皿・人がロボットで詰まった回数と秒・往復数・スタッフの仕事の割合・入店待ち（参考）
- 止まりの多い場所の上位5つ（台数ごと、切と入で）
- スタッフが動かした場面の、行く前にしていたことの内訳と、歩いた道のりの分布

## 5. 撮る（2 が通れば、3 の結果に関わらず撮る）
- ⑧ 5台 serve 種7 を、切と入の2本。撮り方は依頼96 と同じ（rec_runner・3840×2160・0.5 秒ごと・frames.csv・timeline.csv）。1回の上限 120 分・同時2本
- 置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sm100_20261107/{off|on}/
- 依頼98 と同じ形で、切と入を左右に並べ、詰まりに寄せて店の時刻の5倍で流すパネル付きの動画を作る。寄る場面は、切の方でロボットの止まりがいちばん長い5分。題「⑧ ロボット5台：今のまま と 近くのスタッフが動かす」。題がパネルで切れないことを1コマ見て確かめる
- 撮った回と撮らない回で結果が違う件（LOG452）は、この依頼では直さない。撮った回の入店待ち・止まりの合計秒を、撮らない同じ種の回と並べて報告に書くだけ

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき、または切のときの⑧が large95 と違ったとき。止めたら報告に書き、ほかの項目は続ける（ただし確かめが通らなければ撮らない）。

## 報告
claude_code_reports/20261107_sm100.txt に：始める前の確かめ（params・cs と build_id）、作り（どのファイルのどこ・値の読み方・切り替えの名前）、2 の確かめ、4 の表、5 の動画の名前・長さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼100 の結果

```text
# 結果：20261106_100_近くのスタッフがロボットを動かす決まりを入れ⑧で比べる

- 状態：完了
- 始めた時刻：2026-11-06 23:17
- 終わった時刻：2026-11-07 02:19（182分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 9246fe00-4f54-4346-9fd9-43abacdab8c7`

## Claude Code の報告

やったこと
- 始める前の確かめをしました。作業場所は cs:83 で保留 0、Unity と実行係は動いておらず、KIOXIA はマウント済みで鍵ファイルもありませんでした。台帳（3,311 行・md5 dc233776ff503e9d065bb01f70e4c27d）を archive/unity_ledger_v1_pre_100_20261106/ に退避しました。
  - 実行ファイルは cs:81 で作ったままで、最新の check-in（cs:83）と違っていました。cs:82・83 は依頼99 の舞台の分だけで、実行ファイルの中身には入りません。そこで止めずに進め、cs:84 で作り直しました。回したのはすべて cs:84 です。
- サイトの params（p2m-site 143aaf2）を Unity に写し直しました。前の写しとの違いは unity_rules.staff_moves_robot が1つ増えたことだけでした。
- 切り替え staffMovesRobot（引数 -ssStaffMovesRobot、既定は切、入の回だけフォルダ名に _smove）を作りました。
  - 5 秒と 7 m は params の stopped_s・reach_m から読みます。
  - 動かし方は今の助けと同じ、押して動かす形（案a）です。記録は staff_moves.csv と summary.json の staff_moves に出します。
  - cs:84 で check-in して保留 0、実行ファイルは build_id cs84_20261106_2327 です。
- 確かめを3つ回しました。そのあと ⑧ の 80 回を回し、⑧ 5台 種7 を切と入で2本撮って、左右に並べた動画を作りました。

結果
- 確かめはどれも通りました。
  - 切の ⑧ 2台 種7 は large95 の同じ回と全ファイル一致しました。
  - 入の ⑧ 5台 種0 は2回で一致しました。
  - 瞬間移動は 0 でした。
- 80 回はすべて completed で、瞬間移動 0、1コマの跳び 0 でした。ただし切の ⑧ 5台 種0 は1組が帰らず、上限の 720 分まで回りました。
- 切 → 入の比べ（10 種の中央値・1回あたり）：

| 台数 | 止まりの合計秒 | 60秒動けなくなった | 人がロボットで詰まった回数 | 入店待ち（参考） |
|---|---|---|---|---|
| 2台 | 2,526 → 2,396 | 7 → 2 | 414 → 399 | 11.65 → 10.55 分 |
| 3台 | 6,054 → 4,594 | 21 → 6 | 909 → 536 | 12.64 → 11.36 分 |
| 4台 | 9,248 → 7,279 | 36 → 9.5 | 1,342 → 675 | 16.11 → 11.43 分 |
| 5台 | 12,896 → 9,704 | 51.5 → 19 | 1,373 → 859 | 17.56 → 14.12 分 |

- 3台以上ではっきり効きました。2台はほとんど変わりません。
- スタッフが動かした回数は 2〜5台で 34・69・107・131 回です。30 秒の呼び出しは 3・4台で約4割減りましたが、5台ではほぼ同じでした（153.5 → 149.5）。
- スタッフが行くと決めた 8,099 回のうち 4,411 回は、着く前にロボットが自分で動き出して取り消しになりました。
- 動かした 3,553 回のうち 37% は手が空いて立っていた人で、ほかは片付けや料理の行き来の途中に寄った人です。歩いた道のりの中央値は 0.52 m でした。
- 撮った回と撮らない回は今回も数が違いました（直していません）。入店待ちは、切が撮った 17.67 分・撮らない 16.12 分、入が撮った 10.73 分・撮らない 14.11 分です。
- 動画は rec_sm100_20261107/slow_off_on/slow_off_on_panel.mp4 です（61.5 秒、3840×1280）。
  - 寄った場面は、切の方でロボットの止まりがいちばん長い5分（開店から 1時間10分〜15分、パントリーのそば）です。
  - 題が長く1段の帯では字が重なるため、帯を2段にしました。そのぶん高さが依頼98 の 1200 から 1280 になっています。
  - 題とパネルが切れていないことは、真ん中の1コマを見て確かめました。
- 台帳は 3,311 行から 3,396 行になりました（追記 85 行だけ）。先頭 3,311 行の md5 は始める前と同じで、終わったあとの md5 は 11564dd2b471e9226714d42bbdaadf1f です。
- 報告は claude_code_reports/20261107_sm100.txt に書きました。最後の行は「判定：止めた（決めてほしいことあり）」です。

変えたファイル
- Unity（cs:84）：
  - serving-robot-params.json
  - ServiceOps.cs、StaffAgent.cs、ServingRobotController.cs、JamWatcher.cs
  - ExperimentRunner.cs、TripLogger.cs、HeadlessRun.cs
- tools（cs:84）：night_runner.py、make_queue.py、judge_night.py
- 実行ファイル：Builds/headless を作り直し、録画用に写した Builds/rec24_sm100 を足しました。
- KIOXIA：night/20261107_sm100/ ほか回のフォルダ、rec_sm100_20261107/、台帳の退避と追記
- 報告：claude_code_reports/20261107_sm100.txt

決めてほしいこと
1. スタッフは着いてから 15 秒待ってから押しています。今の助けの動かし方をそのまま使ったためです。このままにするか、近くのスタッフの分だけ短くするか。
2. 行くと決めた回の半分あまりが、着く前の取り消しで歩いただけになっています。このままにするか、行く場面を絞るか（たとえば、相手のロボットも止まっているときだけ）。
3. 次の4つは私が決めて作りました。これでよいか。
   - その場で手を動かしている人（料理を卓で渡す・皿をまとめる・卓を拭く）は、終わるまで行きません。
   - 「すり抜けられない」は、体を横に向けても 3 秒抜けられないことにしました。そのとき、進む向きの 1.5 m 以内で止まっている台を動かします。
   - よける場所で待っているロボットの止まりも、5 秒のきっかけに入れました（30 秒の呼び出しと同じ扱い）。
   - 60 秒で着けなかった人はやめて自分の仕事へ戻り、その止まりのあいだは同じ人を選びません。
4. サイトの staff_moves_robot を標準の入にするか。回したのは ⑧ だけで、ほかの店と下げ膳（bus）は回していません。
```

### 依頼100 の Claude Code の報告（20261107_sm100.txt）

```text
====================================================================
依頼100：近くのスタッフがロボットを動かして通路を空ける決まりを入れ、⑧だけで今のままと比べる
2026-11-06 23:18〜2026-11-07 02:20　作業場所 cs:83 → cs:84
====================================================================

結論
  ・止める線には当たらなかった。確かめ（2 章）は3つとも通った（切は large95 と全ファイル一致・入の2回は一致・瞬間移動 0）
  ・3 章の 80 回はどれも completed。瞬間移動 0・1コマの跳び 0。切の ⑧5台 種0 だけ、1組が帰らず上限の 720 分まで回った（下の 3 章）
  ・入にすると、⑧ のどの台数でもロボットの止まりが減った（10 種の中央値・1回あたり）
      止まりの合計秒　2台 2,526 → 2,396／3台 6,054 → 4,594／4台 9,248 → 7,279／5台 12,896 → 9,704
      60秒動けなくなった　2台 7 → 2／3台 21 → 6／4台 36 → 9.5／5台 51.5 → 19
      人がロボットで詰まった回数　2台 414 → 399／3台 909 → 536／4台 1,342 → 675／5台 1,373 → 859
      入店待ち（参考）　2台 11.65 → 10.55／3台 12.64 → 11.36／4台 16.11 → 11.43／5台 17.56 → 14.12 分
  ・ただし、スタッフが行くと決めた回の半分あまり（8,099 回のうち 4,411 回）は、着く前にロボットが自分で動き出して取り消しになった（下の 4-3）
  ・動画を1本作った（rec_sm100_20261107/slow_off_on/slow_off_on_panel.mp4・61.5 秒）
  ・決めてほしいことが4つある（最後に書く）


--------------------------------------------------------------------
0. 始める前の確かめ（23:18〜23:22）
--------------------------------------------------------------------
  1. 作業場所 cs:83 - head・保留 0（cm status）。Unity エディタ・night_runner・rec_runner：動いていない（Unity Hub と依頼箱の claude だけ。
     依頼99 の舞台の撮影も残っていない）／KIOXIA マウント済み／unity_ledger_v1.lock なし
     ・Builds/headless は build_id cs81_20261106_0947（cs:81）で、最新の check-in（cs:83）と違っていた。
       cs:82・cs:83 は依頼99 の Assets/VideoStage/（Editor スクリプトと、ビルド設定に入っていないシーン・マテリアル）だけで、実行ファイルの中身には入らない。
       この依頼で cs:84 に作り直したので、回したのはすべて cs:84 の実行ファイル（下の 1 章）。cs:81 のまま回した回はない
     台帳を archive/unity_ledger_v1_pre_100_20261106/ に退避：3,311 行・md5 dc233776ff503e9d065bb01f70e4c27d（依頼96 の終わりと同じ）
  2. params：GitHub p2m-site main 143aaf2（「params: unity_rules に staff_moves_robot（近くのスタッフがロボットを動かす・既定は切）を足す」）の
     public/sim/serving-robot-params.json を gh api で取った。143aaf2 指定で取ったもの・公開版 https://pixelstomotors.com/sim/serving-robot-params.json と
     md5 が同じ（a0731b2071b0ea68d0e7d9645a7ce309）。前の写し（cs:81 まで・md5 1b1c1428340ad862dc0d3fe6fef82115）と JSON を中まで比べ、
     違いは unity_rules.staff_moves_robot が1つ増えたことだけ（value false・role site_rule・stopped_s 5・reach_m 7・note）。
     ほかの項目（条件・試算の数・店の版）は1つも変わっていない


--------------------------------------------------------------------
1. 作り（切り替えの名前 staffMovesRobot。既定は切）
--------------------------------------------------------------------
  切り替え：実行ファイルの引数 -ssStaffMovesRobot on|off（付けないときは切）。並び（queue）の項目 staff_moves_robot、make_queue.py の --staff-moves-robot。
    入の回だけ出力フォルダ名の末尾に _smove（_pyield の後ろ・店の指定の前）。run_info.json の staff_moves_robot（入の回だけ出す）
  値の読み方：stopped_s・reach_m は params の unity_rules.staff_moves_robot から、入の回だけ ExperimentRunner.ReadStaffMovesRobot が読む
    （UnityRuleBody。読めない・0 以下なら回さない）。コードには書き込んでいない。今の値は 5 秒・7 m
  人の部品：人の動きの部品（PersonRobotYield）はロボットをよける部品なので、だれが行くかは仕事板（ServiceOps）に、
    この人が今行けるか・仕事を止めて戻るはスタッフ（StaffAgent）に入れた
  どこに入れたか
    ・Service/ServiceOps.cs「近くのスタッフがロボットを動かす（依頼100）」の節：UpdateStaffMoves（毎コマ。Advance から）・NearestStaffForMove・
      StoppedRobotBlocking・StartStaffMove。RequestStuckRescue の中身を NewRescueRecord に切り出して共通にした（30 秒の呼び出しの動きは同じ）
    ・Robot/ServingRobotController.cs：StoppedOnRunFor（走っている途中の止まりが何秒か）・FindRescuePartnerNow
    ・People/StaffAgent.cs：CanGoMoveRobot（行けるか・行く前にしていたこと）・BeginStaffMove（今の仕事を止めておく）・ResumeSuspended（続きへ戻る）
    ・Service/JamWatcher.cs：NarrowedStuckS（体を横に向けても進めない秒。読むだけ）
    ・Experiment/ExperimentRunner.cs・TripLogger.cs・HeadlessRun.cs、tools/night_runner.py・make_queue.py・judge_night.py
  決まりの作り方
    ・きっかけ：卓へ／受け渡し口へ／待機場所へ走っている途中で、止まりに数える止まりが stopped_s 以上続いた台（往復の外・卓での受け渡し・
      通路の入口と1本道の順番待ちは入らない）。よける場所で待っている止まりは、30 秒の呼び出しと同じく入れた
    ・行く人：その台から人の床を歩く道のり（NavMesh の道の長さ）が reach_m 以内で、行けるスタッフのうち一番近い1人（同じなら番号の小さい方）。
      1台に1人（その台・相手の台にまだ終わっていない助けがあれば出さない）。板には出さず、決めた1人に直接渡す
    ・行かない人：案内・会計・呼び出し（お客さんの対応中）、料理を持って卓へ歩いている、皿を持って返却口へ歩いている、
      その場で手を動かしている（料理を卓で渡す・皿をまとめる・卓を拭く）、もう助けに行っている人。入口番は仕事を持っていなければ行く
    ・料理や皿を持っている人は、置いて手が空いた時点で、まだ止まっていて 7 m 以内なら行く（毎コマ見直すので）
    ・道をふさがれた：体を横に向けても今の「下がる」の線（PeopleSpec の jamBackOffAfterSec 3 秒）まで抜けられず、進む向きの 1.5 m 以内に止まっている台
      （卓で受け渡し中の台は除く）があれば、5 秒を待たずにその人がその台を動かす。抜けられる人は今までどおり抜ける
    ・動かし方：今の助けと同じ（着いて rescue_s 15 秒のあと、相手の前のセンサーにかからない所まで押す。wideClear＝案a）。瞬間移動はしない。
      動かす台の選び方（空の方・遠い方など）も今の助けと同じ。着く前に台が自分で 2 秒動けたら取り消し（今の助けと同じ）
    ・戻る：止めておいた仕事の同じ行き先から続ける。仕事が無かった人は、今までどおり持ち場・入口番・待機を決め直す
    ・着けなかったとき：60 秒で着けなければ、その人はやめて自分の仕事へ戻る。その台のその止まりのあいだは同じ人を選ばない
    ・7 m 以内に行ける人がいなければ何もしない（30 秒で今までどおり呼ぶ。stuck_rescue は変えていない）
    ・お客さんはロボットを動かさない（客は選ばない）
    ・パネル：動かしに行っているあいだは仕事の種類が助け（Rescue）なので、timeline.csv の staff_rescue＝パネルの「ロボットの助け」に入る
  記録（入の回だけ。切の回は今までと同じファイル・同じ中身）
    ・staff_moves.csv（1回1行）：t_s（行くと決めた店の時刻）・stopped_robot_id・moved_robot_id・stopped_s（止まってからの秒）・staff・before（行く前にしていたこと）・
      reach_path_m（決めたときの道のり）・walk_m（歩いた道のり）・push_m（動かした距離）・took_s（かかった秒）・trigger（5秒／道をふさがれた）・outcome など
    ・summary.json の staff_moves：moves（動かした回数）・moves_s（合計秒）・calls・cancelled・gave_up・rescue_calls_30s（30秒の呼び出しの回数）
    ・近くのスタッフの分は rescues.csv と stuck_rescue の数（calls・rescues など）に入れない（30 秒の呼び出しと分けるため）
  check-in：cs:84（上の 11 ファイルを cm ci で1つずつ指定）。保留 0
  実行ファイル：Builds/headless　build_id cs84_20261106_2327・unity_cs ServiceSim/cs:84・pending_changes 空・Build Finished, Result: Success
    （記録 night/20261107_sm100/build.log）。録画用は Builds/rec24_sm100（Builds/headless の写し・実行ファイルの md5 cdd79814491f4969298e59b34d02d6bb）


--------------------------------------------------------------------
2. 確かめ（cs:84。23:28〜23:32。比べ方は依頼95 の cmp95.py の写し cmp100.py）
--------------------------------------------------------------------
  ・切：⑧2台 serve 種7・人の先よけ 入（det100）と large95 の同じ回（20261106_large95_cs81_large_p6_r2_s7_…_pyield）
      → 一致（conditions.json・contacts・dishes・give_ups・groups・nowarp_jams・passes・people_jams・requeues・rescues・robot_track・run_info・stops・
        summary・timeline・trips・yield_ahead・yields の 18 ファイルすべて。cmp_det100_vs_large95.txt）
  ・入：⑧5台 serve 種0・人の先よけ 切 を2回（chk100a・chk100b）→ 一致（staff_moves.csv をふくむ 18 ファイル。cmp_chk100.txt）
  ・瞬間移動：3回とも 0・1コマの跳び 0
  → 通ったので 3 を回した


--------------------------------------------------------------------
3. 回したこと（画面なし・同時4本・人の先よけ 切・やり直しなし・1回の上限 90 分）
--------------------------------------------------------------------
  ⑧ 条件 92・136・137・138（large_p6_s6_r2〜r5_a70。番号と名前は params で確かめた）× 種0〜9 を sm100off（切）と sm100on（入）＝ 80 回
    ほかの入切は large95 と同じ（すれ違い入・案B切・待機場所へ戻る入・入口番入・持ち場入・一方通行切・1本道切・立ち往生の助け入）
  回し方：night/20261107_sm100/run100.sh（60 秒ごとに瞬間移動・1コマの跳びを見て、出たら止める。watch_log.txt）
  23:32〜00:55。80 回とも completed。見張りは最後まで「瞬間移動 0・1コマの跳び 0」。実時間の中央値は 1回 3〜5 分（上限には当たらない）
  ・切の ⑧5台 種0 は、1組（組 108）が帰らず、上限の店の時刻 720 分まで回った。ロボット1台の「1往復の打ち切り」の詰まりが回の終わりまで残っていた。
    入の同じ回は全員が帰った。判定の材料には入れたまま（入店待ちは帰った組まで）


--------------------------------------------------------------------
4. 表（night/20261107_sm100/agg100_out.txt。10 種の中央値・回数と秒は1回あたり）
--------------------------------------------------------------------
4-1. 台数ごと
  項目	2台 切	2台 入	3台 切	3台 入	4台 切	4台 入	5台 切	5台 入
  ロボットの止まりの合計秒	2526	2396	6054	4594	9248	7279	12896	9704
  うちロボット同士（秒）	926	620	3162	2134	5048	4215	9060	6227
  5秒以上の止まり（回）	58	60	141	124	216	206	304	282
  5秒以上の止まり（秒）	1356	1272	3862	2660	5921	4176	8022	5740
  60秒動けなくなった（回）	7.0	2.0	21.0	6.0	36.0	9.5	51.5	19.0
  30秒の呼び出し（回）	66.0	73.0	130.5	82.0	146.0	89.5	153.5	149.5
  スタッフが動かした（回）	-	34.0	-	69.0	-	107.0	-	131.0
  スタッフが動かした（合計秒）	-	629	-	1246	-	2078	-	2583
  （参考）行くと決めた（回）	-	45.5	-	101.5	-	224.0	-	329.5
  （参考）着く前に取り消し（回）	-	7.5	-	27.5	-	107.0	-	172.0
  料理ができてから届くまで（分）	2.37	2.33	2.25	1.94	2.16	1.89	2.26	1.95
  料理が受け渡し口でロボットを待った（秒／皿・ロボットが運んだ皿）	60.7	59.2	48.7	41.6	38.0	35.0	37.0	30.1
  2分待って人が運んだ皿	83.0	80.5	56.5	45.5	44.0	35.5	41.0	31.5
  人がロボットで詰まった（回）	413.5	398.5	909.0	535.5	1342.0	674.5	1372.5	859.0
  人がロボットで詰まった（秒）	624	530	1378	792	2144	999	2386	1215
  往復数	137.5	137.0	185.0	197.5	210.0	223.0	230.0	248.0
  スタッフの仕事の割合	0.662	0.676	0.708	0.674	0.734	0.700	0.769	0.760
  （参考）スタッフの時間のうちロボットの助け	0.014	0.021	0.028	0.032	0.037	0.043	0.047	0.070
  入店待ち（分・参考）	11.65	10.55	12.64	11.36	16.11	11.43	17.56	14.12
  数え方：止まり＝stops.csv の duration_s の和。ロボット同士＝cause「もう1台のロボット」。60秒＝summary の stops.stuck_count。
    30秒の呼び出し＝stuck_rescue.calls（近くのスタッフの分は入らない）。動かした＝staff_moves.moves・moves_s。料理ができてから届くまで＝dish_wait_mean。
    2分待って人が運んだ皿＝late_staff_dishes。人がロボットで詰まった＝people_jams.csv の robot_blocked=1。仕事の割合＝staff_util
  読み取り
    ・3台以上で効き目がはっきりする。止まりの合計は 3〜5台で 21〜25% 減り、60秒動けなくなったのは 3分の1〜4分の1 になった
    ・30秒の呼び出しは 3・4台で約 4割減ったが、5台はほぼ同じ（153.5 → 149.5）。5台では 7 m 以内に行ける人がいない時間が多いとみられる（推測）
    ・人がロボットで詰まった回数・秒は 3〜5台で約半分になった
    ・料理の待ち・受け渡し口で待つ秒・人が運んだ皿も 3〜5台で少し良くなった。往復数は 3〜5台で 13〜18 往復増えた
    ・スタッフの仕事の割合は 3・4台で少し下がった（0.708 → 0.674・0.734 → 0.700）。動かす時間は増えるが、詰まりで待つ時間が減った分が大きいとみられる（推測）
    ・2台はほとんど変わらない（止まりの合計 −5%）

4-2. 止まりの多い場所の上位5つ（stops.csv の止まりを、店の形の places と卓の止まる点のうち 2 m 以内の一番近い所に割り当て、10 種の和を 10 で割った秒）
  2台 切	ロボットの待機場所のそば 581・卓 T65のそば 349・卓 T22のそば 183・スタッフの持ち場のそば 180・ドリンクバーの前に立つ点のそば 147
  2台 入	ロボットの待機場所のそば 588・卓 T65のそば 348・スタッフの持ち場のそば 134・卓 T22のそば 127・パントリーのそば 116
  3台 切	ロボットの待機場所のそば 1875・卓 T33のそば 384・スタッフの持ち場のそば 314・パントリーのそば 285・卓 T32のそば 250
  3台 入	ロボットの待機場所のそば 1528・パントリーのそば 267・スタッフの持ち場のそば 262・卓 T22のそば 190・卓 T65のそば 189
  4台 切	ロボットの待機場所のそば 3339・パントリーのそば 496・スタッフの持ち場のそば 485・ドリンクバーの前に立つ点のそば 443・卓 T65のそば 414
  4台 入	ロボットの待機場所のそば 3262・スタッフの持ち場のそば 463・パントリーのそば 453・卓 T65のそば 383・ドリンクバーの前に立つ点のそば 261
  5台 切	ロボットの待機場所のそば 6825・パントリーのそば 788・ドリンクバーの前に立つ点のそば 514・卓 T33のそば 490・スタッフの持ち場のそば 453
  5台 入	ロボットの待機場所のそば 5212・パントリーのそば 633・スタッフの持ち場のそば 450・ドリンクバーの前に立つ点のそば 307・卓 T65のそば 277
  → どの台数も「ロボットの待機場所のそば」がいちばん多いのは変わらない。5台では 6,825 → 5,212 秒と減ったが、4台はほぼ同じ（3,339 → 3,262）

4-3. スタッフが動かした場面（入の 40 回。動かした・連れて戻した・その場で引き直した の行。10 種の和）
  台数	動かした	行くと決めた	着く前に取り消し（台が自分で動き出した）	着けずにやめた	きっかけ（5秒／道をふさがれた）
  2台	388	734	338	7	365／23
  3台	712	1844	1115	9	668／44
  4台	1093	2314	1190	14	1041／52
  5台	1360	3207	1768	46	1303／57
  全部	3553	8099	4411	76	3377／176
  行く前にしていたこと（全部・動かした 3,553 回）：
    片付けの卓へ戻る（返却口から卓へ戻る途中）1,054・片付けの卓へ行く 618・持ち場 1 400・待機 381・料理を届けて戻る 312・料理を取りに行く 251・
    持ち場 2 197・持ち場 3 158・持ち場 4 124・入口番 56・道をあけた 2
    → 手が空いて立っていた人（持ち場・待機・入口番・道をあけた）は 1,318 回（37%）。残りは片付けや料理の行き来の途中で寄った人
  歩いた道のり（行くと決めてから着くまで）：中央値 0.52 m・90% 5.52 m・最大 35.41 m
    0〜1 m 1,990・1〜2 m 295・2〜3 m 300・3〜5 m 494・5〜7 m 423・7 m〜 51
    （行くと決めたときの道のりは中央値 1.45 m・最大 7.00 m。7 m を超えて歩いた 51 回は、着く前に台や人をよけて回り込んだ分とみられる）
  台数ごとの歩いた道のりの中央値：2台 0.52 m・3台 0.13 m・4台 0.55 m・5台 0.62 m

4-4. 回ごとの入店待ち（分）／止まりの合計秒は agg100_out.txt の 4-4 にある


--------------------------------------------------------------------
5. 撮った回と動画
--------------------------------------------------------------------
  撮り方：依頼96 と同じ（依頼96 の rec_runner.py の写し・md5 ccc702841f7e952d97bea39e3959c6d1・同じ中身。--oblique --hide-paths --max-wall-min 120
    --parallel 2 --no-retry --limit-min 150。wide_l30・wide_r30・3840×2160・0.5 秒ごと・frames.csv・camera.json・timeline.csv）。
    実行ファイルは Builds/rec24_sm100（cs:84）。人の先よけは 3 章と同じ 切
  00:55〜02:15。2本とも completed・全員が帰った・瞬間移動 0・1コマの跳び 0（実時間 80.7・78.2 分）
  置き場所：rec_sm100_20261107/off/・on/（録画 mp4 2本ずつ・frames.csv・camera.json・timeline.csv・summary.json・stops.csv・robot_track.csv・contacts.csv・
    rescues.csv、on は staff_moves.csv も）
  撮った回と撮らない回（同じ ⑧5台 serve 種7・人の先よけ 切）の比べ（LOG452 の件。直していない）
    	入店待ち（分）	止まりの合計秒
    切 撮った	17.67	11,975
    切 撮らない	16.12	12,035
    入 撮った	10.73	9,511
    入 撮らない	14.11	10,081
    → 今までと同じく、撮った回と撮らない回で数が違う（切は 1.55 分・入は 3.38 分）

  動画：rec_sm100_20261107/slow_off_on/slow_off_on_panel.mp4　61.5 秒・3840×1280・30fps（ffprobe）・5,409,013 バイト
    題「⑧ ロボット5台：今のまま と 近くのスタッフが動かす」。左＝今のまま（off）、右＝近くのスタッフが動かす（on）
    作り：依頼98 の形（店全体の引きに寄る枠を描いた1コマ 1.5 秒 → 寄った絵を店の時刻の5倍で 60 秒。左右にパネル）
      ・寄る5分：切の方でロボットの止まりがいちばん長い5分（一日の中・30秒きざみ）＝ 1時間10分00秒〜1時間15分00秒（店の時刻 4,200〜4,500 秒）
        この5分の止まり 切 1,253 秒（366 回）／入 264 秒（114 回）。片付けを待つ卓 7.6／5.8・入口で待つ組 6.4／3.0
      ・寄った所：パントリーのそば（店の座標 17.2, 10.5）。止まりの多い所：パントリーのそば 854 秒・ロボットの待機場所のそば 458 秒
      ・道具：night/20261107_sm100/ の select100.py（select98.py の写しで、選ぶ所だけ変えた）・slow100.py（slow98.py の写し）・mpv100.py（mpv98.py と同じ中身）
      ・依頼98 から変えたこと：題が長く、1段の帯だと説明・時刻・寄った所・左右の名前と重なったので、帯を2段（上：題・説明・時刻／下：寄った所・左右の名前）にした。
        そのため大きさが 3840×1200 から 3840×1280 になった
    題がパネルで切れないか：寄りの真ん中のコマ（slow_off_on_panel_check_s1_slow_mid.png）を目で見た。上の帯の題・説明・時刻、下の段の寄った所・左右の名前、
      左右のパネルの題「⑧ 今のまま」「⑧ 近くのスタッフが動かす」・ロボット5台の5つの枠・入口で待つ組の数とグラフまで、切れずに出ている。
      引き・始め・終わりのコマも同じフォルダにある
    記録：slow_off_on_panel_log.txt・night/20261107_sm100/plan100.json・table100.csv


--------------------------------------------------------------------
6. 台帳
--------------------------------------------------------------------
  3,311 行 → 3,396 行（追記 85 行だけ：確かめ 3・sm100off 40・sm100on 40・rec100 2）
  先頭 3,311 行の md5 は dc233776ff503e9d065bb01f70e4c27d（始める前と同じ）。終わったあとの md5 11564dd2b471e9226714d42bbdaadf1f。鍵ファイルは残っていない
  KIOXIA の night/20261107_sm100/ に置いた字のファイル（.py・.sh・.json・.csv・.txt）に 0 の入ったものは無かった


--------------------------------------------------------------------
7. 記録の置き場所
--------------------------------------------------------------------
  night/20261107_sm100/：build.log・q_det100/chk100a/chk100b/sm100off/sm100on/rec100.json・run_chk100.sh・run100.sh・rec100.sh・watch100.py・cmp100.py・
    cmp_det100_vs_large95.txt・cmp_chk100.txt・agg100.py・agg100_out.txt・rec_runner.py・post100.py・select100.py・slow100.py・mpv100.py・plan100.json・table100.csv・
    runner_*.txt・watch_log.txt・rec_log.txt
  night/20261107_det100・20261107_chk100a・20261107_chk100b・20261107_sm100off・20261107_sm100on・20261107_rec100（実行係の記録と judge.md）
  回のフォルダ：20261107_{det100|chk100a|chk100b|sm100off|sm100on|rec100}_cs84_large_p6_…


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  Unity（cs:84）：Assets/ServiceSim/Experiment/serving-robot-params.json（サイトから写し直し）・Service/ServiceOps.cs・People/StaffAgent.cs・
    Robot/ServingRobotController.cs・Service/JamWatcher.cs・Experiment/ExperimentRunner.cs・Experiment/TripLogger.cs・Experiment/HeadlessRun.cs
  tools（cs:84）：night_runner.py・make_queue.py・judge_night.py
  Builds/headless（cs:84 に作り直し）・Builds/rec24_sm100（新しく足した写し）
  KIOXIA：上の 7 章のもの・rec_sm100_20261107/・archive/unity_ledger_v1_pre_100_20261106/・台帳への追記 85 行
  このファイル：claude_code_reports/20261107_sm100.txt
  変えていない：店の形・試算の数・PeopleSpec/RobotSpec/ServiceSpec の値・stuck_rescue（30 秒）・依頼98 の道具と動画・サイト（何も上げていない）


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. 動かすまでの時間：今の助けの動かし方をそのまま使ったので、スタッフは着いてから rescue_s（15 秒）待ってから押している。
     「真っ先に行ってロボットを止め、脇へ動かす」なら 15 秒は長いかもしれない。このままか、近くのスタッフの分だけ短くするか
  2. 着く前の取り消し：行くと決めた 8,099 回のうち 4,411 回は、着く前にロボットが自分で動き出して取り消しになった（スタッフは歩いただけで戻る）。
     5 秒の止まりの多くは自分で解けている。このままか、たとえば「相手がロボットで、相手も止まっているときだけ」など、行く場面を絞るか
  3. 私が決めて作った所：
     ・その場で手を動かしている人（料理を卓で渡す・皿をまとめる・卓を拭く）は、終わるまで行かないことにした
     ・「すり抜けられない」は、体を横に向けても 3 秒（今の「下がる」の線）抜けられないこととし、進む向きの 1.5 m 以内の止まった台を動かすことにした
     ・よける場所で待っている止まりも 5 秒のきっかけに入れた（30 秒の呼び出しと同じ）
     ・60 秒で着けなかった人はやめて自分の仕事へ戻し、その止まりのあいだは同じ人を選ばないことにした
     これでよいか
  4. 標準にするか：3〜5台で止まり・動けなくなった回数・人の詰まりが減り、入店待ちも短くなった。サイトの staff_moves_robot を入にするか
     （この依頼では ⑧ だけ。ほかの店・bus は回していない）

判定：止めた（決めてほしいことあり）
```

依頼100 では、3台以上ではっきり効きました。ただ、スタッフはロボットの所に着いてから15秒待ってから押していました。前からある30秒の呼び出しの動かし方を、そのまま使ったためです。現実の店で、ロボットの横に着いて15秒待つ人はいません。近くのスタッフの分は、着いたらすぐ押すことにしました。


## 作業ログ ― 依頼101b：近くのスタッフが着いたらすぐ押す形にした

最初に出した依頼101 は、すぐ押す形を作ったうえで、ほかの店と下げ膳でも確かめる中身でした。⑧だけに絞ると決めたのに、範囲を広げてしまっていました。

> ⑧だけに絞ってって言わなかったっけ？

依頼101 は始まって9分で止め（Mac の Claude Code のプロセスを止めた）、⑧だけを回す依頼101b に出し直しました。依頼101 が途中で作った変更は、依頼101b の最初に元に戻しています。

### params の差分（p2m-site commit 548c134）

```diff
commit 548c1344c1dc88782a087c65002a582989bb273f
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 7 05:20:15 2026 +0900

    params: staff_moves_robot の決まりに、着いたらすぐ押す・取り消し・すり抜けの判定などを足す（既定は切のまま）


diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index 8234b1e..c585789 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -423,7 +423,7 @@
    "role": "site_rule",
    "stopped_s": 5,
    "reach_m": 7,
-   "note": "（切）近くのスタッフがロボットを動かして通路を空ける（2026-11-06 エイイチと決めた。まず⑧で今のままと比べ、標準にするかは結果を見て決める）。ロボットが走っている途中で5秒以上止まったとき（待機場所・受け渡し口・卓で決まって待っているときは除く）、止まったロボットから歩いて7mくらいまでにいるスタッフのうち一番近い1人が、真っ先に行ってロボットを止め、脇へ動かす（瞬間移動はしない）。行かない人：お客さんの対応中（案内・会計・卓での接客）。料理や皿を持って歩いている人は、それを置いてから動かしに来る。自分の道をふさがれても、すり抜けられる幅があるなら動かさない。お客さんはロボットに触らない。7m以内に行ける人がいなければ、今までどおり30秒で呼ぶ。試算の数字は変わらない"
+   "note": "（切）近くのスタッフがロボットを動かして通路を空ける（2026-11-06 エイイチと決めた。まず⑧で今のままと比べ、標準にするかは結果を見て決める）。ロボットが走っている途中で5秒以上止まったとき（待機場所・受け渡し口・卓で決まって待っているときは除く）、止まったロボットから歩いて7mくらいまでにいるスタッフのうち一番近い1人が、真っ先に行ってロボットを止め、脇へ動かす（瞬間移動はしない）。行かない人：お客さんの対応中（案内・会計・卓での接客）。料理や皿を持って歩いている人は、それを置いてから動かしに来る。自分の道をふさがれても、すり抜けられる幅があるなら動かさない。お客さんはロボットに触らない。7m以内に行ける人がいなければ、今までどおり30秒で呼ぶ。2026-11-07 に足した決まり（依頼100 の結果を見てエイイチが了承）：着いたら待たずにすぐ押して動かす（30秒の呼び出しで来た人の動かし方は今のまま）。着く前にロボットが自分で動き出したら取り消して戻る。その場で手を動かしている人（卓で料理を渡す・皿をまとめる・卓を拭く）は終わるまで行かない。すり抜けられないとは、体を横に向けても3秒抜けられないこと（そのとき進む向きの1.5m以内で止まっている台を動かす）。よける場所で待っているロボットも5秒のきっかけに入れる。60秒で着けなかった人はやめて自分の仕事に戻る。試算の数字は変わらない"
   }
  },
  "stores": {
```

### 依頼101 の依頼文（止めた依頼）

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 900
---
# 依頼101：近くのスタッフが着いたらすぐ押す形にし、ほかの店と下げ膳で「入」を確かめる

依頼100 の報告（claude_code_reports/20261107_sm100.txt）を読んで、エイイチと決めたこと（2026-11-07）：
- 決めてほしいこと1：近くのスタッフの分は、着いたら待たずにすぐ押す（今は着いてから15秒待っている）。30秒の呼び出しで来た人の動かし方は今のまま
- 決めてほしいこと2：着く前にロボットが動き出したら取り消す、はこのまま
- 決めてほしいこと3：Claude Code が決めた4つ（手を動かしている人は終わるまで行かない・すり抜けられない＝横向きでも3秒抜けられない・よける場所で待つ台もきっかけに入れる・60秒で着けなければやめる）はこのまま
- 決めてほしいこと4：staff_moves_robot は標準の入にする方向。その前に、ほかの店と下げ膳で、入にして逆向きに悪くならないかを確かめる

サイトの params の note にこれらを書き足した（p2m-site commit 548c134。value は切のまま、stopped_s・reach_m も同じ）。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。時刻で止めず、全部終わるまで続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が cs:84、保留 0。Unity・night_runner／rec_runner が動いていない。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳を archive/unity_ledger_v1_pre_101_20261107/ に退避（行数と md5 を報告に）
2. サイトの params を写し直し、前の写しとの違いが unity_rules.staff_moves_robot.note の文だけであることを確かめる

## 1. 着いたらすぐ押す
- staffMovesRobot で来た近くのスタッフは、着いたら待たずに押して動かす（押し方・動かす先は今の案a のまま。瞬間移動はしない）
- 30秒の呼び出し（stuck_rescue）で来た人は今のまま
- staff_moves.csv に、着いてから押し始めるまでの秒の列を足す
- check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- 切のとき、⑧ 2台 serve 種7 が依頼100 の sm100off の同じ回と全ファイル一致すること
- 入のとき、⑧ 5台 serve 種0 を2回回して一致すること
- 瞬間移動 0

## 3. 回す（画面なし・同時4本・人の先よけは切・撮らない）
上から順に回す。どれも staffMovesRobot の切と入を同じ種で並べる（label の末尾 off／on）。
1. ⑧ serve：条件 92・136・137・138（2〜5台）× 種0〜9 を入だけ ＝ 40回（label sm101p6on）。切は依頼100 の sm100off を使う（2 の確かめで一致が分かっているため）
2. 標準の6店 serve：base73 と同じ6店のロボット1・2台の条件 × 種0〜9 × 切と入 ＝ 240回（label sm101fam）。0台はこの決まりが効かないので回さない
3. 標準の6店 bus：bus75 と同じ条件 120〜131 × 種0〜9 × 切と入 ＝ 240回（label sm101fambus）
4. ⑨ serve：条件 107・142・143・144（2〜5台）× 種0〜9 × 切と入 ＝ 80回（label sm101p7）
5. ⑧⑨ bus：条件 133・139・140・141（⑧ 2〜5台）と 135・145・146・147（⑨ 2〜5台）× 種0〜9 × 切と入 ＝ 160回（label sm101largebus）
- 1回の上限は 90 分。止まっても回し直さない。上限時間で終わらなかった所は、どこまで回ったかを報告に書く

## 4. 表にすること（10種の中央値。切と入を並べる）
- 店 × serve／bus × 台数ごとに：入店待ち・料理の待ち・turn・スタッフ1人の歩いた距離・ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数と取り消しの回数・人がロボットで詰まった回数・瞬間移動・全員が帰らなかった回
- 逆向きの印：入店待ち か 料理の待ち が、入で切より 10% 以上悪く、しかも種の過半数で悪くなっている所に印を付け、上にまとめて書く
- ⑧ serve は、依頼100 の sm100on（15秒待ってから押す）と sm101p6on（すぐ押す）も並べる
- 印の付いた所は、止まりの多い場所の上位3つと、スタッフが動かしに行く前にしていたことの内訳も書く

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき、または切のときの⑧が sm100off と違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sm101.txt に：始める前の確かめ、1 の作り（どのファイルのどこ）、2 の確かめ、4 の表と逆向きの印、どこまで回ったか、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼101 の結果（止めた依頼）

```text
# 結果：20261107_101_近くのスタッフがすぐ押す形にしてほかの店と下げ膳で確かめる

- 状態：失敗
- 始めた時刻：2026-11-07 05:21
- 終わった時刻：2026-11-07 05:29（9分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim

## Claude Code の報告

（報告がありません。終了コード 143。_stderr.txt を見てください。ログインが切れているときは、ターミナルで claude を開いて /login）
```

### 依頼101b の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 420
---
# 依頼101b：近くのスタッフが着いたらすぐ押す形にし、⑧で確かめる

依頼100 の報告（claude_code_reports/20261107_sm100.txt）を読んで、エイイチと決めたこと（2026-11-07）：
- 決めてほしいこと1：近くのスタッフの分は、着いたら待たずにすぐ押す（今は着いてから15秒待っている）。30秒の呼び出しで来た人の動かし方は今のまま
- 決めてほしいこと2：着く前にロボットが動き出したら取り消す、はこのまま
- 決めてほしいこと3：Claude Code が決めた4つ（手を動かしている人は終わるまで行かない・すり抜けられない＝横向きでも3秒抜けられない・よける場所で待つ台もきっかけに入れる・60秒で着けなければやめる）はこのまま
- 決めてほしいこと4：staff_moves_robot を標準の入にするかは、まだ決めない。問題をはっきりさせるため、今は⑧（large_p6）の配膳だけに絞る。ほかの店・⑨・下げ膳は回さない
- 依頼101 は、ほかの店まで広げて書いてしまったので途中で止めた。101 で作りかけた変更があれば、始める前に取り消してから始める

サイトの params の note にこれらを書き足した（p2m-site commit 548c134。value は切のまま、stopped_s・reach_m も同じ）。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。時刻で止めず、全部終わるまで続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
0. 依頼101 が残した画面なしの Unity・night_runner があれば終わらせる。101 で作りかけた変更（保留）があれば取り消す。101 で回し始めた回のフォルダは消さずにそのまま残し、名前を報告に書く
1. 作業場所・Builds/headless が cs:84、保留 0。Unity・night_runner／rec_runner が動いていない。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳を archive/unity_ledger_v1_pre_101b_20261107/ に退避（行数と md5 を報告に）
2. サイトの params を写し直し、前の写しとの違いが unity_rules.staff_moves_robot.note の文だけであることを確かめる

## 1. 着いたらすぐ押す
- staffMovesRobot で来た近くのスタッフは、着いたら待たずに押して動かす（押し方・動かす先は今の案a のまま。瞬間移動はしない）
- 30秒の呼び出し（stuck_rescue）で来た人は今のまま
- staff_moves.csv に、着いてから押し始めるまでの秒の列を足す
- check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- 切のとき、⑧ 2台 serve 種7 が依頼100 の sm100off の同じ回と全ファイル一致すること
- 入のとき、⑧ 5台 serve 種0 を2回回して一致すること
- 瞬間移動 0

## 3. 回す（画面なし・同時4本・人の先よけは切）
- ⑧ serve：条件 92・136・137・138（2〜5台）× 種0〜9 を入だけ ＝ 40回（label sm101p6on）。切は依頼100 の sm100off を使う（2 の確かめで一致が分かっているため）
- 1回の上限は 90 分。止まっても回し直さない

## 4. 撮る（2 が通れば撮る）
- ⑧ 5台 serve 種7 を入（すぐ押す）で1本。撮り方は依頼100 と同じ。置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sm101_20261107/on_now/
- 依頼100 の off（今のまま）と左右に並べ、依頼100 と同じ5分（開店から1時間10分〜15分、パントリーのそば）に寄せて店の時刻の5倍で流すパネル付きの動画を作る。題「⑧ ロボット5台：今のまま と 近くのスタッフがすぐ動かす」

## 5. 表にすること（10種の中央値）
- 台数ごとに、sm100off（今のまま）・sm100on（15秒待ってから押す）・sm101p6on（すぐ押す）の3列を並べる：ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数と取り消しの回数・着いてから押し始めるまでの秒・料理ができてから届くまで・料理が受け渡し口でロボットを待った秒・2分待って人が運んだ皿・人がロボットで詰まった回数・往復数・スタッフ1人の歩いた距離・入店待ち（参考）
- 5台で、すぐ押しても残る止まりの多い場所の上位5つと、その止まりのわけ

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき、または切のときの⑧が sm100off と違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sm101b.txt に：始める前の確かめ（101 の変更を取り消したか）、1 の作り（どのファイルのどこ）、2 の確かめ、4 の動画の名前と長さ、5 の表、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼101b の結果

```text
# 結果：20261107_101b_近くのスタッフがすぐ押す形にして⑧で確かめる

- 状態：完了
- 始めた時刻：2026-11-07 05:30
- 終わった時刻：2026-11-07 07:17（107分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 8c35f8bb-86d3-4df1-8cb7-55fb003d94b8`
- 止められた操作：1件（いちばん下に一覧）

## Claude Code の報告

**やったこと**
- 依頼101 が残していた分を片付けました。動いていた night_runner と画面なしの Unity 4本を止めました。依頼101 は止められる前に変更を cs:85 として check-in していたので、変わっていた4ファイルを cs:84 の中身に戻し、cs:86 として check-in しました。依頼101 が回した回のフォルダと、台帳に足した3行は消さずに残してあります（名前は報告ファイルに書きました）。
- サイトの params（548c134）を写し直しました。前の写しとの違いは staff_moves_robot.note の文だけでした。
- 着いたらすぐ押す形を作りました。
  - StaffAgent.cs：近くのスタッフの分だけ、着いたコマで押し始め、15秒待つ所を飛ばします。30秒の呼び出しで来た人は今のまま 15秒待ちます。
  - ServiceOps.cs：動かし始めた時刻を残すようにしました。
  - TripLogger.cs：staff_moves.csv に「着いてから押し始めるまでの秒」の列を足しました。
  - cs:87 で check-in し、実行ファイルを作り直しました。保留は 0 です。
- 確かめのあと、⑧の配膳（2〜5台・種0〜9）を「すぐ押す」で40回回しました。⑧5台・種7 を1本撮り、依頼100 の「今のまま」と左右に並べた動画を作りました。

**結果**
- 確かめは3つとも通りました。
  - 切のときの ⑧2台・種7 は、sm100off と17ファイル全部一致しました。
  - 入のときの ⑧5台・種0 は、2回とも18ファイル一致しました。
  - 瞬間移動は 0 です。
- 40回はすべて終わりました。瞬間移動も1コマの跳びも 0 です。
  - ただし ⑧5台・種7 だけは、ロボット1台が待機場所のそばで行ったり来たりして抜けられませんでした。そのため1組が帰らず、店の時刻 720 分の上限まで回りました。
- 着いてから押し始めるまでは 14.9秒 → 0.0秒 になりました。
- 主な数（10種の中央値。今のまま → 15秒待って押す → すぐ押す）

| 項目 | 2台 | 3台 | 4台 | 5台 |
|---|---|---|---|---|
| ロボットの止まりの合計秒 | 2,526 → 2,396 → 1,810 | 6,054 → 4,594 → 3,959 | 9,248 → 7,279 → 5,903 | 12,896 → 9,704 → 8,068 |

  - 5台の30秒の呼び出し：153.5 → 149.5 → 112回
  - 5台の、2分待って人が運んだ皿：41 → 31.5 → 24皿
  - 5台の入店待ち（参考）：17.56 → 14.12 → 11.32分
  - 5台の着く前の取り消しは 172 → 303回 に増えました。
- すぐ押しても5台で止まりが多く残る場所は、多い順に次の5つです。どこもロボット同士の止まりが中心でした。
  1. ロボットの待機場所のそば：4,214秒
  2. パントリーのそば：450秒
  3. スタッフの持ち場のそば：349秒
  4. ドリンクバーの前のそば：232秒
  5. スタッフが待つ点のそば：209秒
- 動画は rec_sm101_20261107/slow_off_now/slow_off_now_panel.mp4（61.5秒）です。依頼100 と同じ5分・同じパントリーのそばに寄せています。
  - この5分の止まりは、今のまま 1,253秒、すぐ押す 359秒 でした。
  - 題が切れていないことは、真ん中のコマを目で見て確かめました。
- 撮影で私のミスがありました。同じ撮影が二重に始まり、失敗した方の1行が台帳に入りました。撮り直した1本はちゃんと撮れていますが、同じ名前の行がすでにあるため、台帳には入っていません。
- 台帳は 3,399行 → 3,443行 で、足しただけです。始める前の3,399行の md5（09dfbbbe…）は変わっていません。終わったあとの md5 は 8081fb2b… です。

**変えたファイル**
- Unity cs:86（依頼101 の取り消し）
- Unity cs:87：Assets/ServiceSim/People/StaffAgent.cs・Service/ServiceOps.cs・Experiment/TripLogger.cs・Experiment/serving-robot-params.json
- Builds/headless（cs:87 で作り直し）・Builds/rec25_sm101b
- KIOXIA：night/20261107_sm101b/ ほか・rec_sm101_20261107/・台帳の退避（archive/unity_ledger_v1_pre_101b_20261107/）
- 報告：claude_code_reports/20261107_sm101b.txt

**決めてほしいこと**
1. 台帳の rec101b の行：私のミスで入った失敗の行を除く一覧に入れ、撮り直して終わった回の行を足しますか。それともこのままにしますか。
2. 依頼101 が台帳に足した3行（cs:85）を、除く一覧に入れますか。
3. 待機場所のそばでロボット1台が抜けられなくなる詰まり（⑧5台・種7。依頼100 の今のまま・種0 と似たもの）を、別の依頼で調べて直しますか。
4. すぐ押すと着く前の取り消しが増えました（5台では行くと決めた回の 66%）。staff_moves_robot を標準の入にするかとあわせて、このままでよいですか。

判定：止めた（決めてほしいことあり）

## 止められた操作

- {"tool_name": "Bash", "tool_use_id": "toolu_01Pi6hahu4CGMuJy1aPJjMLb", "tool_input": {"command": "U=/Volumes/KIOXIA/r2r2r-data/service_sim/unity; R=$U/20261107_chk101ba_cs87_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove; python3 -c \"\nimport csv;r=[float(x['work_s']) for x in csv.DictReader(open('$R/rescues.csv')) if x['work_s']];print(len(r),min(r),sorted(r)[len(r)//2])\"\nN=$U/night/20261107_sm101b; cd ~/Robotics_UX/ServiceSim; rm -rf Builds/rec24_sm101b 2>/dev/null; cp -pR Builds/headless
```

### 依頼101b の Claude Code の報告（20261107_sm101b.txt）

```text
====================================================================
依頼101b：近くのスタッフが着いたらすぐ押す形にし、⑧で確かめる
2026-11-07 05:30〜07:20　作業場所 cs:85（依頼101 の残り）→ cs:86（取り消し）→ cs:87
====================================================================

結論
  ・止める線には当たらなかった。確かめ（2 章）は3つとも通った（切は sm100off と全ファイル一致・入の2回は一致・瞬間移動 0）
  ・3 章の 40 回はどれも completed。瞬間移動 0・1コマの跳び 0。ただし ⑧5台 種7 だけ、1組が帰らず店の時刻 720 分の上限まで回った（3 章）
  ・すぐ押すと、15秒待って押すより、どの台数でもロボットの止まりの合計がさらに減った（10 種の中央値）
      止まりの合計秒　今のまま → 15秒待って押す → すぐ押す
        2台 2,526 → 2,396 → 1,810／3台 6,054 → 4,594 → 3,959／4台 9,248 → 7,279 → 5,903／5台 12,896 → 9,704 → 8,068
      30秒の呼び出し　5台 153.5 → 149.5 → 112.0　・2分待って人が運んだ皿　5台 41.0 → 31.5 → 24.0
  ・着いてから押し始めるまでは 0.0 秒になった（15秒待って押すは 14.9 秒）
  ・着く前の取り消しは増えた（5台 172 → 303 回。行くと決めた回数も 329.5 → 457.5 回に増えた）
  ・動画を1本作った（rec_sm101_20261107/slow_off_now/slow_off_now_panel.mp4・61.5 秒）
  ・撮影で私のミスが1つあった（撮影が二重に始まり、台帳に failed の1行が入った。4 章）


--------------------------------------------------------------------
0. 始める前の確かめ（05:30〜05:33）
--------------------------------------------------------------------
  0. 依頼101 の残り
     ・依頼101 の night_runner と run101.sh、画面なしの Unity 4本（sm101p6on の cs85 の回）が動いていたので止めた（05:31）。
       ほかの Unity・rec_runner は動いていなかった
     ・依頼101 は止められる前に cs:85 を check-in し、Builds/headless も cs:85 で作っていた（保留ではなく、check-in 済みの変更）。
       中身は 4 ファイル（serving-robot-params.json・TripLogger.cs・StaffAgent.cs・ServiceOps.cs）で、着いたらすぐ押す変更と params の写し直し。
       「101 で作りかけた変更は取り消してから始める」に従い、4 ファイルを cs:84 の中身に戻して cs:86 で check-in した
       （4 ファイルとも md5 が cs:84 と同じことを確かめた。cs:84 と cs:86 の中身は同じ）。cs:85 の履歴は消していない
       ※ 依頼101 の cs:85 には、着いたコマで押し始めても、次のコマから rescue_s（15 秒）待ちの所で止まってしまう作りが残っていた（見ただけ・回していない）
     ・依頼101 が残した回のフォルダ（消さずにそのまま）：
         20261107_det101_cs85_large_p6_r2_s7_passon_sbret_ek_post_rescue
         20261107_chk101a_cs85_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove
         20261107_chk101b_cs85_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove
         20261107_sm101p6on_cs85_large_p6_r{2,3,4,5}_s0_passon_sbret_ek_post_rescue_smove_stopped（4つ・止めたもの）
         night/20261107_sm101・20261107_det101・20261107_chk101a・20261107_chk101b・20261107_sm101p6on（runs.csv に依頼101 の中断 4 行が残っている）
     ・依頼101 は台帳に 3 行（det101・chk101a・chk101b、どれも completed・cs:85）を足していた。消していない
  1. 作業場所 cs:86（中身は cs:84 と同じ）・保留 0。Builds/headless は cs:85 だったので、下の 1 章で cs:87 に作り直した（cs:85 の実行ファイルで回した回はない）。
     KIOXIA マウント済み／unity_ledger_v1.lock なし
     台帳を archive/unity_ledger_v1_pre_101b_20261107/ に退避：3,399 行・md5 09dfbbbef2f7e64aa126d61d416541a0
     （依頼100 の終わり 3,396 行・11564dd2b471e9226714d42bbdaadf1f に、依頼101 の 3 行が足されたもの。先頭 3,396 行の md5 は 11564dd2… のまま）
  2. params：p2m-site 548c134 の public/sim/serving-robot-params.json を gh api で取った。main（今は 3159f86）の分・公開版と md5 が同じ（80f8ab26c99f2e87d21b8ebab590f53b）。
     前の写し（cs:84・143aaf2・a0731b20…）と JSON を中まで比べ、違いは unity_rules.staff_moves_robot.note の文だけ
     （value 切・stopped_s 5・reach_m 7 は同じ）


--------------------------------------------------------------------
1. 作り（着いたらすぐ押す）
--------------------------------------------------------------------
  People/StaffAgent.cs
    ・IsStaffMoveJob（新しい読み取り）：今の仕事が「近くのスタッフが動かす」（RescueRecord.staffMove）の助けか
    ・着いたところ（dwellSec のある段に着いた所）：StuckRescueArrived のすぐあと、近くのスタッフの分だけ UpdateRescuePush を呼ぶ＝着いたコマで押し始める
    ・待っているところ（_dwelling の中）：「dwellSec（rescue_s）たつまで戻る」を、近くのスタッフの分だけ飛ばす。
      30 秒の呼び出し（stuck_rescue）で来た人は今までどおり rescue_s 待ってから押す
    ・押し始める〜押し終えて次へ、の中身を UpdateRescuePush に切り出した（中身は今までと同じ。30 秒の呼び出しも同じ関数を通る）
  Service/ServiceOps.cs
    ・RescueRecord に moveStartS（着いたあと動かし始めた時刻）を足し、FinishStuckRescue の始めで入れる
  Experiment/TripLogger.cs
    ・staff_moves.csv に arrive_to_push_s の列を足した（work_s の後ろ）。＝ moveStartS − arriveS。着く前に終わった回（取り消し・着けなかった）は空
  Experiment/serving-robot-params.json：サイト 548c134 から写し直し（note だけ違う）
  押し方・動かす先（案a・wideClear）・取り消し・60 秒・行かない人などは変えていない。瞬間移動はしない
  check-in：cs:87（上の 4 ファイルを cm ci で1つずつ指定）。保留 0
  実行ファイル：Builds/headless　build_id cs87_20261107_0533・unity_cs ServiceSim/cs:87・pending_changes 空・Build Finished, Result: Success
    （記録 night/20261107_sm101b/build.log）。録画用は Builds/rec25_sm101b（Builds/headless の写し・実行ファイルの md5 9b9fa5452a05e8455d60477b34aeb1f6）


--------------------------------------------------------------------
2. 確かめ（cs:87。05:34〜05:38。比べ方は依頼100 の cmp100.py と同じ中身の cmp101b.py）
--------------------------------------------------------------------
  ・切：⑧2台 serve 種7・人の先よけ 切（det101b）と sm100off の同じ回（20261107_sm100off_cs84_large_p6_r2_s7_passon_sbret_ek_post_rescue）
      → 一致（conditions.json・contacts・dishes・give_ups・groups・nowarp_jams・passes・people_jams・requeues・rescues・robot_track・run_info・stops・
        summary・timeline・trips・yields の 17 ファイルすべて。cmp_det101b_vs_sm100off.txt）
  ・入：⑧5台 serve 種0 を2回（chk101ba・chk101bb）→ 一致（staff_moves.csv をふくむ 18 ファイル。cmp_chk101b.txt）
  ・瞬間移動：3回とも 0・1コマの跳び 0
  ・中身の確かめ（chk101ba）：staff_moves.csv の arrive_to_push_s は、動かした 105 行すべて 0。
    30 秒の呼び出し（rescues.csv）の work_s は 32 回で最小 14.94 秒・中央値 15.09 秒（今までどおり 15 秒待ってから押している）
  → 通ったので 3 を回した


--------------------------------------------------------------------
3. 回したこと（画面なし・同時4本・人の先よけ 切・やり直しなし・1回の上限 90 分）
--------------------------------------------------------------------
  ⑧ 条件 large_p6_s6_r2〜r5_a70 × 種0〜9 を入（すぐ押す）だけ ＝ 40 回（label sm101p6on）。並びは依頼101 が作った q_sm101p6on.json の写し
    （⑧ の4条件・種0〜9・すれ違い入・案B切・待機場所へ戻る入・入口番入・持ち場入・一方通行切・1本道切・立ち往生の助け入・近くのスタッフ入で、依頼100 の sm100on と同じ）
  回し方：night/20261107_sm101b/run101b.sh（60 秒ごとに瞬間移動・1コマの跳びを見る。watch_log.txt）
  05:38〜06:18。40 回とも completed。見張りは最後まで「瞬間移動 0・1コマの跳び 0」。1回の実時間は 3〜7 分（上限には当たらない）
  ・⑧5台 種7 は、1組（組 133・卓2）が帰らず、上限の店の時刻 720 分まで回った。ロボット2 が店の時刻 11,880 秒から卓2へ行こうとして、
    待機場所に並んだほかの4台のそば（店の座標 19.5〜20.0, 10.8〜11.1）で最後まで行ったり来たりしていた（その皿が届かないまま）。
    依頼100 の切の ⑧5台 種0 と似た、待機場所のそばで1台が抜けられない詰まり。直していない。判定の材料には入れたまま（入店待ちは帰った組まで）


--------------------------------------------------------------------
4. 撮った回と動画
--------------------------------------------------------------------
  撮り方：依頼100 と同じ（rec_runner.py は依頼100 の写しで md5 ccc702841f7e952d97bea39e3959c6d1・同じ中身。--oblique --hide-paths --max-wall-min 120
    --parallel 2 --no-retry --limit-min 150）。実行ファイルは Builds/rec25_sm101b（cs:87）。人の先よけ 切
  ⑧5台 serve 種7 入（すぐ押す）：06:19〜07:13・completed・全員が帰った・瞬間移動 0・1コマの跳び 0（実時間 54.1 分）
  置き場所：rec_sm101_20261107/on_now/（録画 mp4 2本・frames.csv・camera.json・timeline.csv・summary.json・stops.csv・robot_track.csv・contacts.csv・rescues.csv・staff_moves.csv）
  撮った回と撮らない回（同じ ⑧5台 種7 入）：入店待ち 撮った 11.58 分／撮らない 10.71 分。止まりの合計 撮った 8,350 秒／撮らない 8,014 秒
    （撮らない方は1組が帰らなかった回。撮った回は全員が帰った。今までと同じく、撮った回と撮らない回で数が違う）

  私のミス（撮影が二重に始まった）
    ・撮影の台本（rec101b.sh）は本番が終わるのを待ってから始める形にしていた。待ちが終わらないように見えたので台本を止めて手で始め直したが、
      ちょうど同じとき（06:18:50）に元の台本の待ちが終わって撮影が始まっていた。そのため同じ回が2つ同時に始まり、あとの1つが 5 秒で failed になった
    ・その failed が台帳に1行入った（20261107_rec101b_cs87_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove・failed）。
      また post101b.py が撮りかけのファイルを on_now に写していた
    ・両方止めて、撮りかけのものを別名にして残し（消していない）、1本だけで撮り直した：
        20261107_rec101b_cs87_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove_dup_stopped（回のフォルダ）
        rec_sm101_20261107/_dup_stopped_on_now/（撮りかけの写し）・night/20261107_rec101b_dup_stopped/（実行係の記録）
    ・撮り直した回は completed だが、台帳は同じ回の名前の行がもうあると足さない作りなので、台帳には failed の行だけが残り、completed の行は入っていない（下の「決めてほしいこと」）

  動画：rec_sm101_20261107/slow_off_now/slow_off_now_panel.mp4　61.5 秒・3840×1280・30fps（ffprobe）・5,586,699 バイト
    題「⑧ ロボット5台：今のまま と 近くのスタッフがすぐ動かす」。左＝今のまま（依頼100 の rec_sm100_20261107/off）、右＝すぐ押す（on_now）
    作り：依頼100 と同じ（店全体の引きの1コマ 1.5 秒 → パントリーのそばに寄った絵を店の時刻の5倍で 60 秒。左右にパネル）
      ・5分：依頼100 と同じ 1時間10分00秒〜1時間15分00秒（店の時刻 4,200〜4,500 秒）。寄った所も同じ（パントリーのそば・切り方 crop=1360:1080:1264:553）
      ・この5分の止まり：今のまま 1,253 秒（366 回）／すぐ押す 359 秒（104 回）。片付けを待つ卓 7.6／8.6・入口で待つ組 6.4／6.4
      ・道具：night/20261107_sm101b/ の slow101b.py（slow100.py の写しで、使う mpv の名前だけ変えた）・mpv101b.py（mpv100.py と同じ中身）・plan101b.json
        （plan100.json の写しで、題・右の名前・右の素材・出力先・右の数だけ変えた）
    題がパネルで切れないか：寄りの真ん中のコマ（slow_off_now_panel_check_s1_slow_mid.png）を目で見た。上の帯の題・説明・時刻、下の段の寄った所・左右の名前、
      左右のパネルの題「⑧ 今のまま」「⑧ 近くのスタッフがすぐ動かす」・ロボット5台の枠・入口で待つ組とグラフまで切れずに出ている
    記録：slow_off_now_panel_log.txt・確かめ用のコマ4枚（同じフォルダ）


--------------------------------------------------------------------
5. 表（night/20261107_sm101b/agg101b_out.txt。10 種の中央値・回数と秒は1回あたり）
--------------------------------------------------------------------
5-1. 台数ごと（左から 今のまま＝sm100off／15秒待って押す＝sm100on／すぐ押す＝sm101p6on）
  項目	2台			3台			4台			5台
  ロボットの止まりの合計秒	2526	2396	1810	6054	4594	3959	9248	7279	5903	12896	9704	8068
  うちロボット同士（秒）	926	620	610	3162	2134	1679	5048	4215	3282	9060	6227	5226
  60秒動けなくなった（回）	7.0	2.0	3.0	21.0	6.0	5.5	36.0	9.5	9.0	51.5	19.0	13.5
  30秒の呼び出し（回）	66.0	73.0	42.5	130.5	82.0	64.5	146.0	89.5	59.0	153.5	149.5	112.0
  スタッフが動かした（回）	-	34.0	35.5	-	69.0	82.5	-	107.0	115.5	-	131.0	151.0
  着く前に取り消し（回）	-	7.5	10.0	-	27.5	56.0	-	107.0	111.5	-	172.0	303.0
  （参考）行くと決めた（回）	-	45.5	48.5	-	101.5	134.0	-	224.0	281.0	-	329.5	457.5
  着いてから押し始めるまで（秒）	-	14.9	0.0	-	14.9	0.0	-	14.9	0.0	-	14.9	0.0
  料理ができてから届くまで（分）	2.37	2.33	2.27	2.25	1.94	1.91	2.16	1.89	1.72	2.26	1.95	1.69
  料理が受け渡し口でロボットを待った（秒／皿）	60.7	59.2	59.0	48.7	41.6	39.6	38.0	35.0	32.0	37.0	30.1	27.2
  2分待って人が運んだ皿	83.0	80.5	78.5	56.5	45.5	40.5	44.0	35.5	30.5	41.0	31.5	24.0
  人がロボットで詰まった（回）	413.5	398.5	288.0	909.0	535.5	397.0	1342.0	674.5	622.5	1372.5	859.0	671.0
  往復数	137.5	137.0	142.0	185.0	197.5	203.0	210.0	223.0	231.0	230.0	248.0	252.5
  スタッフ1人の歩いた距離（km）	4.46	4.51	4.32	4.43	4.32	4.35	4.45	4.33	4.29	4.47	4.31	4.46
  入店待ち（分・参考）	11.65	10.55	10.94	12.64	11.36	10.71	16.11	11.43	11.76	17.56	14.12	11.32
  数え方は依頼100 と同じ（止まり＝stops.csv の duration_s の和・60秒＝stops.stuck_count・30秒の呼び出し＝stuck_rescue.calls・動かした／取り消し／行くと決めた＝
    staff_moves の moves／cancelled／calls・料理＝dish_wait_mean・人が運んだ皿＝late_staff_dishes・詰まり＝people_jams.csv の robot_blocked=1・往復＝trips.trips）。
    足したもの：着いてから押し始めるまで＝動かした行（動かした・連れて戻した・その場で引き直した）の中央値。すぐ押すは arrive_to_push_s、
    15秒待って押すはこの列が無いので work_s − push_s で出した。歩いた距離＝site_metrics.walk_km_per_staff
    今のまま・15秒待って押すの数は依頼100 の表と同じになることを確かめた
  読み取り
    ・すぐ押すと、止まりの合計は 15秒待って押すより 2〜5台で 14〜24% 減った（2台 −24%・3台 −14%・4台 −19%・5台 −17%）。今のままと比べると 2〜5台で 28〜37% 減
    ・30秒の呼び出しは 2〜5台で 21〜42% 減った。5台でも 149.5 → 112.0 回（15秒待って押すでは5台はほとんど減っていなかった）
    ・料理の待ち・受け渡し口で待つ秒・人が運んだ皿も 3〜5台で少しずつ良くなった。人がロボットで詰まった回数も減った
    ・60秒動けなくなった回数は 15秒待って押すとほぼ同じ（2台 2 → 3・5台 19 → 13.5）
    ・着く前の取り消しは増えた（3台 27.5 → 56・5台 172 → 303）。行くと決めた回数も増えている。
      すぐ動かすので止まりが早く解け、その分、次の5秒の止まりが別の所で数えられ、行ったが自分で動き出していた、が増えたとみられる（推測）
    ・スタッフ1人の歩いた距離はほぼ同じ（4.29〜4.46 km）
    ・入店待ちは5台で 14.12 → 11.32 分。2〜4台はほぼ同じ

5-2. 5台・すぐ押すで残る止まりの多い場所の上位5つ（stops.csv の止まりを、店の形の places と卓の止まる点のうち 2 m 以内の一番近い所に割り当て、10 種の和を 10 で割った秒）
  （参考：今のまま 6,825 → 15秒待って押す 5,212 → すぐ押す 4,214 秒が「ロボットの待機場所のそば」）
  1. ロボットの待機場所のそば 4,214 秒
     わけ：もう1台のロボット 3,362・分からない 419・スタッフとすれ違った 271・人が立ち止まっていた 123・お客さんとすれ違った 34
     → ほとんどがロボット同士。待機場所に戻って並ぶ台と、そこから出ていく台が押し合う形（相手の台の名前が ServingRobot01〜05 のどれにも散っている）。
       「進めていない（10秒で0.5m）」も多い。待機場所での待ちは、走っている途中の止まりではないので近くのスタッフは行かない場面がふくまれる（推測）
  2. パントリーのそば 450 秒
     わけ：もう1台のロボット 299・スタッフとすれ違った 75・人が立ち止まっていた 43・分からない 23
     → 受け渡し口の近くで、よける場所で待つ（「よける場所で待った：ServingRobot0x」）ものが多い
  3. スタッフの持ち場のそば 349 秒
     わけ：もう1台のロボット 219・スタッフとすれ違った 70・人が立ち止まっていた 26
  4. ドリンクバーの前に立つ点のそば 232 秒
     わけ：もう1台のロボット 94・スタッフとすれ違った 52・人が立ち止まっていた 52・お客さんとすれ違った 29
     → ほかの所より人（お客さん・スタッフ）による止まりの割合が大きい
  5. スタッフが待つ点のそば 209 秒
     わけ：もう1台のロボット 117・スタッフとすれ違った 54・お客さんとすれ違った 16・人が立ち止まっていた 15
  （細かいわけ＝cause_detail ごとの秒は agg101b_out.txt の 5-3。2〜4台・3つの形の上位5つは 5-2、回ごとの数は 5-4）


--------------------------------------------------------------------
6. 台帳
--------------------------------------------------------------------
  3,399 行（始める前）→ 3,443 行（追記 44 行だけ：確かめ 3（det101b・chk101ba・chk101bb）・sm101p6on 40・rec101b の failed 1）
  先頭 3,399 行の md5 は 09dfbbbef2f7e64aa126d61d416541a0（始める前と同じ）。終わったあとの md5 8081fb2b969709951db80fd654af4cb1。鍵ファイルは残っていない
  撮り直して completed になった rec101b の行は入っていない（4 章）
  KIOXIA の night/20261107_sm101b/ に置いた字のファイル（.py・.sh・.json・.txt）に 0 の入ったものは無かった


--------------------------------------------------------------------
7. 記録の置き場所
--------------------------------------------------------------------
  night/20261107_sm101b/：build.log・q_det101b/chk101ba/chk101bb/sm101p6on/rec101b.json・run_chk101b.sh・run101b.sh・rec101b.sh・watch101b.py・cmp101b.py・
    cmp_det101b_vs_sm100off.txt・cmp_chk101b.txt・agg101b.py・agg101b_out.txt・rec_runner.py・post101b.py・slow101b.py・mpv101b.py・plan101b.json・
    runner_*.txt・watch_log.txt・rec_log.txt・slow101b_log_run.txt（slow101b_log_run_noffmpeg.txt は ffmpeg の場所を通し忘れた1回目の失敗の記録）
  night/20261107_det101b・20261107_chk101ba・20261107_chk101bb・20261107_sm101p6on（依頼101 の中断 4 行と同じフォルダ）・20261107_rec101b
  回のフォルダ：20261107_{det101b|chk101ba|chk101bb|sm101p6on|rec101b}_cs87_large_p6_…


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  Unity：cs:86（依頼101 の cs:85 を取り消し。serving-robot-params.json・TripLogger.cs・StaffAgent.cs・ServiceOps.cs を cs:84 の中身に戻した）
        cs:87（Assets/ServiceSim/People/StaffAgent.cs・Service/ServiceOps.cs・Experiment/TripLogger.cs・Experiment/serving-robot-params.json）
  Builds/headless（cs:87 に作り直し）・Builds/rec25_sm101b（新しく足した写し）
  KIOXIA：上の 7 章のもの・rec_sm101_20261107/・archive/unity_ledger_v1_pre_101b_20261107/・台帳への追記 44 行
  このファイル：claude_code_reports/20261107_sm101b.txt
  変えていない：tools/ の中・店の形・試算の数・PeopleSpec/RobotSpec/ServiceSpec の値・stuck_rescue（30 秒）・依頼100 の録画と動画・サイト（何も上げていない）・
    依頼101 の回のフォルダと台帳の行


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. 台帳の rec101b：撮影が二重に始まった私のミスで、20261107_rec101b_cs87_…_smove の行が failed のまま入り、撮り直して completed になった回の行は入っていない
     （同じ回の名前の行があると足さない作りのため）。台帳は追記だけにして、行を書き換えていない。
     この failed の行を除く一覧（unity_ledger_v1_excluded_runs.csv）に入れて completed の行を足すか、このままにするか
  2. 依頼101 が台帳に足した 3 行（det101・chk101a・chk101b、cs:85）と、依頼101 の回のフォルダは残してある。除く一覧に入れるか、このままにするか
  3. ⑧5台 種7（すぐ押す）で、ロボット1台が待機場所に並んだほかの台のそばで行ったり来たりして抜けられず、1組が帰らないまま 720 分まで回った。
     依頼100 の今のまま ⑧5台 種0 と似た詰まり。別の依頼で調べて直すか
  4. すぐ押すと、着く前の取り消しが増えた（5台 172 → 303 回。行くと決めた回数の 66%）。staff_moves_robot を標準の入にするかとあわせて、このままでよいか

判定：止めた（決めてほしいことあり）
```

### 近くのスタッフがすぐ押す決まりの、前と後（⑧・10種の中央値）

| 項目 | 2台 | 3台 | 4台 | 5台 |
|---|---|---|---|---|
| ロボットの止まりの合計（秒）：今のまま → 15秒待って押す → すぐ押す | 2,526 → 2,396 → 1,810 | 6,054 → 4,594 → 3,959 | 9,248 → 7,279 → 5,903 | 12,896 → 9,704 → 8,068 |

5台では、30秒の呼び出しが153.5回から112回に、入店待ちが17.56分から11.32分になりました。

- ねらい：近くのスタッフが、着いてから待たずにロボットを押す
- 変わったこと：着いてから押し始めるまでが14.9秒から0.0秒になった
- 見込める効果（測った値）：5台の止まりの合計が12,896秒から8,068秒へ、約1時間20分減った。入店待ちは17.6分から11.3分

【動画】LOG456_10_staff_moves_robot.mp4 ⑧ロボット5台・種7の、開店1時間10分〜15分のパントリーのそば。左が今のまま、右が近くのスタッフがすぐ押す形。店の時刻の5倍で流す。この5分のロボットの止まりは、左1,253秒、右359秒

それでも5台では、待機場所のそばに4,214秒の止まりが残りました。残った止まりは、ほとんどがロボットどうしです。種7では、ロボット1台が待機場所のそばで行ったり来たりして抜けられず、1組のお客さんが帰らないまま、店の時刻の上限の720分まで回りました。


## 作業ログ ― 依頼104：待機場所のそばの止まり合いを10の型に分けた

待機場所のそばで何が起きているのかを、止まり合いを1件ずつ型に分けて数えました。30秒以上続いたロボットどうしの止まりを1つの詰まりとし、台の位置・向かっていた先・相手の台の状態・待機点の埋まり方から、10の型に分けています。

### 依頼104 の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 240
---
# 依頼104：台帳の2つを直し、⑧の待機場所のそばでロボット同士が止まり合う詰まりを調べる（直さない）

依頼101b の報告（claude_code_reports/20261107_sm101b.txt）の「決めてほしいこと」4つを、エイイチが決めた（2026-11-07）：
1. 撮影が二重に始まって台帳に入った rec101b の失敗の行は、除く一覧（unity_ledger_v1_excluded_runs.csv）に入れる。撮り直して終わった回の行を台帳に足す
2. 止めた依頼101 が台帳に足した3行（cs:85）も、除く一覧に入れる
3. 待機場所のそばでロボット同士が抜けられなくなる詰まりは、⑧で調べる。**この依頼では調べるだけで、Unity の作りは変えない。** 直し方は報告を読んでエイイチと決める
4. すぐ押すと着く前の取り消しが増えた件は、このままでよい

範囲は⑧（large_p6）の配膳だけ。ほかの店・⑨・下げ膳は回さない。staff_moves_robot は入（すぐ押す、cs:87）、人の先よけは切で見る。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が cs:87、保留 0。Unity・night_runner／rec_runner が動いていない。KIOXIA がマウント済み、unity_ledger_v1.lock がない
2. 台帳と除く一覧を archive/unity_ledger_v1_pre_104_20261107/ に退避（行数と md5 を報告に）

## 1. 台帳を直す
- 決めたこと 1・2 のとおりに、除く一覧に行を足し、撮り直した回の行を台帳に足す。台帳のほかの行は1字も変えない
- 足した行・除いた行の run の名前を報告に書く

## 2. 調べる（⑧・5台・すぐ押す）
材料は依頼101b の40回（sm101b）と、撮った ⑧5台・種7 の回（rec_sm101_20261107）。足りなければ ⑧5台を種0〜9 で撮らずに回し直してよい（記録を足すだけで、作りは変えない）
- 待機場所のそば（x 18〜24.5・y 10〜12.6 を目安。店の形の RobotStandby の位置から決め直してよい）で、ロボット同士の止まりを、30秒以上続いたものを中心に1つずつ見る
- 1つずつについて、そのときの台の位置・向かっていた先（待機点・受け渡し口・卓）・何をしていたか（待機場所へ入る／出る／受け渡し口へ行く／戻る）・待機点の埋まり方・道を探した結果・どう解けたか（自分で・よけた・スタッフが動かした・解けない）をまとめる
- それを型に分けて、型ごとの回数と秒を出す。たとえば次のような型（ほかの型が見つかれば足してよい）
  - 待機場所から出る台と入る台が向かい合う
  - 受け渡し口へ向かう台と、待機場所へ戻る台がぶつかる
  - 待機点が埋まっていて、戻る台が入れずに待機場所の前で止まる
  - 1台が行ったり来たりして抜けられない（⑧5台・種7 の上限まで回った回）
- いちばん多い型と、種7 の行ったり来たりの場面は、上から見た図（待機点・受け渡し口・台の位置と向かう先の矢印）を作る。撮った回にある場面は、録画のコマも並べる
- 参考に、今ある切り替え「案B（受け渡し口は1台ずつ・同じ卓は1台）」を入にした ⑧5台 × 種0〜9 を10回回し、待機場所のそばの止まりが型ごとにどう変わるかを並べる（作りは変えない。案B は params の unity_rules のまま）
- 直すなら何を変えればよさそうか、候補を2〜3つ（待機点の並べ方・出入りの道の分け方・入る順の決まりなど）、型との対応つきで書く。**どれも作らない**

## 止める線
瞬間移動が1回でも出たとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_standby104.txt に：始める前の確かめ、1 の台帳の直し（足した行・除いた行・行数と md5）、2 の型の表・図とコマの置き場所・案B 入との比べ・直す候補。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼104 の結果

```text
# 結果：20261107_104_台帳を直し⑧の待機場所のそばの詰まりを調べる

- 状態：完了
- 始めた時刻：2026-11-07 08:05
- 終わった時刻：2026-11-07 08:23（18分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume d3a524da-6eb4-482d-89a8-25b63fc517d0`

## Claude Code の報告

**やったこと**
- 始める前の確かめをしました。作業場所も Builds/headless も cs:87 で、保留はありません。Unity と実行係（night_runner・rec_runner）は動いておらず、KIOXIA はマウント済み、台帳の鍵もありませんでした。
- 台帳と除く一覧を archive/unity_ledger_v1_pre_104_20261107/ に退避しました。
  - 台帳：3,443 行・md5 8081fb2b…
  - 除く一覧：21 行・md5 c4667f28…
- 依頼101 の3行（det101・chk101a・chk101b、cs:85）を除く一覧に足しました。除く一覧は 24 行になり、md5 は d754edc5… です。
- rec101b の台帳の直しは止めました。何も足しておらず、何も除いていません。
  - わけ：失敗の行と、撮り直して終わった回が、同じ run の名前になっています。
  - 除く一覧は名前で外す作りなので、名前を入れると、あとで足す終わった回の行も一緒に外れます。
  - 台帳は「同じ名前の行は2度書かない」決まりなので、終わった回の行を足すとこの決まりを破ります。
- 依頼101b の ⑧5台・すぐ押す 10 回と撮った回から、待機場所のそばのロボット同士の止まりを取り出しました。続いた止まりを1つの詰まりにまとめ、1つずつ次の項目を付けて型に分けました。
  - 台の位置と、向かっていた先
  - 何をしていたかと、相手の台の状態
  - 待機点の埋まり方
  - 道を探した結果と、どう解けたか
- 図3枚と、撮った回の録画のコマを作りました。
- 案B 入の ⑧5台を種0〜9 で 10 回回して比べました。直す候補を3つ書きました。

**結果**
- 止める線には当たりませんでした。案B 入の 10 回はすべて終わり、瞬間移動 0・1コマの跳び 0 です。
- 30 秒以上の詰まりは 369 件・54,008 秒でした。そのうち 31,320 秒は、種7 の行ったり来たり1件です。

| 型 | 件 | 秒 |
|---|---|---|
| C1 待機点にいる台のそばで、戻る台が入れない（いちばん多い） | 103 | 6,735 |
| H 受け渡し口から卓へ向かう台がからむ | 79 | 4,304 |
| G 戻る台どうし | 41 | 2,349 |
| A 出る台と入る台が向かい合う | 35 | 2,173 |
| B 受け渡し口へ向かう台と戻る台がぶつかる | 35 | 2,004 |
| F 出る台どうし | 30 | 1,490 |
| C2 待機点の手前にはみ出して止まった台で、戻る台が入れない | 25 | 2,463 |
| E 出る台が出られない | 8 | 499 |
| D 行ったり来たり（種7） | 1 | 31,320 |
| Z そのほか | 12 | 671 |

- **待機点の間がせまい：** 待機点どうしの間は 0.8 m しかありません。台の前のセンサー（台の半径 0.25 m＋0.6 m）が隣の待機点の台に届き、斜めに寄る台が止まります。
- **道は引けるのに進めない：** 道を探した結果の 87〜98% は「引けた」でした。解けたのは「スタッフが動かした」が 246 件です。
- **待機点の手前にはみ出す：** 往復を終えた台は、待機点の手前に止まる時間が長いです。0.3 m より外にいる時間は、待機点4 で 57%、待機点5 で 75% でした。
- **種7 の行ったり来たり：** ロボット2 は、待機点1 の台の下を抜けられませんでした。「10秒で0.5m 進めない」の見張りに 2,051 回止められ、間隔の中央値は約 15 秒です。止まりが毎回短いため、スタッフは一度も来ませんでした。この止まりは stops.csv に書かれていなかったので、台の動きの記録から拾いました。
- **案B 入にしても、ほぼ変わりませんでした。**
  - 30 秒以上の詰まり：369 件 → 349 件
  - 行ったり来たりを除いた秒：22,688 → 23,117
  - B・F は減り、A・C1・G は増えました。
  - 料理が届くまで：1.69 → 2.29 分
  - 入店待ち：11.32 → 17.53 分
- **直す候補（どれも作っていません）：**
  1. 待機点の並べ方を変える（間を広げる・正面から入る点を足す）。C1・C2・E・D に効きます。
  2. 出る道と戻る道を分ける。A・B・F・G・H に効きます。
  3. 入る順を決める（受け渡し口に近い待機点から順に埋める列にする）。あわせて、見張りで何度も止められたらスタッフを呼ぶ。D・E・F に効きます。
- 撮った回では行ったり来たりは起きていないので、その場面の録画のコマはありません。

**変えたファイル**
- KIOXIA
  - unity_ledger_v1_excluded_runs.csv（3行足した）
  - unity_ledger_v1.csv（案B 入 10 行を実行係が足した。前の 3,443 行は変わっていません）
  - archive/unity_ledger_v1_pre_104_20261107/
  - night/20261107_standby104/（台本、1件ずつの一覧、図 figs/）
  - night/20261107_sb104b/
  - 回のフォルダ 10 個
- 報告
  - claude_code_reports/20261107_standby104.txt
  - claude_code_reports/20261107_standby104_files/（図とコマ4枚）
- Unity の作り・tools・店の形・params は変えていません（cs:87 のまま）。

**決めてほしいこと**
1. rec101b の台帳の直し方。次のどれにするか決めてください。
   - a：撮り直した回の名前を …_try2 に変えて終わった回の行を足し、失敗の行を除く一覧に入れる
   - b：除く一覧を「名前＋状態」で外せるように tools を直し、この1回だけ「同じ名前は2度書かない」決まりを曲げる
   - c：このままにする
2. 待機場所の詰まりを、候補1〜3 のどれで直すか。あわせて、次の数値と店の形を決めてください。
   - 待機点の間の幅
   - 正面から入る点の位置
   - 見張りで何回止められたらスタッフを呼ぶか
   - 店の形（RobotStandby の並び）を変えてよいか

判定：止めた（決めてほしいことあり）
```

### 依頼104 の Claude Code の報告（20261107_standby104.txt）

```text
====================================================================
依頼104：台帳の2つを直し、⑧の待機場所のそばでロボット同士が止まり合う詰まりを調べる（直さない）
2026-11-07 08:05〜08:25　作業場所 cs:87（変えていない）
====================================================================

結論
  ・止める線には当たらなかった（案B 入の 10 回すべて completed・瞬間移動 0・1コマの跳び 0）
  ・台帳の直し：依頼101 の3行（cs:85）は除く一覧に入れた。
    rec101b の失敗の行と撮り直した回は「同じ run の名前」なので、決めたことどおりにはできなかった。この項目は止めた（決めてほしいこと 1）
  ・調べ（⑧5台・すぐ押す・種0〜9）：待機場所のそばの、ロボット同士の 30 秒以上の詰まりは 369 件・54,008 秒（うち 31,320 秒は種7 の行ったり来たり1件）
    いちばん多い型は「C1 待機点にいる台のそばで、戻る台が入れない」103 件・6,735 秒
  ・見つけた形
      1) 待機点どうしの間が 0.8 m しかなく、前のセンサーの届く所（台の半径 0.25 m＋0.6 m）が隣の待機点の台にかかる。
         戻る台が斜めに自分の待機点へ寄ると、隣の台に近づいたところで止まる（C1）
      2) 道を探すと 87〜98% は「引けた」になる（止まっている台を道の上の障害として見ていないとみられる・推測）のに、走ると前のセンサーで止まる。
         解けたのは「スタッフが動かした」が 246／369 件
      3) 往復を終えた台のうち、待機点4・5 の台は、待機点の中心から 0.3 m より外（手前・下側に 0.4〜0.7 m）で止まっている時間が 57%・75%。
         はみ出した台が並びの前の道をせばめる（C2）
      4) 右の卓（T55〜T62 の側）へ行く台・右から戻る台が、待機点の並びの中（y 10.9 より奥）を通る（H・A・G）
      5) 種7 の行ったり来たり（D）は、ロボット2 が待機点2 から受け渡し口へ出ようとして、待機点1 のロボット1 の下を抜けられず、
         「10秒で0.5m 進めない」の見張りで 2,051 回止められては放された（中央値 15.3 秒ごと）。止まりが毎回 5 秒・30 秒に届かないので、
         近くのスタッフも 30 秒の呼び出しも一度も来なかった。この止まりは stops.csv に入らない（往復が終わらないと書かれないとみられる）
  ・案B 入にしても、待機場所のそばの止まりはほとんど変わらなかった（30 秒以上：369 件 → 349 件、行ったり来たりを除く秒 22,688 → 23,117）。
    型ごとでは B・F・C2 が減り、A・C1・G・E が増えた。往復数・料理の待ち・入店待ちは悪くなった
  ・直す候補を3つ書いた（どれも作っていない）


--------------------------------------------------------------------
0. 始める前の確かめ（08:05〜08:06）
--------------------------------------------------------------------
  1. 作業場所 cs:87（cm status：保留なし）。Builds/headless は build_id cs87_20261107_0533・unity_cs ServiceSim/cs:87・pending_changes 空
     Unity（エディタ・実行ファイル）・night_runner・rec_runner は動いていなかった（動いていたのは Unity Hub だけ）
     KIOXIA マウント済み／unity_ledger_v1.lock なし
  2. 退避：archive/unity_ledger_v1_pre_104_20261107/
       unity_ledger_v1.csv　3,443 行・md5 8081fb2b969709951db80fd654af4cb1（依頼101b の終わりと同じ）
       unity_ledger_v1_excluded_runs.csv　21 行（見出し＋20 回）・md5 c4667f28408389ec5697d3f8033652a4


--------------------------------------------------------------------
1. 台帳の直し
--------------------------------------------------------------------
  決めたこと 2（依頼101 の3行）：除く一覧に3行を足した（理由「止めた依頼101 が check-in 済みの cs:85 … の実行ファイルで回した。
    依頼101b の決めてほしいこと 2 でエイイチが除くと決めた」・決めた日 2026-11-07）
      20261107_det101_cs85_large_p6_r2_s7_passon_sbret_ek_post_rescue
      20261107_chk101a_cs85_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove
      20261107_chk101b_cs85_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove
    除く一覧：21 行 → 24 行・md5 d754edc5add03259ab8050e43d200322（先頭 21 行の md5 は c4667f28… のまま）
    tools/ledger.py の read_rows(drop_excluded=True) で読むと、台帳 3,442 回 → 3,419 回（除く 23 回。この3回が外れることを確かめた）

  決めたこと 1（rec101b）：止めた。何も足していない・除いていない
    わけ：失敗の行と、撮り直して completed になった回が、同じ run の名前
      20261107_rec101b_cs87_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove
    になっている（撮り直した回の出力はこの名前のフォルダ。撮りかけは _dup_stopped・_stopped に別名で残っている）。
      ・除く一覧は run の名前で外す作り（ledger.py・judge_night.py とも）。名前を除く一覧に入れると、あとで足す completed の行も一緒に外れる
      ・台帳は「同じ run_folder の行は2度書かない」決まり（ledger.append_row も C# の ServiceSimLedger も足さない）。
        手で同じ名前の行を足すと、この決まりを破ることになり、読むとき（read_rows）は後の行が勝つ
    → どちらを曲げるかは決まりの変更に当たるので、推測で決めずに止めた（決めてほしいこと 1 に案を書いた）

  台帳の終わりの形：3,443 行 → 3,453 行（2 章の案B 入 10 回を night_runner が足しただけ。先頭 3,443 行の md5 は 8081fb2b… のまま）
    終わったあとの md5 7825123e526a26c31b917d76a6d66ca1。鍵ファイルは残っていない


--------------------------------------------------------------------
2. 調べ（⑧5台・すぐ押す・人の先よけ 切）
--------------------------------------------------------------------
2-0. 材料と数え方
  材料：依頼101b の sm101p6on の ⑧5台 種0〜9（10 回）と、撮った回（20261107_rec101b_…_smove・種7・録画 rec_sm101_20261107/on_now）。
    40 回のうち 2〜4台は使っていない（依頼の「⑧・5台」に合わせた）。回し直しは案B 入の 10 回だけ（2-4）
  場所：店の形（p6_large_center.json）の RobotStandby は待機点1〜6 が x 19.1〜23.1（0.8 m おき）・y 11.35 に横1列。
    受け渡し口の前は (17.0, 11.25)。台は ServiceOps で決まった待機点を持つ（1号機→待機点1 … 5号機→待機点5。待機点6 は空き）。
    範囲は依頼の目安のまま x 18〜24.5・y 10〜12.6（待機点の並びとその前・右の端がおさまる）
  1つの詰まり：stops.csv の止まりを、同じ台で 3 秒以内に続いたものを1つにまとめた（始め＝最初の止まりの始め、終わり＝最後の止まりの終わり）。
    始めの位置が範囲の中で、止まりの秒の半分以上が「もう1台のロボット」のもの。30 秒以上を数えた
  付けたこと（1件ごと。episodes_on_sm101p6on_r5.csv の列）
    台の位置（x, y）・段（robot_track の phase）・向かう先（止まりの solve_to が受け渡し口／待機点n／卓n のどれか）・
    何をしていたか（待機場所から出る（受け渡し口へ）／待機場所へ戻る（待機点から 1 m より遠い）／待機点へ入る（1 m 以内）／受け渡し口から卓へ）・
    相手の台（cause_detail の ServingRobot0x のうち秒がいちばん長い台）と、そのときの相手の位置・段・何をしていたか
    （相手が往復おわり・待機で、待機点の中心から 0.3 m 以内＝待機点にいる、0.3 m より外で 30 秒のあいだ 0.1 m も動かない＝待機点の手前で止まっている）・
    待機点の埋まり方（待機点1〜5 の中心から 0.35 m 以内にいた台の番号。例 "12-4-"）・道を探した結果（solve_status ごとの回数）・引き直し回数・
    どう解けたか（スタッフが動かした＝その間に staff_moves／rescues の「動かした」がこの台か相手にあった／よけた／回り込んだ／自分で（相手が動いた）／
    動けなくなった（60 秒）／解けない（上限まで））
  台の位置の記録（robot_track）は 5 秒ごとなので、段は最大 5 秒遅れる。向かう先は止まりの記録の方を先に使った
  種7 の行ったり来たりは stops.csv に入っていないので、robot_track から「往復おわり以外の段で、1.5 m 四方の中に 300 秒以上いつづけて回の終わりまで」を拾い、
    summary.json の progress_watch.halts_list（見張りで止まった時刻）を足した

2-1. 型の表（⑧5台・すぐ押す・種0〜9 の 10 回の和。30 秒以上）
  型	件	秒	中央値（秒）	最長（秒）	主な解け方
  A 待機場所から出る台と入る台が向かい合う（並びの中 y≧10.75・x≧18.7）	35	2,173	48.9	153	スタッフ 24・よけた 9
  B 受け渡し口へ向かう台と待機場所へ戻る台がぶつかる（並びの前）	35	2,004	48.2	117	スタッフ 28・よけた 6
  C1 待機点にいる台のそばで、戻る台が入れない	103	6,735	60.0	290	スタッフ 66・よけた 28・動けなくなった 6
  C2 待機点の手前にはみ出して止まった台で、戻る台が入れない	25	2,463	62.9	588	スタッフ 13・よけた 7・動けなくなった 5
  D 1台が行ったり来たりして抜けられない（種7）	1	31,320	—	31,320	解けない（上限まで）
  E 待機点にいる台・はみ出した台で、出る台が出られない	8	499	55.8	98	スタッフ 4・回り込んだ 2・よけた 2
  F 出る台どうし（受け渡し口へ向かう列）	30	1,490	41.2	128	スタッフ 20・よけた 7
  G 戻る台どうし	41	2,349	54.2	129	スタッフ 32・よけた 7
  H 受け渡し口から卓へ向かう台がからむ（右の卓へ行く台が並びを横切る）	79	4,304	50.0	117	スタッフ 52・動けなくなった 10・回り込んだ 8
  Z そのほか（相手が卓で止まる・立ち往生など）	12	671	51.2	99	スタッフ 7・よけた 4
  合わせて	369	54,008（D を除く 368 件・22,688 秒）
  （参考：長さを問わない全件 2,888 件・71,685 秒。多い順に H 1,079 件・10,173 秒／C1 461 件・9,696 秒／E 309 件・1,689 秒）
  依頼の例の型との対応：「出る台と入る台が向かい合う」＝A、「受け渡し口へ向かう台と戻る台」＝B、「待機点が埋まっていて入れない」＝C1・C2、
    「1台が行ったり来たり」＝D。見つかって足した型が E・F・G・H

2-2. 型ごとの中身（type_detail_out.txt）
  C1（いちばん多い）
    ・戻る台 69 件・入る台 34 件。相手は全件「待機点にいる」台。待機点にいた台の数は中央値 2
    ・止まった所：並びの前で自分の待機点より左 28・並びの中の右の端（待機点6 のそば）27・並びの中で自分の待機点の前 26
      → 左下から斜めに寄る台が、自分より受け渡し口側の待機点の台に近づいて止まる形と、右の端から並びに入り、並びに沿って左へ進もうとして
        途中の待機点の台にふさがれる形の2つが多い
    ・相手の組は (3→2) 12・(4→5) 11・(5→4) 11・(2→3) 11・(2→1) 10 と、隣どうしがほとんど
    ・道を探した結果は 87% が「引けた」。引けるのに進めない
    ・最長は種2 のロボット5（290 秒）：待機点5 へ左下から戻り、待機点4 のロボット4 に前のセンサーが届いて止まる（fig_C1_examples.png 左）
  C2
    ・往復を終えた台が待機点に入りきらずに手前に止まっていて、それに戻る台がつかえる。最長 588 秒
    ・往復おわりの台が待機点の中心から 0.3 m より外にいた時間の割合（10 回）：待機点1 28%・2 51%・3 36%・4 57%・5 75%。
      待機点からの y のずれの中央値は 1〜5 で −0.11・−0.23・−0.24・−0.44・−0.69 m（手前＝下へはみ出す）
      （戻りの往復は待機点から 0.25 m で着いたことになり、そのあとの寄せは止まりの決まりの外で動く。なぜ手前で止まるかは、この依頼では確かめていない）
  D（種7）
    ・ロボット2 が店の時刻 11,880 秒に待機点2 から受け渡し口（卓2 の料理）へ出る。ロボット1 は待機点1 の中心より左に 0.17 m・下に 0.11 m ずれて止まっていた
      （18.93, 11.24）。ロボット3 は待機点3、ロボット4・5 は待機点4・5 の手前にはみ出していた（待機点の埋まり方 "123--"）
    ・ロボット2 は x 19.22〜20.03・y 10.72〜11.27 を行き来した。左へ 0.5 m 弱進む → 見張りで止まる → 前が空いて少し下がる、をくり返した
    ・見張りで止まった回数 2,051 回（原因はすべて「もう1台のロボット」）・間隔の中央値 15.3 秒。止まりは毎回短く、近くのスタッフ（5 秒）にも
      30 秒の呼び出しにも届かず、staff_moves・rescues にこの台の行は 0。回の終わり（43,200 秒）まで 31,320 秒続いた
    ・この間、ロボット4・5 には「止まっている台が人の道をふさいでいた」の 30 秒の呼び出しが何度も来ていた（ロボット2 には来ない）
  A・B・F・G：出る台と戻る台・戻る台どうし・出る台どうしが、待機点の並びの中とその前（幅およそ 1 m）ですれ違えない。
    A は並びの中、B は並びの前。F は待機点2〜5 から出る台が受け渡し口へ向かう列で、手前の待機点の台の前を通る所でつかえる
  H：受け渡し口で料理を積んで右の卓へ行く台が、待機点の並びの中（y 10.9 より奥）を横切る件が 78 件中 50 件。相手は待機点にいる台 25・出る台 21・戻る台 15
  E：出る台が手前の待機点の台にふさがれる。D と同じ形で、短く解けたもの

2-3. 図とコマ
  置き場所：KIOXIA night/20261107_standby104/figs/（同じものを claude_code_reports/20261107_standby104_files/ にも置いた）
    fig_C1_examples.png　いちばん多い型 C1 の上から見た図2つ（左＝種2 ロボット5・290 秒、右＝撮った回の種7 ロボット3）。
      待機点・受け渡し口・台の位置（色＝何をしていたか）・向かう先の矢印・止まった台の前のセンサーの届く所（点線）・通った跡
    fig_D_seed7.png　種7 の行ったり来たり：上から見た図（ロボット2 の通った跡・向かう先の矢印）と、ロボット2 の x の動き（はじめの 600 秒）、
      見張りで止められた間隔の分布
    fig_where_by_type.png　30 秒以上の詰まりの始めの位置を型ごとに色分け（円の大きさ＝秒）
    frames_C1_rec_seed7_t9229.png　撮った回の録画（wide_l30）のコマ4枚（店の時刻 9,230・9,260・9,290・9,310 秒）。
      C1 の場面：ロボット3（赤丸）が待機点3 へ戻ろうとして、待機点2 のロボット2・待機点1 のロボット1 の前で止まっている。
      丸は 5 秒ごとの記録の位置を画素に直したもの（止まっている台は合う。動いている台は 1 秒ほどの差で少しずれる）
  種7 の行ったり来たり（D）は撮った回では起きていない（撮った回は全員が帰った）ので、録画のコマはない

2-4. 案B 入との比べ（参考・作りは変えていない）
  回したもの：⑧ large_p6_s6_r5_a70 × 種0〜9・案B 入（make_queue --rule-b on。中身は params の unity_rules のまま）・すぐ押す 入・人の先よけ 切。
    ほかの切り替えは sm101p6on と同じ（並びを比べ、違うのは rule_b だけ）。label sb104b・cs:87・同時4本・やり直しなし・上限 90 分
    08:07〜08:20。10 回とも completed・瞬間移動 0・1コマの跳び 0（watch_log.txt）。実時間 2.7〜5.1 分
  型ごと（10 回の和・30 秒以上）
  型	案B 切（すぐ押す）件	秒	案B 入 件	秒
  A	35	2,173	43	2,847
  B	35	2,004	25	1,390
  C1	103	6,735	122	8,497
  C2	25	2,463	17	1,624
  D	1	31,320	0	0
  E	8	499	10	777
  F	30	1,490	13	728
  G	41	2,349	43	2,897
  H	79	4,304	71	3,927
  Z	12	671	5	430
  合わせて	369	54,008	349	23,117（D を除くと 22,688 → 23,117）
  ・待機場所のそばのロボット同士の止まり（1 回あたり・10 種の中央値）：3,566 秒 → 3,532 秒
  ・店全体の止まりの合計（中央値）：8,068 → 7,975 秒。往復数 252.5 → 214.5。料理ができてから届くまで 1.69 → 2.29 分。入店待ち 11.32 → 17.53 分。
    全員が帰った回 9 → 10
  ・読み取り：受け渡し口を1台ずつにすると、受け渡し口へ向かう列（F）と受け渡し口の前のぶつかり（B）は減るが、待機点へ出入りする所（A・C1・G・E）は
    むしろ増え、待機場所のそばの止まりはほぼ同じ。案B は待機場所のそばの詰まりの直し方にはならないとみられる。
    種7 で D が出なかったのは1回だけの違いで、案B で D が無くなるとは言えない

2-5. 直すなら何を変えればよさそうか（候補。どれも作っていない）
  候補1 待機点の並べ方を変える（→ C1・C2・E・D・A）
    ・待機点どうしの間を、前のセンサーで隣の台を見ない幅にする（中心の間 0.8 m → 1.2 m 以上が目安＝台の幅 0.5＋前のセンサー 0.6 を超える）。
      ⑧ の並びの長さ（x 18.7〜23.5・4.8 m）では5台は入らないので、2列（前後にずらす）や、受け渡し口の左側にも分けて置く、などが要る
    ・待機点に「入る点」（待機点の真正面・下に 1 m ほど）を足し、そこから真上へ入る2段の入り方にする（斜めに寄って隣の台に近づくのを避ける）
    ・はみ出し（C2）は、着いたとみなす所（0.25 m）のあとの寄せ方を見直す
  候補2 出入りの道を分ける（→ A・B・F・G・H）
    ・出る道（並びの左の端から受け渡し口へ）と、戻る道（並びの前の 1 本下の帯から各待機点の真下へ）を分ける一方通行にする
    ・右の卓へ行く台・右から戻る台は、待機点の並び（y 10.9 より奥）を通らない（並びの帯を地図の上で走らない所にする、など）
  候補3 入る順の決まりを変える（→ D・E・F・C1・G）
    ・待機点を台ごとに決めず、受け渡し口に近い待機点から順に埋める列にする（出るのはいつも先頭＝待機点1 の台、戻る台は空いているいちばん右の待機点へ）。
      出る台が奥の待機点から手前の台の前を通る形（D・E・F）がなくなる
    ・あわせて、見張りで止まった回数が続いたら（例：同じ所で n 回）近くのスタッフ・30 秒の呼び出しの数に入れる。D は止まりが毎回短いため、
      今の決まりではスタッフが一度も来ない
  どの候補も数値（間の幅・入る点の位置・n 回など）と、店の形（p2m-site 側）を変えるかを決める必要がある


--------------------------------------------------------------------
3. 記録の置き場所
--------------------------------------------------------------------
  KIOXIA night/20261107_standby104/：
    q_sb104b.json・run104.sh・watch104.py（watch101b.py の写し・md5 同じ）・runner_sb104b.txt・watch_log.txt・nohup_run104.txt
    common104.py（店の形・地図の読み込みと図の下地）・ep104.py（詰まりの取り出しと型分け）・fig104.py（図）・frames104.py（録画のコマ）
    episodes_on_sm101p6on_r5.csv（すぐ押す・1件ずつ 2,888 件）・episodes_ruleb_sb104b_r5.csv（案B 入・3,384 件）・compare_out.txt・type_detail_out.txt・figs/
    （置いた字のファイルに 0 の入ったものは無い。写した前後で md5 が同じことを確かめた）
  night/20261107_sb104b/（実行係の記録）・回のフォルダ 20261107_sb104b_cs87_large_p6_r5_s{0..9}_passon_ruleb_sbret_ek_post_rescue_smove


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  KIOXIA：unity_ledger_v1_excluded_runs.csv（3行追記）・unity_ledger_v1.csv（案B 入 10 回を night_runner が追記）・archive/unity_ledger_v1_pre_104_20261107/・
    night/20261107_standby104/・night/20261107_sb104b/・回のフォルダ 10 個
  このファイル：claude_code_reports/20261107_standby104.txt・claude_code_reports/20261107_standby104_files/（図とコマ 4 枚）
  変えていない：Unity の作り（cs:87 のまま・check-in なし・Builds/headless も作り直していない）・tools/・店の形・params・サイト・
    rec101b の台帳の行と回のフォルダ・依頼101 の回のフォルダ


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. rec101b の台帳の直し方（止めた項目）。失敗の行と撮り直した回が同じ run の名前のため、決めたことどおりにはできない。案：
     a. 撮り直した回のフォルダ（と録画の rec_sm101_20261107/on_now が指す名前）を …_smove_try2 に名前を変え、その名前で completed の行を足す。
        失敗の行（…_smove）を除く一覧に入れる（台帳の決まりは曲げない。night_runner のやり直しの名前の付け方と同じ）
     b. 除く一覧を「run の名前＋status」で外せるようにして（tools/ledger.py・judge_night.py を直す）、failed の行だけ外し、同じ名前の completed の行を足す
        （「同じ run_folder の行は2度書かない」の決まりを、この1回だけ曲げる）
     c. このままにする（台帳には failed の行だけ。撮った回は基準データに使わない）
  2. 待機場所のそばの詰まりの直し方：2-5 の候補1〜3 のどれを（どの組み合わせで）作るか。数値（待機点の間の幅・入る点の位置・見張りで何回止まったら
     助けを呼ぶか）と、店の形（RobotStandby の並び。p2m-site 側）を変えてよいか

判定：止めた（決めてほしいことあり）
```

### 待機点に戻る台が、隣の台のそばで止まる場面（型C1）

【画像】LOG456_02_standby_jam_frames.png ⑧ロボット5台・種7を左上から見た4コマ（店の時刻9,230〜9,310秒）。赤い丸のロボット3が待機点3へ戻ろうとして、待機点2のロボット2のそばで止まり続ける

いちばん多かったのは、待機点に戻る台が、隣の待機点で待つ台のそばで入れない型（C1・103件・6,735秒）でした。報告の中でいちばん大事な所はここです。

**待機点どうしの間は0.8mしかなく、ロボットの前のセンサー（中心から0.85m）が隣の待機点の台に届く。** 戻る台は斜めに寄ってくるので、隣の台がセンサーに入り、止まります。道を探した結果の87〜98%は道が引けていました。道はあるのに、センサーが止めていたことになります。


## 作業ログ ― 依頼105：待機点を列で使う決まりは、ほとんど効かなかった

報告が出した直す候補は3つでした。待機点の並べ方を変える・出る道と戻る道を分ける・入る順を決める、です。最初に、店の形を変えずにすむ入る順を試しました。受け渡し口に近い待機点から順に埋め、列のように使う決まり（standby_queue）です。あわせて、短い止まりをくり返す台もスタッフが動かす決まり（repeat_stop）を足しました。依頼104 の種7の行ったり来たりは、止まりが毎回15秒ほどで、5秒・30秒のどちらのきっかけにもならず、スタッフが一度も来なかったためです。

### params の差分（p2m-site commit a029a65）

```diff
commit a029a654ff834caf0454e9e6bd3de06284ac12ca
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 7 09:45:09 2026 +0900

    params: unity_rules に standby_queue（待機点を列で使う）と staff_moves_robot.repeat_stop を足す（どちらも既定は切）


diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index c585789..d7a3ae1 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -423,7 +423,13 @@
    "role": "site_rule",
    "stopped_s": 5,
    "reach_m": 7,
-   "note": "（切）近くのスタッフがロボットを動かして通路を空ける（2026-11-06 エイイチと決めた。まず⑧で今のままと比べ、標準にするかは結果を見て決める）。ロボットが走っている途中で5秒以上止まったとき（待機場所・受け渡し口・卓で決まって待っているときは除く）、止まったロボットから歩いて7mくらいまでにいるスタッフのうち一番近い1人が、真っ先に行ってロボットを止め、脇へ動かす（瞬間移動はしない）。行かない人：お客さんの対応中（案内・会計・卓での接客）。料理や皿を持って歩いている人は、それを置いてから動かしに来る。自分の道をふさがれても、すり抜けられる幅があるなら動かさない。お客さんはロボットに触らない。7m以内に行ける人がいなければ、今までどおり30秒で呼ぶ。2026-11-07 に足した決まり（依頼100 の結果を見てエイイチが了承）：着いたら待たずにすぐ押して動かす（30秒の呼び出しで来た人の動かし方は今のまま）。着く前にロボットが自分で動き出したら取り消して戻る。その場で手を動かしている人（卓で料理を渡す・皿をまとめる・卓を拭く）は終わるまで行かない。すり抜けられないとは、体を横に向けても3秒抜けられないこと（そのとき進む向きの1.5m以内で止まっている台を動かす）。よける場所で待っているロボットも5秒のきっかけに入れる。60秒で着けなかった人はやめて自分の仕事に戻る。試算の数字は変わらない"
+   "note": "（切）近くのスタッフがロボットを動かして通路を空ける（2026-11-06 エイイチと決めた。まず⑧で今のままと比べ、標準にするかは結果を見て決める）。ロボットが走っている途中で5秒以上止まったとき（待機場所・受け渡し口・卓で決まって待っているときは除く）、止まったロボットから歩いて7mくらいまでにいるスタッフのうち一番近い1人が、真っ先に行ってロボットを止め、脇へ動かす（瞬間移動はしない）。行かない人：お客さんの対応中（案内・会計・卓での接客）。料理や皿を持って歩いている人は、それを置いてから動かしに来る。自分の道をふさがれても、すり抜けられる幅があるなら動かさない。お客さんはロボットに触らない。7m以内に行ける人がいなければ、今までどおり30秒で呼ぶ。2026-11-07 に足した決まり（依頼100 の結果を見てエイイチが了承）：着いたら待たずにすぐ押して動かす（30秒の呼び出しで来た人の動かし方は今のまま）。着く前にロボットが自分で動き出したら取り消して戻る。その場で手を動かしている人（卓で料理を渡す・皿をまとめる・卓を拭く）は終わるまで行かない。すり抜けられないとは、体を横に向けても3秒抜けられないこと（そのとき進む向きの1.5m以内で止まっている台を動かす）。よける場所で待っているロボットも5秒のきっかけに入れる。60秒で着けなかった人はやめて自分の仕事に戻る。試算の数字は変わらない。2026-11-07 に足した切り替え repeat_stop（既定は切）：同じ所（1.0m以内）で、止まっては少し動くをくり返し、合わせて5秒以上進めていないロボットも、5秒止まったものとして近くのスタッフが動かす（⑧ 5台・種7 で、1台が待機場所のそばで止まっては動くを2,051回くり返し、毎回の止まりが5秒に届かずスタッフが一度も来なかったため）",
+   "repeat_stop": false
+  },
+  "standby_queue": {
+   "value": false,
+   "role": "site_rule",
+   "note": "（切）待機点を台ごとに決めず、列で使う（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。店の形の RobotStandby は、受け渡し口に近い順に1番から並べる。次の往復に出るのは、待機している台のうち受け渡し口に一番近い台。往復を終えて戻る台は、待機している台より受け渡し口に近い側の空いている待機点のうち、一番遠い所（いる台のすぐ手前）へ入る。待機している台がいなければ一番遠い待機点へ入る。こうすると、出る台も戻る台も、待機している台の前を通らない。店の形（待機点の位置と数）は変えない。試算の数字は変わらない"
   }
  },
  "stores": {
```

### 依頼105 の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 360
---
# 依頼105：待機点を列で使う決まりと、くり返し止まる台もスタッフが動かす決まりを入れ、⑧で比べる

依頼104 の報告（claude_code_reports/20261107_standby104.txt）を読んで、エイイチが決めたこと（2026-11-07）：
- 直す候補のうち、まず「候補3：入る順の決まりを変える」から試す（店の形は変えない）
- 依頼104 の決めてほしいこと1（rec101b の台帳）は、今は触らない。台帳と除く一覧は、この依頼で回す回の追記のほかは変えない

決まりの正はサイト。p2m-site の public/sim/serving-robot-params.json に足した（commit a029a65。どちらも既定は切）。note の文がそのまま決まり：
- `unity_rules.standby_queue`：待機点を台ごとに決めず、列で使う。待機点は受け渡し口に近い順に1番から。出るのは、待機している台のうち受け渡し口に一番近い台。戻る台は、待機している台より受け渡し口に近い側の空いている待機点のうち一番遠い所（いる台のすぐ手前）へ入る。待機している台がいなければ一番遠い待機点へ。出る台も戻る台も、待機している台の前を通らない
- `unity_rules.staff_moves_robot.repeat_stop`：同じ所（1.0m以内）で止まっては少し動くをくり返し、合わせて5秒以上進めていないロボットも、5秒止まったものとして近くのスタッフが動かす（依頼104 の種7 の行ったり来たりのため）

範囲は⑧（large_p6）の配膳だけ。ほかの店・⑨・下げ膳は回さない。staff_moves_robot は入（すぐ押す）、人の先よけは切。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が cs:87、保留 0。Unity・night_runner／rec_runner が動いていない。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳と除く一覧を archive/unity_ledger_v1_pre_105_20261107/ に退避（行数と md5 を報告に）
2. サイトの params を写し直し、前の写しとの違いが unity_rules.standby_queue が1つ増えたことと、staff_moves_robot の repeat_stop と note の文だけであることを確かめる

## 1. 作る（どちらも切り替え。既定は切。値は params から読む）
- standbyQueue：note のとおり。待機点の割り当てを、往復に出るとき・戻るときにその場で決める。ほかの店でも同じ作りで動くようにする（RobotStandby の並びの順を受け渡し口からの距離で決める）。待機点の位置・数・店の形は変えない
- repeatStop：note のとおり。「同じ所」は、くり返しが始まった位置から 1.0m 以内。止まり（見張りで止められた時間を含む）と、進めなかった時間を合わせて5秒になったら、5秒のきっかけと同じに近くのスタッフを呼ぶ。staff_moves.csv のきっかけの列に「くり返し」と書く
- 瞬間移動はさせない。同じ条件・同じ種なら同じ結果になること
- check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- 両方切のとき、⑧5台 serve 種7 が依頼101b の sm101p6on の同じ回と全ファイル一致すること
- 両方入のとき、⑧5台 serve 種0 を2回回して一致すること
- 瞬間移動 0

## 3. 回す（画面なし・同時4本・⑧ serve・すぐ押す 入・人の先よけ 切）
1. ⑧5台（条件 138）× 種0〜9 を standbyQueue 入だけ ＝ 10回（label sq105）
2. ⑧5台 × 種0〜9 を standbyQueue 入＋repeatStop 入 ＝ 10回（label sq105rs）
3. ⑧2〜4台（条件 92・136・137）× 種0〜9 を両方入 ＝ 30回（label sq105rs）。台数が少ないときに悪くならないかを見る
- 比べる相手（今のまま）は依頼101b の sm101p6on（同じ cs:87 の作りで、両方切）
- 1回の上限は 90 分。止まっても回し直さない

## 4. 表にすること（10種の中央値）
- 5台：sm101p6on・sq105・sq105rs の3列。依頼104 と同じ型分け（ep104.py を使う）で、待機場所のそばの30秒以上の詰まりの型ごとの件数と秒。あわせて、ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数（きっかけ別）・料理ができてから届くまで・2分待って人が運んだ皿・往復数・全員が帰った回・入店待ち（参考）
- 2〜4台：sm101p6on と sq105rs の2列で、同じ数
- 待機点ごとの、待っていた時間と、中心から 0.3m より外にはみ出していた時間の割合（依頼104 の C2 の数と並べる）

## 5. 撮る（2 が通れば撮る）
- ⑧5台 serve 種7 を両方入で1本。撮り方は依頼101b と同じ。置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sq105_20261107/on/
- 依頼101b の now（すぐ押す・待機点は台ごと）と左右に並べ、待機場所のそばに寄せて店の時刻の5倍で流すパネル付きの動画を作る。寄る5分は、now の方で待機場所のそばの止まりがいちばん長い5分。題「⑧ ロボット5台：待機点は台ごと と 列で使う」
- 撮った回の名前が、撮らない回や前の撮影と同じにならないようにする（依頼104 の決めてほしいこと1 と同じことを起こさない）

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき、または両方切のときの⑧が sm101p6on と違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sq105.txt に：始める前の確かめ、1 の作り（どのファイルのどこ・値の読み方・切り替えの名前）、2 の確かめ、4 の表、5 の動画の名前と長さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼105 の結果

```text
# 結果：20261107_105_待機点を列で使い⑧で比べる

- 状態：完了
- 始めた時刻：2026-11-07 09:46
- 終わった時刻：2026-11-07 11:40（114分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 1cbdba5f-3728-485f-9e06-266632c93963`

## Claude Code の報告

**やったこと**
- **始める前の確かめ**：どれも合っていた（cs:87、保留 0、Unity と実行係は止まっていた、鍵ファイルなし）。
  - 台帳と除く一覧を archive/unity_ledger_v1_pre_105_20261107/ に退避した。台帳は 3,453 行・md5 7825123e…、除く一覧は 24 行・md5 d754edc5…。
  - params はサイトの a029a65 から写し直した。前の写しとの違いは、standby_queue が増えたこと、repeat_stop が増えたこと、note の文の3つだけだった。
- **作り**：待機点を列で使う切り替え（-ssStandbyQueue、フォルダ名に _sq）と、くり返し止まる切り替え（-ssRepeatStop、フォルダ名に _rstop）を足した。どちらも既定は切で、params から読む。
  - cs:88 では、戻る途中の台も「待機している台」に数えていた。note に合わせて cs:89 で直した。
  - 実行ファイルは cs:89 で作り直した（保留 0）。
- **確かめ（cs:89）**：3つとも通った。
  - 両方切の⑧5台 種7 は、sm101p6on の同じ回と 18 ファイルすべて一致した。
  - 両方入の種0 を2回回し、一致した。
  - 瞬間移動 0。
- **回したこと**：50 回、すべて completed、瞬間移動 0。撮影1本、表、動画も作った。

**結果**（10 種の中央値。並びは 今のまま → 列で使う → 列で使う＋くり返し）
- **⑧5台の止まりの合計**：8,068 → 9,295 → 8,428 秒。
- **待機場所のそばの30秒以上の詰まり**：1回あたり 2,473 → 3,187 → 2,022 秒（10 回の和は 54,008 → 64,525 → 21,433 秒）。
- **行ったり来たりの詰まり（D）**：今のままと列で使うだけでは1件ずつ残った。両方入では0になった。
- **全員が帰った回**：9 → 9 → 10 回（10 回のうち）。
- **入店待ち**：11.32 → 15.09 → 14.90 分。
- **料理ができてから届くまで**：1.69 → 1.88 → 1.80 分。
- **スタッフが動かした回数**：151 → 180 → 373 回（両方入のうち 254 回がきっかけ「くり返し」）。
- **2〜4台**：待機場所のそばの詰まりは少し減った。ただし30秒の呼び出しが増えた（2台で 42.5 → 110 回）。待っている台がいないと一番遠い待機点へ入るため、台が奥に並び、そこで人の道をふさいでいる。
- **ほかに分かったこと**：列で使う回では、スタッフに下へどかされた台が待機点へ戻らないまま長く止まっていた。なぜ戻らないかは確かめていない。
- **動画**：rec_sq105_20261107/slow_now_sq/slow_now_sq_panel.mp4（61.5 秒）。寄った5分は店の時刻 3,180〜3,480 秒。
- **台帳**：3,453 → 3,510 行（この依頼の 57 行の追記だけ）。先頭 3,453 行の md5 は変わっていない。終わったあとの md5 は 5c38ea64…。

**変えたファイル**
- Unity（cs:88・cs:89）：ServiceOps.cs・ServingRobotController.cs・ExperimentRunner.cs・HeadlessRun.cs・TripLogger.cs・serving-robot-params.json・tools/night_runner.py・tools/make_queue.py。
- Builds/headless（作り直し）・Builds/rec26_sq105（新しく足した写し）。
- KIOXIA：night/20261107_sq105/ ほか、rec_sq105_20261107/、退避した台帳。
- 報告：claude_code_reports/20261107_sq105.txt。

**決めてほしいこと**
1. 戻る台より受け渡し口に近い側に空いた待機点が無いときの入り方。note に書かれていないので、仮に「空いている待機点のうち受け渡し口に一番近い所」にして回した（5台では戻る回数の 13%）。このままでよいか、別の決め方にするか。
2. 列で使う＋くり返しを標準にするか。待機場所のそばの詰まりは減ったが、5台の止まりの合計・料理の待ち・入店待ちは今のままより悪かった。2〜4台では奥の待機点の台が人の道をふさいだ。次に何を試すか。
3. 直す前の cs:88 の確かめ3行（det105・chk105a・chk105b）を除く一覧に入れるか、このままにするか。
4. どかされた台が待機点へ戻らない件を、別の依頼で調べるか。

判定：止めた（決めてほしいことあり）
```

### 依頼105 の Claude Code の報告（20261107_sq105.txt）

```text
====================================================================
依頼105：待機点を列で使う決まりと、くり返し止まる台もスタッフが動かす決まりを入れ、⑧で比べる
2026-11-07 09:46〜11:45　作業場所 cs:87 → cs:88（作り）→ cs:89（直し）
====================================================================

結論
  ・止める線には当たらなかった（瞬間移動 0・1コマの跳び 0。cs:89 で両方切の⑧5台 種7 は sm101p6on と全ファイル一致。両方入の2回も一致）
  ・3 章の 50 回と撮った1回は、どれも completed
  ・5台（10 種の中央値）
      列で使うだけ（sq105）：今のまま（sm101p6on）より悪くなった。止まりの合計 8,068 → 9,295 秒、入店待ち 11.32 → 15.09 分。
        種0 で、1台が待機場所のそばで行ったり来たりして回の終わりまで抜けられなかった（依頼104 の D と同じ形。33,585 秒）
      列で使う＋くり返し（sq105rs）：待機場所のそばの 30 秒以上の詰まりは 10 回の和で 54,008 → 21,433 秒（D を除くと 22,688 → 21,433）。
        1回あたりの中央値は 2,473 → 2,022 秒。10 回とも全員が帰った。ただ、店全体では良くなっていない：
        止まりの合計 8,068 → 8,428 秒、料理が届くまで 1.69 → 1.80 分、入店待ち 11.32 → 14.90 分
  ・2〜4台（sq105rs）：待機場所のそばの詰まりは少し減った。ただ、30 秒の呼び出しが 2台 42.5 → 110.0 回、3台 64.5 → 89.5 回、4台 59.0 → 97.5 回と増えた。
    多くは「止まっている台が人の道をふさいでいた」。待っている台がいないと一番遠い待機点（5・6）へ入る決まりのため、台がそこで人の道をふさぐ（3 章の 3）
  ・ほかに分かったこと：列で使う回は、往復を終えた台が待機点から 1.5 m より遠い所に長くいる（1回あたりの中央値 今のまま 290 秒 → sq105 6,215 秒・sq105rs 7,750 秒）。
    スタッフが、止まっている台を下（y 9.4〜9.7）へ押してどかしたあと、その台が待機点へ戻らないまま待っている（sq105 の種0 の D の相手もこの台）
  ・決まりの文に書かれていない場合が1つあった（手前に空いた待機点がないとき）。作りでは仮に決めて回した（決めてほしいこと 1）


--------------------------------------------------------------------
0. 始める前の確かめ（09:46〜09:50）
--------------------------------------------------------------------
  1. 作業場所 cs:87（cm status：保留なし）。Builds/headless は build_id cs87_20261107_0533・unity_cs ServiceSim/cs:87・pending_changes 空
     Unity（エディタ・実行ファイル）・night_runner・rec_runner は動いていなかった（動いていたのは Unity Hub だけ）。KIOXIA マウント済み／unity_ledger_v1.lock なし
     退避：archive/unity_ledger_v1_pre_105_20261107/
       unity_ledger_v1.csv　3,453 行・md5 7825123e526a26c31b917d76a6d66ca1（依頼104 の終わりと同じ）
       unity_ledger_v1_excluded_runs.csv　24 行・md5 d754edc5add03259ab8050e43d200322（依頼104 の終わりと同じ）
  2. params：p2m-site a029a65 の public/sim/serving-robot-params.json を gh api で取った（main と同じ中身・md5 2d55e5413c06108ebfe60e04e90ec829）。
     前の写し（cs:87・80f8ab26…）と JSON を中まで比べた。違いは次の3つだけ：
       ・unity_rules.standby_queue が1つ増えた（value false・role site_rule・note）
       ・unity_rules.staff_moves_robot.repeat_stop が増えた（false）
       ・unity_rules.staff_moves_robot.note の文（repeat_stop の説明を足した）
     → 依頼どおりなので進めた


--------------------------------------------------------------------
1. 作り（どちらも切り替え。既定は切）
--------------------------------------------------------------------
  切り替えの名前
    待機点を列で使う：実行ファイルの引数 -ssStandbyQueue on|off／並べる表の鍵 standby_queue／make_queue.py --standby-queue／
      入の回だけフォルダ名に _sq（_smove の後ろ）。ExperimentRunner.Job.standbyQueue・ServiceOps.standbyQueueEnabled
    くり返し止まる：-ssRepeatStop on|off／鍵 repeat_stop／make_queue.py --repeat-stop／入の回だけ _rstop（_sq の後ろ）。
      Job.repeatStop・ServiceOps.repeatStopEnabled。近くのスタッフが動かす（staff_moves_robot）が入の回だけ使える（切なのに入にすると回さない）
  値の読み方
    ・回ごとに指定しないとき（ExperimentRunner.ReadStandbyQueueAndRepeatStop）は params の unity_rules.standby_queue.value と
      unity_rules.staff_moves_robot.repeat_stop を読む。night_runner も、並べる表に鍵が無いときは同じ所から既定を取る（どちらも今は切）
    ・くり返しの秒は params の staff_moves_robot.stopped_s（5 秒）。「同じ所」の 1.0 m は params に数の欄が無く、note の文「同じ所（1.0m以内）」に
      あるだけなので、ServingRobotController.RepeatStopNearM＝1.0 に置いた
  待機点を列で使う（Service/ServiceOps.cs の「待機点を列で使う」の節・Robot/ServingRobotController.cs・Experiment/ExperimentRunner.cs）
    ・SetStandbyQueue：店の形の RobotStandby を、受け渡し口（PassPoint）からのまっすぐの距離が近い順に並べる（同じ距離なら店の形の順）。
      ⑧ は 1,2,3,4,5,6 の順のまま（run_info.json の standby_queue.order）。待機点の位置・数・店の形は変えていない
    ・置き始め：台 i（0 から）を列の i 番めに置く（⑧ は今までと同じ所）
    ・出る：AssignRobots を、待機点を持つ台の列の前から順に見る（切の回は今までどおり台の番号の順）。出た台は待機点を空ける
    ・戻る：往復の最後の卓を出て戻り始めるとき（NextStopOrReturn。下げ膳は BusGoStandby）に StandbyQueueClaimForReturn で決める。
        「待機している台」＝往復の外（Idle／Done）で待機点を持っている台。そのうち一番前の台より受け渡し口に近い側の空いている待機点のうち、
        一番遠い所。戻る途中のほかの台がもう決めた待機点は「空いていない」に数える（2台が同じ所に入らないように）。
        待機している台がいなければ、空いている一番遠い待機点。
        手前に空きが無いとき（決まりの文に無い場合）は、空いている待機点のうち受け渡し口に一番近い所にした（summary.json の standby_queue.fallbacks で数えた）
    ・往復の外で待機点を持っていない台（待機場所へ戻る 切の回など）は、ParkIdleRobots でその場で決める
    ・cs:88 では「待機している台」に戻る途中の台も入れていたため、手前に空きが無い場合が 201 回中 77 回あった（chk105a の値）。
      note の「待機している台」に合わせて cs:89 で直した（同じ種で 201 回中 28 回）。3 章はすべて cs:89
  くり返し止まる（Robot/ServingRobotController.cs の「くり返し止まる」の節・Service/ServiceOps.cs の UpdateStaffMoves）
    ・走っている途中（卓へ／受け渡し口へ／待機場所へ）で止まりが始まった所を「くり返しが始まった位置」にする
    ・そこから 1.0 m 以内にいるあいだ、止まっている秒（見張りで止められた秒も止まりに入る）と、止まりの間に少し動いた秒を足す
      （通路の入口・1本道の順番待ちで止まっていない秒は足さない）。1.0 m より離れたら数え直す。卓での受け渡し・動けなくなった・押された・次の往復でも数え直す
    ・止まりが2回以上あり、足した秒が 5 秒以上で、いま止まっていれば、5 秒のきっかけと同じ道筋で近くのスタッフを呼ぶ（呼んだら数え直す）
    ・staff_moves.csv の trigger の列に「くり返し」。summary.json の staff_moves.calls_repeat（入の回だけ）
    ・動き（止まる決まり・押し方）は変えていない。数えて呼ぶだけ
  瞬間移動はさせていない。乱数は使っていない（同じ条件・同じ種なら同じ結果。2 章で確かめた）
  切の回は今までと同じ動き・同じ記録（run_info.json・summary.json の新しい欄は入の回だけ書く）
  ほかに変えたもの：Experiment/HeadlessRun.cs（引数・フォルダ名）・Experiment/TripLogger.cs（run_info・summary の欄）・tools/night_runner.py・tools/make_queue.py
  check-in
    cs:88：上の6ファイル＋serving-robot-params.json（a029a65 の写し）＋tools 2つ（cm ci でファイルを1つずつ指定）
    cs:89：Service/ServiceOps.cs（戻る台の待機点の決め方の直し）
    保留 0。Builds/headless：build_id cs89_20261107_1003・unity_cs ServiceSim/cs:89・pending_changes 空・Build Finished, Result: Success
    録画用：Builds/rec26_sq105（Builds/headless の写し・実行ファイルの md5 79a1f4a7e750990c2980eee016b69932）


--------------------------------------------------------------------
2. 確かめ（cmp105.py＝依頼101b の cmp101b.py の写し・md5 同じ）
--------------------------------------------------------------------
  cs:88（10:00）：det105（両方切）＝sm101p6on と一致・chk105a／chk105b（両方入）一致・瞬間移動 0。ただし上の直しをしたので、cs:89 でやり直した
  cs:89（10:04〜10:10）
    ・両方切：⑧5台 serve 種7（det105b）と 20261107_sm101p6on_cs87_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove
      → 一致（conditions.json・contacts・dishes・give_ups・groups・nowarp_jams・passes・people_jams・requeues・rescues・robot_track・run_info・
        staff_moves・stops・summary・timeline・trips・yields の 18 ファイル。cmp_det105b_vs_sm101p6on.txt）
    ・両方入：⑧5台 serve 種0 を2回（chk105c・chk105d）→ 18 ファイルとも一致（cmp_chk105_2.txt）
    ・瞬間移動 0・1コマの跳び 0（3回とも）
    ・中身：chk105c は standby_queue claims 201・fallbacks 28・shared 0、くり返しで行くと決めた 240 回。全員が帰った
  → 通ったので 3 を回した


--------------------------------------------------------------------
3. 回したこと（画面なし・同時4本・⑧ serve・すぐ押す 入・人の先よけ 切・やり直しなし・上限 90 分・cs:89）
--------------------------------------------------------------------
  10:11〜11:22。並べる表 q_sq105.json（依頼101b の q_sm101p6on.json の回を写し、standby_queue・repeat_stop・label だけ足した）
    sq105：⑧5台 × 種0〜9 を列で使う 入（くり返し 切）＝10 回
    sq105rs：⑧2〜5台 × 種0〜9 を両方入＝40 回
  50 回とも completed。瞬間移動 0・1コマの跳び 0。実時間は平均 5.4 分・最長 9.6 分（撮影と同時に回したため、依頼101b より少し長い）
  比べる相手：依頼101b の sm101p6on（cs:87・両方切）。cs:89 の両方切が cs:87 と全ファイル一致することは 2 章で確かめた

3-1. 5台（agg105_out.txt。10 種の中央値・回数と秒は1回あたり）
  項目	今のまま sm101p6on	列で使う sq105	列で使う＋くり返し sq105rs
  ロボットの止まりの合計秒	8,068	9,295	8,428
  うちロボット同士（秒）	5,226	5,856	5,068
  60秒動けなくなった（回）	13.5	18.0	13.5
  30秒の呼び出し（回）	112.0	110.5	103.5
  スタッフが動かした（回）	151.0	180.0	373.0
    きっかけ 5秒	145.5	174.5	113.0
    きっかけ くり返し	0	0	254.0
    きっかけ 道をふさがれた	4.5	6.0	4.0
  （参考）行くと決めた（回）	457.5	482.0	548.5
  （参考）着く前に取り消し（回）	303.0	301.5	171.0
  料理ができてから届くまで（分）	1.69	1.88	1.80
  2分待って人が運んだ皿	24.0	28.0	25.5
  往復数	252.5	250.0	254.0
  全員が帰った回	9／10（種7 が帰らず）	9／10（種0 が帰らず）	10／10
  入店待ち（分・参考）	11.32	15.09	14.90

  待機場所のそばのロボット同士の 30 秒以上の詰まり（型ごと。各欄＝件の中央値／秒の中央値（10 回の和の件／秒））
  数え方：依頼104 の ep104.py の写し ep105.py。範囲・まとめ方・型の決まりは同じ。違うのは「自分の待機点」の決め方だけ：
    列で使う回は台ごとの待機点が決まっていないため、その時の向かう先が待機点ならそれ、そうでなければ一番近い待機点にした（DYN=1）。
    3列ともこの数え方で並べた。今のままを依頼104 の数え方（DYN=0）で数えると依頼104 と同じ 369 件・54,008 秒になることを確かめた。
    DYN=1 では今のままの C1 103→109 件・C2 25→22 件・G 41→38 件に入れ替わる（合計は同じ）
  型	今のまま	列で使う	列で使う＋くり返し
  A 出る台と入る台が向かい合う	3.0／194（35／2,173）	4.5／290（49／2,917）	6.0／305（55／2,926）
  B 受け渡し口へ向かう台と戻る台	3.5／173（35／2,004）	2.5／124（33／1,664）	2.5／134（23／1,395）
  C1 待機点にいる台のそばで入れない	11.0／710（109／7,221）	11.0／704（122／8,308）	8.5／492（93／5,313）
  C2 はみ出した台で入れない	2.5／204（22／2,177）	2.0／176（23／3,829）	1.5／102（17／1,004）
  D 1台が行ったり来たり	0／0（1／31,320）	0／0（1／33,585）	0／0（0／0）
  E 出る台が出られない	1.0／44（8／499）	1.0／79（16／1,142）	1.0／35（9／428）
  F 出る台どうし	3.0／142（30／1,490）	5.0／342（54／3,463）	4.0／190（41／2,062）
  G 戻る台どうし	3.5／176（38／2,150）	3.5／201（35／2,454）	3.0／180（40／2,286）
  H 受け渡し口から卓へ向かう台がからむ	8.5／446（79／4,304）	9.5／604（100／6,622）	8.5／551（87／5,538）
  Z そのほか	1.0／38（12／671）	1.0／51（11／541）	1.0／55（8／481）
  合わせて	39.0／2,473（369／54,008）	43.5／3,187（444／64,525）	37.5／2,022（373／21,433）

  読み取り
    ・列で使うだけでは、ねらった D・E・F は減らなかった（F は 30→54 件、E は 8→16 件。D は種0 で1件）。
      sq105 種0 の D：ロボット2 が店の時刻 9,615 秒から x 20.5〜21.2・y 10.7〜11.2 で行ったり来たりし（見張りで止まった 2,118 回）、回の終わりまで抜けられなかった。
      相手はロボット1 で、スタッフに押されて待機点の下（20.34, 9.36）に止まっていた台
    ・くり返しを入れると、C1・C2・D・E が減り、待機場所のそばの詰まりは今のままより少ない（中央値 2,473 → 2,022 秒）。
      スタッフが動かした回数は 2.5 倍（151 → 373 回）で、うち 254 回が「くり返し」
    ・A（並びの中で向かい合う）と H は今のままより多い
    ・店全体では、止まりの合計・料理の待ち・入店待ちが今のままより悪い

3-2. 2〜4台（今のまま と 列で使う＋くり返し）
  項目	2台 今	2台 列＋くり返し	3台 今	3台 列＋くり返し	4台 今	4台 列＋くり返し
  ロボットの止まりの合計秒	1,810	1,987	3,959	3,965	5,903	6,111
  うちロボット同士（秒）	610	440	1,679	1,580	3,282	3,013
  60秒動けなくなった（回）	3.0	4.0	5.5	5.5	9.0	8.5
  30秒の呼び出し（回）	42.5	110.0	64.5	89.5	59.0	97.5
  スタッフが動かした（回）	35.5	112.5	82.5	206.5	115.5	310.5
    きっかけ 5秒	33.5	23.5	79.5	52.5	110.5	87.5
    きっかけ くり返し	0	89.5	0	146.0	0	220.5
    きっかけ 道をふさがれた	2.0	1.5	4.0	3.0	5.0	3.5
  料理ができてから届くまで（分）	2.27	2.39	1.91	2.01	1.72	1.82
  2分待って人が運んだ皿	78.5	83.0	40.5	47.5	30.5	31.0
  往復数	142.0	136.5	203.0	194.5	231.0	238.0
  全員が帰った回	10／10	10／10	10／10	10／10	10／10	10／10
  入店待ち（分・参考）	10.94	11.71	10.71	11.13	11.76	11.84
  待機場所のそばの詰まり（30 秒以上・中央値の件／秒（10 回の和））
    2台 2.0／77（22／1,130）→ 1.5／60（16／856）
    3台 10.0／425（91／4,308）→ 6.5／338（76／4,116）
    4台 19.0／971（202／11,556）→ 17.5／969（179／9,405）
    （型ごとは agg105_out.txt）
  読み取り
    ・どの台数でも、ロボット同士の止まりと待機場所のそばの詰まりは少し減った。止まりの合計・料理の待ち・人が運んだ皿は少し悪くなった
    ・30 秒の呼び出しが増えた。2台 種2 の例では、今のまま 41 回 → 108 回で、98 回が「止まっている台が人の道をふさいでいた」。場所は待機点4〜6 のそば
      （x 21〜23・y 11。今のままは待機点1・2 のそば x 19〜20）。待っている台がいないとき一番遠い待機点（6）へ入る決まりのため、
      台が少ないと台は奥の待機点に並び、そこで人の道をふさぐとみられる

3-3. 待機点ごとの、待っていた時間と、中心から 0.3 m より外にいた時間の割合（5台・slots105.py）
  数え方：robot_track.csv の段「往復おわり」の行×5 秒。依頼104 の C2 の数は「台 i は待機点 i」で数えた。列で使う回はそれができないので、
    その時いちばん近い待機点に入れた（1.5 m より遠い行は外した）。今のままも同じ数え方で並べた
  待機点	依頼104（今のまま・台＝待機点）	今のまま（近い待機点）	列で使う	列で使う＋くり返し
  1	7,522 秒・28%	7,680 秒・30%	6,918 秒・74%	7,215 秒・51%
  2	7,930 秒・51%	7,435 秒・47%	7,425 秒・42%	7,255 秒・29%
  3	8,820 秒・36%	8,778 秒・37%	6,380 秒・24%	7,975 秒・58%
  4	9,860 秒・57%	9,655 秒・51%	8,798 秒・23%	3,330 秒・45%
  5	11,105 秒・75%	9,850 秒・57%	3,938 秒・51%	2,970 秒・40%
  6	—	1,015 秒・99%	6,935 秒・78%	6,490 秒・62%
  （秒は1回あたりの中央値、割合は 10 回の和で出した）
  待機点から 1.5 m より遠い所の「往復おわり」（1回あたり中央値）：今のまま 290 秒・列で使う 6,215 秒・列で使う＋くり返し 7,750 秒
    sq105rs 種0 を見ると、待機点にいた台がスタッフに押されて下（y 9.4〜9.7）へどかされ、そのまま往復おわりで止まっていた
    （どかしたきっかけは「くり返し」も「5秒」もある）。今のままにも同じものはある（種0 で 5,290 秒）。なぜ待機点へ戻らないのかは確かめていない
  読み取り：列で使うと、待機点6 がよく使われ（待っている台がいないとき・手前に空きが無いとき）、はみ出しの割合は待機点によって増えたり減ったりで、
    はっきり良くなったとは言えない

3-4. 手前に空きが無かった回数（決まりの外。fallbacks／戻るとき決めた回数の 10 回の和）
  列で使う 5台 320／2,478（13%）・列で使う＋くり返し 2台 22／1,381・3台 45／1,917・4台 172／2,299・5台 316／2,505（13%）
  shared（待機点が足りない）は 0


--------------------------------------------------------------------
4. 撮った回と動画
--------------------------------------------------------------------
  撮り方：依頼101b と同じ（rec_runner.py は依頼101b の写し・md5 ccc702841f7e952d97bea39e3959c6d1。--oblique --hide-paths --max-wall-min 120 --parallel 2 --no-retry --limit-min 150）。
    実行ファイル Builds/rec26_sq105（cs:89）。⑧5台 serve 種7・両方入・すぐ押す 入・人の先よけ 切
    10:12〜11:37（3 章の本番と同時に回した）。completed・全員が帰った・瞬間移動 0・1コマの跳び 0・実時間 84.6 分
  名前：20261107_rec105_cs89_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove_sq_rstop（label rec105。撮る前に、同じ名前のフォルダ・台帳の行が無いことを確かめた。
    撮らない回の名前は sq105rs、前の撮影は rec101b なので、どれとも同じにならない。撮影は1つの台本から1回だけ始めた）
  置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sq105_20261107/on/（録画 mp4 2本・frames.csv・camera.json・timeline・summary・stops・robot_track・contacts・rescues・staff_moves）
  撮った回と撮らない回（同じ⑧5台 種7 両方入）：入店待ち 12.49 分／14.49 分。止まりの合計 8,870 秒／9,440 秒（今までと同じく、撮った回と撮らない回で数が違う）

  動画：rec_sq105_20261107/slow_now_sq/slow_now_sq_panel.mp4　61.5 秒・3840×1280・30fps（ffprobe）・5,111,565 バイト
    題「⑧ ロボット5台：待機点は台ごと と 列で使う」。左＝待機点は台ごと（依頼101b の now＝rec_sm101_20261107/on_now）、右＝列で使う（上の撮った回・くり返しも入）
    作り：依頼101b と同じ（店全体の引きの1コマ 1.5 秒 → 寄った絵を店の時刻の5倍で 60 秒。左右にパネル）。slow105.py・mpv105.py は依頼101b の slow101b.py・mpv101b.py の写し
      （mpv は md5 同じ。slow は使う mpv の名前だけ変えた）
    5分：select105.py で、左（now）で待機場所のそば（依頼104 と同じ範囲）に始めの位置がある止まりの秒がいちばん長い5分（30 秒きざみ）
      → 店の時刻 3,180〜3,480 秒（0時間53分00秒〜0時間58分00秒）。その5分の待機場所のそばの止まり：左 467 秒／右 220 秒（止まり全体 624／350 秒）
    寄った所：待機場所のそば（店の座標 20.1, 10.9。左右の待機場所のそばの止まりを秒で重みを付けた真ん中）。切り方 crop=1360:1080:1384:471
    題がパネルで切れないか：寄りの真ん中のコマ（slow_now_sq_panel_check_s1_slow_mid.png）を見た。上の帯の題・説明・時刻・寄った所・左右の名前、
      左右のパネルの題・ロボット5台の枠・グラフまで切れずに出ている
    記録：slow_now_sq_panel_log.txt・確かめ用のコマ4枚（同じフォルダ）・night/20261107_sq105/plan105.json


--------------------------------------------------------------------
5. 台帳
--------------------------------------------------------------------
  3,453 行（始める前）→ 3,510 行（追記 57 行だけ。どれも completed）
    確かめ cs:88 の3（det105・chk105a・chk105b）・確かめ cs:89 の3（det105b・chk105c・chk105d）・sq105 10・sq105rs 40・rec105 1
  先頭 3,453 行の md5 は 7825123e526a26c31b917d76a6d66ca1（始める前と同じ）。終わったあとの md5 5c38ea6493dfe5c79db00dfbf463e6c1。鍵ファイルは残っていない
  除く一覧は変えていない（24 行・md5 d754edc5add03259ab8050e43d200322）
  cs:88 の確かめ3回は、cs:89 に直す前の作りで回したもの。台帳には残っている（消していない。決めてほしいこと 3）


--------------------------------------------------------------------
6. 記録の置き場所
--------------------------------------------------------------------
  KIOXIA night/20261107_sq105/：build.log（cs:88）・build_cs89.log・q_*.json・run_chk105.sh・run_chk105_2.sh・run105.sh・rec105.sh・cmp105.py・watch105.py・
    cmp_det105_vs_sm101p6on.txt・cmp_chk105.txt（cs:88）・cmp_det105b_vs_sm101p6on.txt・cmp_chk105_2.txt（cs:89）・runner_*.txt・rec_log.txt・
    ep105.py・common104.py（写し）・sumep.py・slots105.py・agg105.py・agg105_out.txt・ep_*.csv（型分けの1件ずつ）・
    rec_runner.py・post105.py・select105.py・slow105.py・mpv105.py・plan105.json・slow105_log_run.txt
    （置いた字のファイルに 0 の入ったものは無いことを確かめた）
  night/20261107_det105・chk105a・chk105b・det105b・chk105c・chk105d・sq105run・rec105（実行係の記録）
  night/20261107_chk105a_dry（名前を確かめるための、から回しの記録。回は回していない）
  回のフォルダ：20261107_{det105|chk105a|chk105b}_cs88_…・20261107_{det105b|chk105c|chk105d|sq105|sq105rs|rec105}_cs89_…


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  Unity（cs:88・cs:89）：Assets/ServiceSim/Service/ServiceOps.cs・Robot/ServingRobotController.cs・Experiment/ExperimentRunner.cs・Experiment/HeadlessRun.cs・
    Experiment/TripLogger.cs・Experiment/serving-robot-params.json（a029a65 の写し）・tools/night_runner.py・tools/make_queue.py
  Builds/headless（cs:89 に作り直し）・Builds/rec26_sq105（新しく足した写し）
  KIOXIA：archive/unity_ledger_v1_pre_105_20261107/・台帳への追記 57 行・上の 6 章のもの・rec_sq105_20261107/
  このファイル：claude_code_reports/20261107_sq105.txt
  変えていない：除く一覧・rec101b の台帳の行・店の形・待機点の位置と数・試算の数・サイト（何も上げていない）・tools/judge_night.py・rec_runner.py の中身


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. 列で使う決まりで、戻る台より手前（受け渡し口の側）に空いた待機点が無いとき（待機している一番前の台が待機点1 にいるなど）の入り方。
     note に書かれていないので、仮に「空いている待機点のうち受け渡し口に一番近い所」にして回した（5台で戻る回数の 13%）。
     この場合は、戻る台が待機している台の前を通ることがある。このままでよいか、別の決め方（例：待機点1 の前で待つ・一番遠い空きへ入る）にするか
  2. 列で使う＋くり返しを標準にするか。待機場所のそばの詰まりと行ったり来たり（D）は減ったが、5台の止まりの合計・料理の待ち・入店待ちは今のままより悪く、
     スタッフが動かす回数は 2.5 倍になった。2〜4台では、奥の待機点に並んだ台が人の道をふさぎ、30 秒の呼び出しが増えた（2台 42.5 → 110 回）。
     次に何を試すか（例：待っている台がいないときは一番遠い所でなく待機点1 へ入る・依頼104 の候補1〜2 と組み合わせる）
  3. 確かめのやり直しで台帳に入った cs:88 の3行（20261107_det105／chk105a／chk105b_cs88_…。直す前の作り）を除く一覧に入れるか、このままにするか
  4. 押されて待機点の下へどかされた台が、往復おわりのまま待機点へ戻らずに長く止まっている（列で使う回で多い。今のままにもある）。別の依頼で調べるか

判定：止めた（決めてほしいことあり）
```

### 待機点を列で使った前と後（⑧5台・10回分を重ねた図）

【画像】LOG456_03_queue_compare.png ⑧ロボット5台・10回分を重ねて、待機場所のまわりを上から見た図。上から、今のまま・待機点を列で使う・列で使う＋くり返し止まる台もスタッフが動かす。赤い丸がロボット同士の30秒以上の詰まり、青が仕事のないロボットがいた所

列で使う＋くり返しの組み合わせで、待機場所のそばの30秒以上の詰まりは、10回の和で54,008秒から21,433秒に減ったように見えました。ただし、減った分のほとんどは種7の行ったり来たり1件（31,320秒）が消えたためです。その1件を除くと、22,688秒（6.3時間）から21,433秒（6.0時間）で、ほとんど変わっていません。入店待ちは11.32分から14.90分に延びました。

列で使う決まりは、標準にはしませんでした。入る順を決めても、斜めに寄って隣の台をセンサーに入れることは変わらないためです。


## 作業ログ ― 依頼108：待機点を2列に並べ直したら、戻れない待機点が出た

次に、待機点どうしの間を広げる方向を選びました。

> 待機点の間を広げる方向

### 待機点の並べ方の3つの案

【画像】LOG456_04_standby_options.png ⑧の待機点の並べ方の案を上から見た図。今（1列・間0.8m・6点）、案A（1列・間1.2m・5点）、案B（2列を互い違い・6点）。白い丸がロボット、赤い輪が前のセンサーの届く所。今は隣の白い丸が赤い輪の中に入っている

案A は、1列のまま間を1.2m に広げる案です。ただ、このとき描いた図は、受け渡し口の前の空けておく所に待機点1がかかっていて、⑧の壁ぞいには収まりませんでした。あとで測り直すと、1列で取れる間は1.1m までです。ここでは案B（2列を互い違い）を選びました。

### 2列にすると、卓までの道が延びる

【画像】LOG456_05_two_rows_route.png ⑧の受け渡し口から右上の卓へのロボットの道。上が今（1列）、下が案B（2列）。2列では手前の列をよけて下を回るため、T57まで7.66m が9.98m に、卓までの距離の平均が15.6m から16.1m に延びる

2列にすると、手前の列をよけて下を回るので、卓までの道が延びます。サイトの試算も、店の形を2列にして⑧の分を計算し直しました（3,066条件）。

### 2列の店の形の差分（p2m-site commit 18d23fe・あとで元に戻した）

18d23fe で変わったファイルの一覧です。Unity が読む店の形（unity/p6_large_center.json）と params は、計算し直した数字の差分なので、一覧だけを載せます。

```text
 public/sim/layouts/large/p6_large_center.json      |    50 +-
 .../layouts/large/p6_large_center_analysis.json    |    92 +-
 public/sim/layouts/large/p7_large_b.json           |     2 +-
 public/sim/layouts/large/p7_large_b_analysis.json  |     2 +-
 public/sim/layouts/large/summary.json              |     8 +-
 .../sim/layouts/large/unity/p6_large_center.json   | 14650 ++++++++++---------
 .../layouts/large/unity/p6_large_center_map.json   |     2 +-
 public/sim/layouts/large/unity/p7_large_b.json     |     2 +-
 public/sim/layouts/large/unity/p7_large_b_map.json |     2 +-
 public/sim/serving-robot-params.json               |   868 +-
 public/sim/serving-robot.html                      |     5 +-
 tools/serving_sim/build_page_large.py              |     2 +
 tools/sim_layouts/README.md                        |     1 +
 tools/sim_layouts/famires_v3.py                    |    14 +-
 tools/sim_layouts/large_store.py                   |    12 +
 15 files changed, 8198 insertions(+), 7514 deletions(-)
```

店の形を作るコード・試算のページを作るコード・README の差分です。

````diff
diff --git a/tools/serving_sim/build_page_large.py b/tools/serving_sim/build_page_large.py
index b50e2e9..79b6395 100644
--- a/tools/serving_sim/build_page_large.py
+++ b/tools/serving_sim/build_page_large.py
@@ -67,6 +67,8 @@ for k in KEYS:
         tables=[[t["x"], t["y"], round(t["x"] + t["w"], 3), round(t["y"] + t["h"], 3), t["seats"]] for t in L["tables"]],
         dish=[d["rect"] for d in L["dish_up"]], standby=L["robot_standby"]["rect"],
         ent=[L["entrance"]["side"], L["entrance"]["a0"], L["entrance"]["a1"]])
+    if L["robot_standby"].get("slot_rects"):   # 待機点を1列に並べない店は、1台ずつの区画を描く（2026-11-07 ⑧の2列）
+        D["plans"][k]["standby_slots"] = L["robot_standby"]["slot_rects"]
 assert len(gens) == 1, gens
 D["layout_generation_large"] = gens.pop()
 lines[idx[0]] = "const D = " + json.dumps(D, ensure_ascii=False, separators=(",", ":")) + ";"
diff --git a/tools/sim_layouts/README.md b/tools/sim_layouts/README.md
index 0db200b..3942ac1 100644
--- a/tools/sim_layouts/README.md
+++ b/tools/sim_layouts/README.md
@@ -59,6 +59,7 @@
 - 版は `large-` で始まる（large_store.py と famires_v3 の版から決まる）
 - トイレが2つ・レジが2つの店のための Unity の細かい形の規則（2026-11-02。`unity_export.py`）：トイレの入口の点は、そのトイレの部屋に接する入口から取る（前はどのトイレも1つ目の入口になっていた）。会計に立つ点と並ぶ点は1つ目のレジだけに置く（Unity はレジ1つの条件で回すため。2つ目のレジは部屋として建てるだけ）。トイレ・レジが1つの今の6店は結果が変わらないので、出力は作り直していない（版 9b8dae7ebf8c のまま）。大型店は作り直した（版 large-f4f8ad343efe → large-291ae2e65898。卓・距離・止まる位置は同じ）
 - 2026-11-06：⑨のレジのまわりが狭すぎたので、島と左の壁ぞいの席を上へ1.0m（レジの上の端から島まで 1.5m → 2.5m）、レジと下の壁ぞいの6人席を右へ1.0m（レジの左の待つ所 3.1m → 4.1m）動かした。70卓・312席のまま、受け渡し口から卓まで 4.0〜34.4m。版は large-99db3254b08b（⑧は卓・距離・止まる位置とも前と同じ）。試算は⑨の 3,066 条件だけ回し直して入れ替え、結果は iCloud の simulation/v2_9_large/results_large_p7_v3.json
+- 2026-11-07：⑧のロボットの待機点を、1列（間0.8m）から2列の互い違い6点に変えた（エイイチ 案B・(2)）。1列で間0.8mだと、ロボットの前のセンサー（中心から0.85m）が隣の待機点の台にかかり、待機場所のそばで止まり合っていたため。奥の列は今までと同じ y=11.35 に x 18.9・20.5・22.1、手前の列は y=9.5 に x 19.7・21.3・22.9（同じ列は1.6m、斜めの隣は約2.0m）。2列のあいだに、ロボットのふだんの道（1.0m）が通る1.05m をあけた（右上の卓への距離を変えないため）。待機点は `robot_standby.slot_rects` に1台ずつの区画で持つ（famires_v3.standby_slots が読む。障害物も区画ごと）。卓までの距離は 19卓が −0.6〜＋0.4m 変わり、平均 15.6 → 15.5m。版は large-b13cd179e6bf（⑨は版の名前だけ変わり、中身は同じ）。⑧の試算は 3,066 条件を回し直した
 - サイトと同じ描き方の平面図の画像は `large_plan_images.py`（試算のページの planSvg・bigPlanSvg をそのまま使う）
 
 ```
diff --git a/tools/sim_layouts/famires_v3.py b/tools/sim_layouts/famires_v3.py
index 13e86ba..ccfb00f 100644
--- a/tools/sim_layouts/famires_v3.py
+++ b/tools/sim_layouts/famires_v3.py
@@ -234,7 +234,10 @@ def table_sides(t):
 
 
 def standby_slots(sb):
-    """待機場所を1台ずつの区画に分ける（長い方の向きに slots 等分）"""
+    """待機場所を1台ずつの区画に分ける（長い方の向きに slots 等分）。
+    slot_rects があるときはそれをそのまま使う（1列に並べない店。2026-11-07 ⑧の待機点を2列の互い違いにした）"""
+    if sb.get("slot_rects"):
+        return [list(r) for r in sb["slot_rects"]]
     x0, y0, x1, y1 = sb["rect"]
     n = sb["slots"]
     if (x1 - x0) >= (y1 - y0):
@@ -248,7 +251,10 @@ def all_obstacles(L, skip=None, standby=None):
     obs += [(w["rect"], "壁:" + w["label"]) for w in L["walls"]]
     obs += [(fp(t), f"卓:{t['id']}") for i, t in enumerate(L["tables"]) if i != skip]
     if standby is None:
-        obs += [(L["robot_standby"]["rect"], "待機場所")]
+        if L["robot_standby"].get("slot_rects"):   # 区画が離れて並ぶ店は、外接する矩形でなく区画ごとに障害物にする
+            obs += [(tuple(r), "待機場所") for r in L["robot_standby"]["slot_rects"]]
+        else:
+            obs += [(L["robot_standby"]["rect"], "待機場所")]
     else:
         obs += [(tuple(r), "待機場所") for r in standby]
     return obs
@@ -958,8 +964,8 @@ def draw(ax, L, res_t, summ, conv):
     x0, y0, x1, y1 = sb["rect"]
     ax.add_patch(Rectangle((x0, y0), x1 - x0, y1 - y0, fc="#fff4e6", ec=ROBOT, lw=1.4, zorder=5))
     body = (ROBOT_MODELS[SETTINGS["model"]]["body_width"] or 0.5) / 2
-    for i in range(sb["slots"]):
-        ax.add_patch(Circle((x0 + (x1 - x0) * (i + 0.5) / sb["slots"], (y0 + y1) / 2), body, fc=ROBOT, ec="white", lw=0.8, zorder=6))
+    for r in standby_slots(sb):
+        ax.add_patch(Circle(((r[0] + r[2]) / 2, (r[1] + r[3]) / 2), body, fc=ROBOT, ec="white", lw=0.8, zorder=6))
     ax.add_patch(Circle(tuple(L["start"]), 0.12, fc="white", ec=ROBOT, lw=1.5, zorder=6))
     for kx0, ky0, kx1, ky1 in checkout_keepout(L):   # 会計の列（ロボットは通らない）
         ax.add_patch(Rectangle((kx0, ky0), kx1 - kx0, ky1 - ky0, fc="none", ec=ROBOT, lw=0.8, ls="--", hatch="///", alpha=0.5, zorder=4))
diff --git a/tools/sim_layouts/large_store.py b/tools/sim_layouts/large_store.py
index ccf00c4..4610b27 100644
--- a/tools/sim_layouts/large_store.py
+++ b/tools/sim_layouts/large_store.py
@@ -54,6 +54,18 @@ def back_block(x0, pos="center"):
     # 6台分（1台 0.8m）を横一列。真ん中と左寄りは受け渡し口の右、右寄りは左
     sx = c - 1.7 - 4.8 if pos == "right" else c + 1.7
     standby = dict(label="ロボット待機・充電", rect=[sx, FY - 0.85, sx + 4.8, FY - 0.05], slots=6)
+    if pos == "center":
+        # ⑧（奥の真ん中）：2列を互い違いに6点（2026-11-07 エイイチ 案B）。1列で間0.8mだと、ロボットの前のセンサー
+        # （中心から0.85m）が隣の待機点の台にかかって止まり合ったため。
+        # 同じ列は1.6m・斜めの隣は約2.0m あける。奥の列は今までと同じ y（FY-0.45）、手前の列は1.85m手前で、2列のあいだに
+        # ロボットのふだんの道（1.0m）が通る1.05m をあける（エイイチ (2)：右上の卓への距離を今と変えないため）。左端は受け渡し口の前（1.2m）にかからない所、右端は T56・T57 へ上がる1.2m の通路を残す所まで。
+        # 1台分の区画は今までと同じ0.8m角
+        cx = [c + 1.9, c + 3.5, c + 5.1]
+        cxf = [c + 2.7, c + 4.3, c + 5.9]
+        pts = [(x, FY - 0.45) for x in cx] + [(x, FY - 2.3) for x in cxf]
+        slots = [[round(x - 0.4, 3), round(y - 0.4, 3), round(x + 0.4, 3), round(y + 0.4, 3)] for x, y in pts]
+        standby = dict(label="ロボット待機・充電", slots=6, slot_rects=slots,
+                       rect=[min(r[0] for r in slots), min(r[1] for r in slots), max(r[2] for r in slots), max(r[3] for r in slots)])
     return rooms, dish, standby, [c, FY - 0.45]
 
 
````

### ⑧の試算を2列で計算し直したスクリプト（run_p6.py）

```python
import json, sys, os
sys.path.insert(0, "/home/claude/p2m-site/tools/serving_sim")
os.chdir("/home/claude/p2m-site/tools/serving_sim")
from multiprocessing import Pool
import haizen_sim as h
out = sys.argv[1]
cs = [c for c in h.conditions() if c["store"] == "large_p6"]
rows = []
with Pool() as p:
    for i, r in enumerate(p.imap_unordered(h.run_condition, cs, chunksize=4), 1):
        rows.append(r)
        if i % 300 == 0: print(i, len(cs), flush=True)
order = {h.key(c): i for i, c in enumerate(cs)}
rows.sort(key=lambda r: order[h.key(r)])
json.dump({"common": h.COMMON, "reps": h.REPS, "rows": rows}, open(out, "w", encoding="utf-8"), ensure_ascii=False)
print("done", len(rows))
```

### 計算し直した⑧の数字を params に入れたスクリプト（patch_params_p6.py）

```python
"""公開中の params に、⑧の待機点を2列にした店の形の site_result を入れる（2026-11-07）。
⑧（large_p6）の条件の site_result と、stores.large_p6、meta.layout_generation_large だけを入れ替える"""
import json, sys, os
sys.path.insert(0, "/home/claude/p2m-site/tools/serving_sim")
os.chdir("/home/claude/p2m-site/tools/serving_sim")
import haizen_sim as h
OUT = "/home/claude/p2m-site/public/sim/serving-robot-params.json"
P = json.load(open(OUT, encoding="utf-8"))
R = json.load(open("/tmp/claude-0/sim/results_large_p6_standby2.json", encoding="utf-8"))
assert R["common"] == json.loads(json.dumps(h.COMMON)) and R["reps"] == h.REPS
rows = {h.key(r): r for r in R["rows"]}
changed = []
for i, c in enumerate(P["unity_conditions"]):
    if c["condition"]["store"] == "large_p6":
        r = rows[h.key(c["condition"])]
        new = {m: r[m] for m in r if m not in c["condition"]}
        assert set(new) == set(c["site_result"])
        changed.append((i, c["condition"]["mode"], c["condition"]["robots"], c["condition"]["staff"], c["condition"]["arrivals_per_h"],
                        round(c["site_result"]["entry_wait_mean"], 2), round(new["entry_wait_mean"], 2),
                        round(c["site_result"]["dish_wait_mean"], 2), round(new["dish_wait_mean"], 2)))
        c["site_result"] = new
gen = {g["generation"] for g in json.load(open(h.LAYOUT_DIR_LARGE + "/summary.json", encoding="utf-8"))}
assert len(gen) == 1
P["meta"]["layout_generation_large"] = gen.pop()
st = dict(h.STORES["large_p6"])
P["stores"]["large_p6"] = json.loads(json.dumps(st))
json.dump(P, open(OUT, "w", encoding="utf-8"), ensure_ascii=False, indent=1)
print("gen", P["meta"]["layout_generation_large"], "changed", len(changed))
print("番号\t使い方\t台数\tスタッフ\t来客\t入店待ち 前→後\t料理の待ち 前→後")
for x in changed: print(*x, sep="\t")
```

### 依頼108 の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 480
---
# 依頼108：⑧の待機点を2列にした店の形で建て直し、どかされた台が待機点へ戻るように直して、⑧で比べる

依頼104・105 の報告を読んで、エイイチと決めたこと（2026-11-07）：
- ⑧の待機場所のそばの詰まりの原因は、待機点どうしの間が0.8mしかなく、前のセンサー（中心から0.85m）が隣の待機点の台にかかること。列で使う決まり（依頼105）は使う順番を変えるだけで、この間隔は変わらないので効かなかった
- そこで、サイトの⑧の店の形の待機点を、2列の互い違い6点に変えた（案B）。奥の列は y=11.35 に x 18.9・20.5・22.1、手前の列は y=9.5 に x 19.7・21.3・22.9。同じ列は1.6m、斜めの隣は約2.0m。2列のあいだに、ロボットのふだんの道（1.0m）が通る1.05m をあけた
- 依頼105 で見つかった、スタッフにどかされた台が待機点へ戻らずに通路で待ち続ける件は、Unity の作りの穴として直す。現実のロボットは、どかされたら仕事がなければ自分の待機点へ戻る
- standby_queue（列で使う）と repeat_stop は切のまま（標準にしない）
- 依頼105 の決めてほしいこと3（cs:88 の確かめ3行）は除く一覧に入れる
- 依頼104 の決めてほしいこと1（rec101b の台帳）は今は触らない

サイトは公開済み（p2m-site commit 18d23fe）。⑧の店の形の版は large-b13cd179e6bf。待機点は layout の `robot_standby.slot_rects`（1台ずつの区画）と、unity の places の RobotStandby 6点に入っている。卓までの距離は19卓が −0.6〜＋0.4m 変わったので、⑧の試算を回し直し、params の⑧の23条件の site_result と stores.large_p6・meta.layout_generation_large を入れ替えた。⑨は版の名前だけ変わり、中身は同じ。

範囲は⑧（large_p6）の配膳だけ。ほかの店・⑨・下げ膳は回さない。staff_moves_robot は入（すぐ押す）、人の先よけは切。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が cs:89、保留 0。Unity・night_runner／rec_runner が動いていない（依頼107 は mechArm なので ServiceSim には触っていないはず）。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳と除く一覧を archive/unity_ledger_v1_pre_108_20261107/ に退避（行数と md5 を報告に）
2. サイトの params と⑧⑨の店の形（public/sim/layouts/large/ と unity/）を写し直す。前の写しと比べ、params の違いが meta.layout_generation_large・stores.large_p6・⑧（large_p6）の条件の site_result だけ、⑨の店の形の違いが版の名前だけであることを確かめる
3. 除く一覧に、依頼105 の cs:88 の確かめ3行（20261107_det105／chk105a／chk105b_cs88_…）を足す（理由と決めた日 2026-11-07）

## 1. 直す・建て直す
1. **どかされた台が戻る（作りの直し。切り替えにしない）**：スタッフ（近くのスタッフ・30秒の呼び出しのどちらでも）に押されて動かされた台は、押し終わったあと、次の往復がなければ自分の待機点へ戻る。戻る途中で次の往復が来たら、そのまま往復へ行ってよい。待機点の決め方は今の作り（standby_queue 切：台ごとに決まった待機点）のまま。瞬間移動はさせない
2. ⑧を新しい店の形で建て直す。待機点は places の RobotStandby の6点を読む（1列に並んでいる前提のコードがあれば、点の位置を読む形に直す）。ロボットの地図も新しい p6_large_center_map.json を読む
3. check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- ⑨（店の形は版の名前だけ変わった）を、2台 serve 種7 で、前の同じ条件の回（依頼95 の large95・人の先よけ入で比べる）と記録が1行も違わないこと。違ったら、どかされた台が戻る直しのせいか、店の形の読み直しのせいかを分けて書く
- ⑧ 5台 serve 種0 を2回回して一致すること
- 瞬間移動 0
- ⑧の待機点に、5台がそれぞれ入れること（建てたあと、1台ずつ待機点へ行かせて確かめる。入れない待機点があれば止める）

## 3. 回す（画面なし・同時4本・⑧ serve・すぐ押す 入・人の先よけ 切）
1. ⑧5台（条件 138）× 種0〜9：**前の店の形（1列）のまま、どかされた台が戻る直しだけ**を入れた回 ＝ 10回（label sb108ret）。前の店の形の写しを別名で残して回す。残せないときは、この項目は止めて報告に書く
2. ⑧5台 × 種0〜9：**2列の店の形＋どかされた台が戻る** ＝ 10回（label sb108new）
3. ⑧2〜4台（条件 92・136・137）× 種0〜9：2列の店の形＋どかされた台が戻る ＝ 30回（label sb108new）
- 比べる相手（今のまま）は依頼101b の sm101p6on（1列・直しなし）
- 1回の上限は 90 分。止まっても回し直さない

## 4. 表と図（10種の中央値）
- 5台：sm101p6on・sb108ret・sb108new の3列。待機場所のそばの30秒以上の詰まり（依頼104 の型分け。2列にした店でも使えるように、待機点の位置は店の形から読む）の件数と秒（抜けられなかった行ったり来たりは別に書く）・ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数・料理ができてから届くまで・2分待って人が運んだ皿・往復数・全員が帰った回・往復を終えた台が待機点から1.5m以上離れて待った秒・入店待ち（参考）
- 2〜4台：sm101p6on と sb108new の2列で、同じ数
- 図：依頼104 の fig_where_by_type.png と同じ描き方で、⑧5台の3つ（sm101p6on・sb108ret・sb108new）を並べる。待機点の位置は、それぞれの店の形の位置で描く

## 5. 撮る（2 が通れば撮る）
- ⑧5台 serve 種7 を、2列の店の形＋どかされた台が戻るで1本。撮り方は依頼105 と同じ。置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sb108_20261107/new/
- 依頼101b の now（1列・直しなし）と左右に並べ、待機場所のそばに寄せて店の時刻の5倍で流すパネル付きの動画を作る。寄る5分は、now の方で待機場所のそばの止まりがいちばん長い5分。題「⑧ ロボット5台：待機点1列（間0.8m） と 2列（間1.6m）」
- 撮った回の名前が、撮らない回や前の撮影と同じにならないようにする

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sb108.txt に：始める前の確かめ、1 の直し（どのファイルのどこ）、2 の確かめ、4 の表と図の置き場所、5 の動画の名前と長さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼108 の結果

```text
# 結果：20261107_108_⑧の待機点を2列にしどかされた台が戻るようにして比べる

- 状態：完了
- 始めた時刻：2026-11-07 13:09
- 終わった時刻：2026-11-07 13:35（26分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume beeb2c85-58c9-47b8-8e98-fbda59bc55f9`

## Claude Code の報告

**やったこと**
- 始める前の確かめは、どれも依頼どおりでした。
  - 作業場所と実行ファイルは cs:89、保留 0。Unity と実行係は動いていませんでした。
  - 台帳と除く一覧を archive/unity_ledger_v1_pre_108_20261107/ に退避しました（台帳 3,510 行・md5 5c38ea64…、除く一覧 24 行・md5 d754edc5…）。
  - サイト 18d23fe を写し直して比べました。params の違いは依頼どおりの3か所だけ（⑧の条件の site_result は 23 件）、⑨の店の形の違いは版の名前だけでした。
  - 除く一覧に cs:88 の確かめ3行を足しました。
- どかされた台が戻る直しを入れました（cs:90）。
  - 往復を終えて止まっている台がスタッフに押されたとき（連れて戻されたときも）、自分の待機点から離れていれば、往復の戻りと同じ走り方で自分で戻ります。瞬間移動はしません。
  - 戻る途中で次の往復が来たら、そのまま往復へ出ます。
  - 戻りのあいだの止まりは stops.csv に入れ、1回ずつを新しい park_returns.csv に書きます。
- ⑧を2列の店の形で建て直しました（cs:91）。Unity の作りには1列前提のコードはありませんでした。1列前提だったのは型分けの台本なので、待機点の位置を店の形から読むように直しました（ep108.py）。
- 待機点に入れるかの確かめ用に、客を来させずに台を1台ずつ往復させる作りを足しました（cs:92・cs:93）。この確かめは台帳には書きません。

**結果**
- ⑨ 2台 種7 は large95 と同じになりませんでした。原因は今回の直しで、店の形の読み直しではありません。
  - 直しだけの実行ファイルと新しい店の形の実行ファイルでは、⑨は版の名前の1欄のほかは全ファイル一致しました。
  - large95 とは、直しが初めて働いた 10,597 秒より前の記録がすべて同じでした。
- ⑧5台 種0 の2回は全ファイル一致しました。瞬間移動 0、1コマの跳び 0 です。
- **⑧の待機点に5台がそれぞれ入れるかは、通りませんでした。**
  - 待機点3：台3 だけを往復させると、外へは出られましたが、戻るときに待機点5 の台の真下で行ったり来たりし、900 秒たっても戻れませんでした（ほかの4台は待機点にいるまま）。
  - 待機点2：1台だけなら戻れました（101 秒）。ただ、隣の台1 が中心から 0.23 m ずれて止まっていたときは、外へ出られませんでした。
  - 待機点1・4・5 は入れました。台4 は中心から 0.26 m で、0.25 m より 1 cm 外でした。
- 依頼の決まり（入れない待機点があれば止める・通らなければ 3 は回さない）に従い、**3 の回す（50 回）、4 の表と図、5 の撮影はやっていません。**
- 参考に種0 の1回だけ比べると、2列＋直しは止まりの合計 6,279 → 4,406 秒、60 秒動けなくなった 14 → 1 回でした。一方、30 秒の呼び出しは 41 → 104 回に増えました。
- 台帳は 3,510 → 3,515 行です（追記 5 行だけ。先頭 3,510 行の md5 は始める前と同じ）。終わったあとの md5 は 13095221…、除く一覧は 27 行です。

**変えたファイル**
- Unity
  - cs:90：ServingRobotController.cs・ServiceOps.cs・ExperimentRunner.cs・TripLogger.cs
  - cs:91：⑧⑨の店の形5つと serving-robot-params.json
  - cs:92・cs:93：HeadlessRun.cs・ExperimentRunner.cs
- 実行ファイル：Builds/headless（cs:93）。直しだけで前の店の形のもの（3-1 用）を Builds/sb108ret_cs90 として別名で残しました。
- KIOXIA
  - 退避、除く一覧に3行、台帳に5行
  - night/20261107_sb108/（台本・比べた結果・図 fig_standby_check108.png）
- 報告：claude_code_reports/20261107_sb108.txt と 20261107_sb108_files/

**決めてほしいこと**
1. 2列の店の形で待機点3 に戻れない件をどうするか。例えば、待機点の位置や列のあいだの幅を変える、5台では待機点3 のかわりに6 を使う、止まっている台を相手に行ったり来たりする動きを先に直す、このまま回す、など。決まれば 3 の回と撮影を回せます。
2. 新しい⑧の店の形で、スタッフの持ち場4 が待機点3 の右上 (23.25, 11.75) に動いていました。依頼文には無い違いです。このままでよいか。
3. 待機点に入れるかの確かめ方は私が決めました（一番近い卓へ1往復・ほかの台は待機点にいるまま・900 秒まで・中心から 0.25 m 以内）。この確かめ方でよいか。
4. 戻りのあいだの止まりを「ロボットの止まりの合計秒」に入れ、ロボットがふさがっていた時間には入れない数え方にしました。この数え方でよいか。

判定：止めた（決めてほしいことあり）
```

### 依頼108 の Claude Code の報告（20261107_sb108.txt）

```text
====================================================================
依頼108：⑧の待機点を2列にした店の形で建て直し、どかされた台が待機点へ戻るように直して、⑧で比べる
2026-11-07 13:09〜13:45　作業場所 cs:89 → cs:90（直し）→ cs:91（店の形）→ cs:92・cs:93（待機点の確かめ用）
====================================================================

結論
  ・2 の確かめのうち「⑧の待機点に5台がそれぞれ入れること」が通らなかった。依頼の決まり（入れない待機点があれば止める・
    通らなければ 3 は回さない・2 が通れば撮る）に従い、3（回す）・4（表と図）・5（撮る）はやっていない
      待機点3（奥の列の右）：台3 だけを往復させ、ほかの4台は待機点にいるままにすると、台3 は外へは出られたが、
        戻るときに手前の列の待機点5 の台の真下（21.1, 8.85）ですれ違いの動きをくり返し、900 秒（店の時刻）たっても待機点3 に戻れなかった
      待機点2（奥の列のまん中）：台2 だけを往復させたときは戻れた（101 秒）。ただ、台1 が待機点の中心から 0.23 m ずれて止まっていた
        ときは（1台ずつ順に回したとき）、台2 は待機点1 と待機点4 のあいだの通り道で行ったり来たりして、900 秒のうちに外へ出られなかった
      待機点1・4・5：戻れた
  ・止める線（瞬間移動・同じ種の2回の違い）には当たっていない。瞬間移動 0・1コマの跳び 0。⑧5台 serve 種0 の2回は全ファイル一致
  ・⑨（店の形は版の名前だけ）2台 serve 種7 は large95 と同じにはならなかった。原因は「どかされた台が戻る」直しで、店の形の読み直しではない
    （直しだけを入れて前の店の形のままの実行ファイルと、新しい店の形の実行ファイルで、⑨は版の名前の1欄のほかは全ファイル一致。
     large95 と比べると、直しが初めて働いた時刻 10,597 秒より前はすべて同じ）
  ・どかされた台が戻る直しは入れた（cs:90）。⑧5台 種0 では 67 回戻り、65 回は待機点に着き、2 回は戻る途中で次の往復へ出た


--------------------------------------------------------------------
0. 始める前の確かめ（13:09〜13:16）
--------------------------------------------------------------------
  1. 作業場所 cs:89 - head・保留 0（cm status）。Builds/headless は build_id cs89_20261107_1003・unity_cs ServiceSim/cs:89・pending_changes 空
     Unity エディタ・night_runner・rec_runner は動いていなかった（動いていたのは Unity Hub と、この依頼の claude だけ）。
     KIOXIA マウント済み／unity_ledger_v1.lock なし
     退避：archive/unity_ledger_v1_pre_108_20261107/
       unity_ledger_v1.csv　3,510 行・md5 5c38ea6493dfe5c79db00dfbf463e6c1（依頼105 の終わりと同じ）
       unity_ledger_v1_excluded_runs.csv　24 行・md5 d754edc5add03259ab8050e43d200322（依頼105 の終わりと同じ）
  2. サイトの写し：p2m-site 18d23fe（main と同じ）から gh api で取った。置き場所 unity/site_copy_large-b13cd179e6bf_sb108/
       params.json（md5 2e296629dcf75070ab1010311e6e63d7。main と同じ）・layouts_large/summary.json・layouts_large/unity/ の4つ・
       layouts_large/layout/（p6・p7 の layout。robot_standby.slot_rects を見るため。Unity は読まない）・README.txt
     前の写し（cs:89 の Unity の写し＝site_copy_large-99db3254b08b_large95 と同じ md5）と JSON を中まで比べた
       params：違いは meta.layout_generation_large（large-99db3254b08b → large-b13cd179e6bf）・stores.large_p6（dist_list 19 卓・dist_m の最大 22.0 → 21.4）・
         unity_conditions の site_result が 23 件。23 件はどれも large_p6 の条件（large_p6 の条件はちょうど 23 件）。condition の中身・ほかの欄は同じ → 依頼どおり
       ⑨ p7_large_b.json・p7_large_b_map.json：違いは meta.generation の1行だけ → 依頼どおり
       summary.json：generation 2か所と⑧の robot_dist_mean 15.6 → 15.5・robot_dist_max 21.97 → 21.38
       ⑧ p6_large_center_map.json：generation の1行だけ（地図のマスは同じ）
       ⑧ p6_large_center.json：待機点6つ（依頼文の座標どおり。奥の列 y 11.35 に x 18.9・20.5・22.1、手前の列 y 9.5 に x 19.7・21.3・22.9）・
         通路2本の end_dist・道順（routes）・generation。それと、依頼文に書かれていない違いが1つあった：
         ★ スタッフの持ち場 4（StaffPost）が (10.75, 12.75) → (23.25, 11.75) に動いていた（待機点3 の右上、約 1.2 m）。
           この持ち場は⑧の回で使われている（run_info の staff_posts.posts_used 4）。下書きの 93e2d10 から変わっている。
           公開済みの店の形なのでそのまま使った（決めてほしいこと 2）
  3. 除く一覧に3行足した（理由「依頼105 で cs:88（戻る台の待機点の決め方を cs:89 で直す前の作り）の実行ファイルで回した確かめの回。
     依頼105 の決めてほしいこと 3 でエイイチが除くと決めた」・決めた日 2026-11-07）
       20261107_det105_cs88_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove
       20261107_chk105a_cs88_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove_sq_rstop
       20261107_chk105b_cs88_large_p6_r5_s0_passon_sbret_ek_post_rescue_smove_sq_rstop
     24 行 → 27 行・md5 dcaed1a6000e1426600e4d7a03058ab0


--------------------------------------------------------------------
1. 直す・建て直す
--------------------------------------------------------------------
1-1. どかされた台が待機点へ戻る（作りの直し・切り替えなし。cs:90）
  穴の中身：往復を終えて止まっている台（Idle／Done）は、スタッフに押されると「動かした所で次の仕事を待つ」作りだった
    （ServingRobotController.FinishRescueMove）。ServiceOps.ParkIdleRobots は毎コマ GoStandby を呼ぶが、GoStandby は NavMesh の行き先を
    入れるだけで、往復の外の台は Update で動かさないため、待機点へは戻っていなかった
  直し（Assets/ServiceSim/Robot/ServingRobotController.cs）
    ・EndRescuePush（2717 行め）：押す前に往復の外で止まっていた台なら、押し終わって助けの行を閉じたあと TryBeginParkReturn を呼ぶ
      （近くのスタッフ・30 秒の呼び出しのどちらも、この押しを通る）
    ・FinishEscort（3036 行め）：連れて戻された台は、そこで往復が終わったあと、連れて戻された所が自分の待機点でなければ同じく戻る
    ・「どかされた台が待機点へ戻る」の節（2720〜2850 行め）
        TryBeginParkReturn：待機場所へ戻るが入の回で、自分の待機点（SetStandbyPoint で決まった所＝standby_queue 切では台 i → 待機点 i。決め方は変えていない）
          から arriveRadius より離れていれば、往復の戻り（段「受け渡し口へ」・行き先は自分の待機点）と同じ走り方で自分で走って戻る。
          前のセンサー・見張り・30 秒の呼び出し・押される・連れて戻すも往復と同じに働く。瞬間移動はしない。地図で道が引けなければ戻らない（数える）
        FinishParkReturn（Finish の頭 3575 行めから）：着いた・連れて戻された・取りやめのとき。往復ではないので TripCompleted（trips.csv）は出さない
        EndParkReturn：開いている止まりを閉じて ParkReturnEnded を知らせる
    ・StartRunCore（869 行め）：戻る途中で次の往復が来たら、そこで戻りを終えて、いまいる所から往復を始める
    ・BeginRun の数と走りの中身の初期化を ResetRunState（894 行め）に分けた（中身・順番は同じ。戻り始めにも使う）
  Assets/ServiceSim/Service/ServiceOps.cs
    ・AssignRobots（3663 行め）：戻る途中の台にも、走っていて（段「受け渡し口へ」）、助け・近くのスタッフの動かしにかかわっていなければ次の往復を渡す
    ・SampleRobotUtil（1515 行め）：戻っているあいだは robot_util の「ふさがっている」に数えない（往復の外）
  記録（Assets/ServiceSim/Experiment/ExperimentRunner.cs・TripLogger.cs）
    ・戻りのあいだの止まりは stops.csv に trip_id 0 で入れる（往復の止まりと同じ欄。往復の id は 1 から）
    ・park_returns.csv（新しく足した。どの回にも書く。無い回はヘッダーだけ）：1回の戻り1行（始めた時刻・終わった時刻・どこから・自分の待機点・
      走った距離・止まり・終わったときの待機点までの距離・どう終わったか＝着いた／次の往復へ／連れて戻された／取りやめ／回の終わり）
    ・summary.json の park_return（1回でも戻り始めた・道が引けなかった回だけ書く）：begun・arrived・next_trip・escorted・aborted・run_end・no_path・return_s・stopped_s・stops
    ・robot_track.csv の段は、戻っているあいだも今までの戻りと同じ「受け渡し口へ」（依頼104 の型分けで「戻る台」に入る）
  中身の数：⑧5台 serve 種0（chk108a）で 67 回戻り始め、着いた 65・次の往復へ 2・道が引けない 0。戻っていた秒の合計 365 秒・うち止まり 285 秒・止まり 133 回
    ⑨2台 serve 種7（det108）で 9 回（9 回とも着いた。動かされた距離は 0.3〜0.8 m で、戻りの 291 秒のうち 284 秒は止まっていた）

1-2. ⑧を新しい店の形で建て直す（cs:91）
  サイトの unity/ の4ファイルと summary.json を Assets/ServiceSim/Store/Layouts/large/ に、params を Assets/ServiceSim/Experiment/serving-robot-params.json に写した
  （md5 は 0 章の写しと同じ）。店は回すたびに JSON から建てるので（依頼95 の⑨の直しと同じ）、写せば新しい店の形になる。ロボットの地図も新しい p6_large_center_map.json を読む
  1列に並んでいる前提のコード：Unity の作りには無かった（待機点はどこも店の形の RobotStandby の点を読んでいる：置き始め ExperimentRunner・
    台ごとの待機点 ServiceOps.RegisterRobot／ParkIdleRobots・置き直し PickResetPoint・道の確かめ TrafficRules.CheckReach／MapPlanCheck）。
    1列の前提があったのは型分けの台本（依頼104 の ep104.py の待機場所のそばの四角 BOX と「並びの中」の端 ROW_X・ROW_Y が数で書いてあった）なので、
    依頼108 の ep108.py・common108.py で待機点の rect から決めるように直した（1列の店の形では依頼104 と同じ数になることを確かめた。新しい店の形では
    BOX x 17.8〜24.3・y 8.15〜12.6、ROW_X 18.5、ROW_Y 8.9）

1-3. check-in と実行ファイル（cm ci でファイルを1つずつ指定。保留 0）
  cs:90：ServingRobotController.cs・ServiceOps.cs・ExperimentRunner.cs・TripLogger.cs（直しだけ。店の形・params は前のまま）
    → 実行ファイルを作り、Builds/sb108ret_cs90 に写して残した（build_id cs90_20261107_1320・実行ファイル md5 c9e0cf6451549a3196201cd87ca2d5ea）。
      3-1 の「前の店の形（1列）のまま、直しだけ」はこの実行ファイルで回すつもりだった（前の店の形の写しを別名で残す方法として。0 章の前の写しも残っている）
  cs:91：店の形5ファイル・params（新しい店の形）
  cs:92：待機点に入れるかの確かめ（-ssStandbyCheck on のときだけ。HeadlessRun.cs・ExperimentRunner.cs の UpdateStandbyCheck。台帳には書かない・フォルダ名に _sbchk）
  cs:93：その確かめで往復させる台を1台にする（-ssStandbyCheckOnly 台の番号）
  いまの Builds/headless：build_id cs93_20261107_1331・unity_cs ServiceSim/cs:93・pending_changes 空・Build Finished, Result: Success
  cs:92 のふだんの回（chk108c：⑧5台 serve 種0）は cs:91 の chk108a と全ファイル一致（確かめ用の作りはふだんの回を変えていない）


--------------------------------------------------------------------
2. 確かめ
--------------------------------------------------------------------
  比べ方：cmp108.py（依頼105 の cmp105.py の写し・md5 同じ）。pre108.py は、ある時刻より前の行だけを比べる台本（新しく書いた）
  (1) ⑨ 2台 serve 種7 人の先よけ入（すぐ押す 切。large95 と同じ指定）
      cs:91（det108）と large95（20261106_large95_cs81_…_pyield）：同じにならなかった（conditions.json・requeues.csv だけ同じ）
      分け方：
        ・cs:90（直しだけ・前の店の形。p7ret108）と cs:91（直し＋新しい店の形。det108）は、run_info.json の map_generation（版の名前）のほかは全ファイル一致
          → 店の形の読み直しによる違いは無い
        ・large95 と cs:90 の違いは、直しが初めて働いた時刻（台1 が 30 秒の呼び出しで押されたあと戻り始めた 10,597.25 秒）より前はすべて同じ
          （robot_track 4,240 行・stops 1,068 行・trips 118 行・timeline 177 行・contacts・people_jams・rescues・yields・yield_ahead・give_ups・nowarp_jams。
           groups はその時刻より前に帰り終えた 78 組が同じ）。最初の違いは 10,600 秒の robot_track（台1 が待機点へ戻り始めている）
          → 違いは、どかされた台が戻る直しのせい
        ・瞬間移動 0・1コマの跳び 0・全員が帰った
  (2) ⑧5台 serve 種0（すぐ押す 入・人の先よけ 切）を2回（chk108a・chk108b。cs:91）→ 19 ファイルとも一致（park_returns.csv も同じ）
  (3) 瞬間移動 0・1コマの跳び 0（p7ret108・det108・chk108a・chk108b・chk108c のどれも）
  (4) ⑧の待機点に5台がそれぞれ入れるか → 通らなかった
      確かめ方（cs:92・cs:93 の確かめ用の作り）：⑧5台の条件で店を建て（台 i は待機点 i に置いて始める）、客は来させず（スタッフはふだんどおり）、
        台を1台ずつ、受け渡し口に一番近い卓（T27）へ1往復させる（待機点 → 受け渡し口 → 卓 → 自分の待機点。走り方・止まる決まり・助けはふだんと同じ）。
        往復が終わったとき自分の待機点から arriveRadius（0.25 m）以内にいれば「入れた」。1台あたり店の時刻で 900 秒まで待つ
      ・地図の上で道を引くだけ（エディタの「⑧⑨ 確かめ A」。台を置かない）：受け渡し口から待機点1〜6 のどれにも道が引けた
        （奥の列 1〜3 は「狭い道だけ」のマス、手前の列 4〜6 は「ふだんの道」のマス）
      ・台を1台だけ往復させる（ほかの4台は待機点にいるまま。sbchk1〜5）
          台	待機点	結果	往復の秒	止まり（回／秒）	待機点まで
          1	1 (18.9, 11.35)	入れた	68.9	6／12.1	0.230 m
          2	2 (20.5, 11.35)	入れた	101.1	7／16.3	0.219 m
          3	3 (22.1, 11.35)	900 秒で戻れず	900.0	214／669.0（60 秒動けなくなった 1）	2.762 m
          4	4 (19.7, 9.5)	往復は終わった（台が着いたと判断）	82.9	3／5.1	0.260 m（0.25 より 1 cm 外）
          5	5 (21.3, 9.5)	入れた	69.7	2／5.1	0.242 m
          台3：出るのは出られた（待機点のすぐ左で約 40 秒止まった）。戻るとき、地図の道が手前の列の下から上がる向きになり、待機点5 の台の真下（21.1, 8.85）で、
            その台をすれ違う相手とみてすれ違いの動きと後ずさりをくり返し、そのまま 900 秒たった（依頼104 の D「1台が行ったり来たり」と同じ形）
          台4：往復は「着いた」で終わっている（着いたかは道の終わりの点で見ているため）。待機点の中心から 0.26 m で、入れたとみてよいと思う
      ・1台ずつ順に（台1→台5。前の台が終わってから次。sbchk）
          台2：台1 が戻って待機点1 の中心から左へ 0.23 m ずれて止まったあと、待機点1 と待機点4 の台のあいだの通り道（19.5, 10.57）で
            行ったり来たりして 900 秒のうちに出られなかった（止まりとしては 66.7 秒しか数えられず、30 秒の呼び出しにならなかった）
          台3：台2 が通り道に残っていたため、これも 900 秒のうちに戻れなかった（台3 の結果としては見ていない。上の1台だけの確かめで見た）
          台1・4・5：入れた。台2・3 は、ほかの台が動いたあと、記録の終わりまでには自分の待機点に入っていた
      図：night/20261107_sb108/fig_standby_check108.png（報告の置き場所の 20261107_sb108_files/ にも写した）
      ふだんの回では：chk108a（種0）は全員が帰り、待機場所のそばの止まりは 1列（sm101p6on 種0）より少なかった（下の参考）が、
        30 秒の呼び出しは 41 → 104 回に増えた。ほかの台が動くので、確かめのような長い詰まりにはならずに解けていた
  → (4) が通らなかったので、3 は回していない


--------------------------------------------------------------------
3〜5. 回す・表と図・撮る
--------------------------------------------------------------------
  回していない（2 の (4) が通らなかったため。依頼の「通らなければ 3 は回さない」「2 が通れば撮る」に従った）
  用意してあるもの（このあと回すときに使える）
    ・3-1（sb108ret）用の実行ファイル Builds/sb108ret_cs90（直し＋前の1列の店の形・前の params）
    ・型分けの台本 ep108.py・common108.py（店の形の置き場所を LAYOUT_DIR で選ぶ。前の店の形の写しは night/20261107_sb108/layout_1row_99db/）
  参考（種0 の1回だけ。10 種の中央値ではない）
    項目	1列・直しなし（sm101p6on 種0・cs:87）	2列＋直し（chk108a・cs:91）
    ロボットの止まりの合計秒	6,279	4,406
    待機場所のそばの止まり（秒）	2,759	2,234
    待機場所のそばの 30 秒以上のロボット同士の詰まり（件／秒）	21／1,220	13／558
    60 秒動けなくなった（回）	14	1
    30 秒の呼び出し（回）	41	104
    スタッフが動かした（回）	105	108
    往復数	209	218
    料理ができてから届くまで（分）	1.52	1.38
    入店待ち（分・参考）	1.86	1.84
    全員が帰った	はい	はい


--------------------------------------------------------------------
台帳
--------------------------------------------------------------------
  3,510 行（始める前）→ 3,515 行（追記 5 行だけ。どれも completed）
    p7ret108（cs:90）・det108・chk108a・chk108b（cs:91）・chk108c（cs:92）
  先頭 3,510 行の md5 は 5c38ea6493dfe5c79db00dfbf463e6c1（始める前と同じ）。終わったあとの md5 13095221b8872182bf9f0955807256ae。鍵ファイルは残っていない
  待機点の確かめ（sbchk108・sbchk1081〜1085）は台帳に書いていない（回ではないため。フォルダは KIOXIA に残した）
  除く一覧：24 行 → 27 行（0 章の 3）・md5 dcaed1a6000e1426600e4d7a03058ab0


--------------------------------------------------------------------
記録の置き場所
--------------------------------------------------------------------
  KIOXIA night/20261107_sb108/：build_cs90〜93.log・compile1〜2.log・checkA_large.log（確かめ A）・q_*.json・run_chk108.sh・runner_*.txt・
    cmp108.py・pre108.py・cmp_*.txt・pre_p7ret108_vs_large95.txt・sbchk108*.log・standby_check_all.txt・figchk108.py・fig_standby_check108.png・
    common108.py・ep108.py・ep_ref_*.csv・layout_1row_99db/（前の⑧の店の形の写し）
    （置いた台本に 0 の字が入っていないことを確かめた）
  night/20261107_p7ret108・det108・chk108a・chk108b・chk108c（実行係の記録）・night/20261107_p7ret108_dry（名前を確かめるための、から回し）
  回のフォルダ：20261107_p7ret108_cs90_…・20261107_{det108|chk108a|chk108b}_cs91_…・20261107_chk108c_cs92_…・
    20261107_sbchk108_cs92_…_sbchk・20261107_sbchk108_cs93_…_sbchk1〜5
  サイトの写し：unity/site_copy_large-b13cd179e6bf_sb108/


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  Unity：cs:90 Robot/ServingRobotController.cs・Service/ServiceOps.cs・Experiment/ExperimentRunner.cs・Experiment/TripLogger.cs
         cs:91 Store/Layouts/large/p6_large_center.json・p6_large_center_map.json・p7_large_b.json・p7_large_b_map.json・summary.json・Experiment/serving-robot-params.json
         cs:92・cs:93 Experiment/HeadlessRun.cs・Experiment/ExperimentRunner.cs
  Builds/headless（cs:93 に作り直し）・Builds/sb108ret_cs90（新しく足した写し）
  KIOXIA：archive/unity_ledger_v1_pre_108_20261107/・除く一覧に3行・台帳への追記 5 行・上の置き場所のもの
  このファイルと 20261107_sb108_files/fig_standby_check108.png
  変えていない：サイト（何も上げていない）・tools/ の台本・rec101b の台帳の行・standby_queue／repeat_stop（切のまま）


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. 2列の店の形で、待機点3 に戻れない（台3 だけ往復させると、手前の列の待機点5 の台の真下で行ったり来たりして 900 秒たった）。
     待機点2 も、隣の台が少しずれて止まっていると外へ出られないことがあった。どうするか。例：
       ・待機点の位置・2列のあいだの幅を変える（サイトの店の形の直し）
       ・台の番号と待機点の組み合わせを変える（5台なら奥の列の右端 3 を使わず 6 を使う、など）
       ・止まっている台をすれ違う相手とみて行ったり来たりする動き（依頼104 の D）を先に直す
       ・このまま 3 を回す（ふだんの回では、ほかの台が動くので解けていた。種0 は全員が帰った）
     決まったら、3-1（sb108ret・Builds/sb108ret_cs90）・3-2・3-3 と撮影を回せる
  2. 新しい⑧の店の形で、スタッフの持ち場 4 が (10.75, 12.75) から待機点3 の右上 (23.25, 11.75) に動いていた（依頼文に無い違い）。
     サイトの作り直しで自動で動いたものか、決めて動かしたものか。比べる回の結果にかかわるので、このままでよいか
  3. 待機点に入れるかの確かめ（cs:92・93）の決め方は私が置いた（受け渡し口に一番近い卓へ1往復・ほかの台は待機点にいるまま・900 秒まで・中心から 0.25 m 以内）。
     この決め方でよいか
  4. 戻りのあいだの止まりを stops.csv（trip_id 0）に入れ、ロボットの止まりの合計秒に入るようにした。robot_util には入れていない。この数え方でよいか

判定：止めた（決めてほしいことあり）
```

### 2列の待機点に1台ずつ戻れるかの確かめ

【画像】LOG456_06_two_rows_check.png ⑧の2列の待機点に1台ずつ戻れるかの確かめ。左は1台ずつ順に往復させたもの、右は台3だけを往復させたもの。台3は待機点5の台の真下で行ったり来たりし、900秒のうちに待機点3へ戻れなかった

2列では、奥の列の待機点3へ、手前の列の台のあいだを抜けて戻れませんでした。依頼の決まりどおり、本番の50回と撮影は回していません。この依頼で入れた、スタッフにどかされた台が自分の待機点へ戻る直し（cs:90）は、このあとも使っています。依頼105 で、どかされた台が待機点へ戻らず長く止まっていたためです。

- ねらい：待機点どうしの間を広げ、隣の台がセンサーに入らないようにする
- 変わったこと：待機点を2列の互い違いにした
- 見込める効果：見込みは外れた。奥の列に戻れない待機点が出て、卓までの道も延びた


## 作業ログ ― 間は1.1mまでしか広げられず、入り方の決まりで直すことにした

2列をやめるにあたって、直し方を1枚の図で比べ直しました。

### 待機点の直し方の4つの絵

【画像】LOG456_07_fix_options.png ⑧の待機点の直し方を上から見た図。今（間0.8m・斜めに寄ると隣がセンサーに入る）、(1) 1列・間1.1m・5点（斜めに寄ると、まだ隣に届くことがある）、(2) 間0.8m のまま真下まで来てからまっすぐ入る、(3) 1列・間1.2m・4点＋受け渡し口の左に1点（スタッフの持ち場を動かす）

1列で間を広げられるのは1.1m までです。左は受け渡し口の前の空けておく所、右は右の卓へ上がる道があるためです。1.1m では、斜めに寄るとまだ隣の台に届くことがあります。

(2) は、店の形を今のまま（間0.8m）にして、ロボットの入り方の決まりを足す案です。戻る台は、自分の待機点の真下（壁と反対の向きへ1.0m 下がった点）まで来て、向きを合わせてからまっすぐ入ります。まっすぐ入れば、前のセンサーの先には自分の待機点しかなく、両隣の台は横にいるので入りません。(2) を選びました。

店の形とサイトの⑧の試算は、2列にする前（large-99db3254b08b）に戻しました。

### 図を描いたスクリプト（fig_fix_options.py）

```python
import numpy as np, matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt, matplotlib.patches as mp
matplotlib.rcParams['font.family']='Noto Sans CJK JP'
R=0.25; SENS=0.85; HALF=35
def robot(ax,x,y,col='white',ec='#333',lab=None,z=5):
    ax.add_patch(mp.Circle((x,y),R,fc=col,ec=ec,lw=1.4,zorder=z))
    if lab: ax.text(x,y,lab,ha='center',va='center',fontsize=9,zorder=z+1)
def fan(ax,x,y,deg,col):
    ax.add_patch(mp.Wedge((x,y),SENS,deg-HALF,deg+HALF,fc=col,ec='none',alpha=0.35,zorder=3))
def base(ax,title,verdict,vcol):
    ax.add_patch(mp.Rectangle((13.0,11.8),11.6,0.6,fc='#cfcfcf',ec='none')); ax.text(15.0,12.1,'パントリー（壁）',fontsize=10,color='#555',va='center')
    ax.add_patch(mp.Rectangle((15.5,10.6),3.0,1.2,fc='none',ec='#d23',hatch='///',lw=0.8,alpha=0.6))
    ax.plot(17.0,11.45,'*',ms=15,color='#d23',zorder=6); ax.text(17.0,10.45,'受け渡し口の前\n（あけておく所）',ha='center',va='top',fontsize=9,color='#d23')
    ax.add_patch(mp.Rectangle((24.7,10.2),0.9,1.6,fc='#e9dcc6',ec='#a08050')); ax.text(25.15,11.0,'T57',ha='center',va='center',fontsize=9,color='#7a5a2a')
    ax.add_patch(mp.Rectangle((23.7,9.0),1.0,2.8,fc='#2a9a2a',ec='none',alpha=0.12)); ax.text(24.2,9.15,'右の卓へ\n上がる道',ha='center',va='bottom',fontsize=8,color='#2a7a2a')
    ax.set_xlim(12.8,25.8); ax.set_ylim(8.9,12.5); ax.set_aspect('equal'); ax.set_xticks([]); ax.set_yticks([])
    ax.set_title(title,loc='left',fontsize=14,fontweight='bold')
    ax.text(1.0,1.02,verdict,transform=ax.transAxes,ha='right',va='bottom',fontsize=11.5,color=vcol,fontweight='bold',bbox=dict(fc='white',ec=vcol,lw=1.5))
def slots(ax,xs,y=11.35,occ=None):
    for i,x in enumerate(xs):
        ax.add_patch(mp.Rectangle((x-0.4,y-0.4),0.8,0.8,fc='#eef3ff',ec='#1f4fb0',ls='--',lw=1,zorder=2))
        if occ is None or i in occ: robot(ax,x,y,lab=str(i+1))
def gap(ax,x1,x2,y,txt):
    ax.annotate('',xy=(x1,y),xytext=(x2,y),arrowprops=dict(arrowstyle='<->',color='#333',lw=1))
    ax.text((x1+x2)/2,y+0.06,txt,ha='center',va='bottom',fontsize=9)
staff=[(13.75,11.25),(15.75,11.25)]
fig,axs=plt.subplots(4,1,figsize=(11,15.5),dpi=130)
ax=axs[0]; xs=[19.1+0.8*i for i in range(6)]; base(ax,'今：1列・間0.8m・6点','× 隣の台がセンサーに入って止まる','#d23')
slots(ax,xs,occ=[0,1,3,4]); gap(ax,xs[3],xs[4],11.75,'0.8m')
rx,ry=20.45,10.9; ax.annotate('',xy=(xs[2],11.2),xytext=(19.0,9.3),arrowprops=dict(arrowstyle='->',color='#e08000',lw=2,connectionstyle='arc3,rad=-0.15'))
fan(ax,rx,ry,120,'#d23'); robot(ax,rx,ry,col='#ffe2b3',ec='#e08000',lab='3')
ax.text(18.0,9.3,'戻ってくる台3は斜めに寄るので、\n隣の台2がセンサー（薄い扇）に入る',fontsize=10,va='bottom',ha='right')
ax=axs[1]; xs=[18.9+1.1*i for i in range(5)]; base(ax,'(1) 1列・間1.1m・5点','△ 斜めに寄ると、まだ隣に届くことがある','#e08000')
slots(ax,xs,occ=[0,1,3,4]); gap(ax,xs[3],xs[4],11.75,'1.1m')
rx,ry=xs[2]-0.35,10.88; ax.annotate('',xy=(xs[2],11.2),xytext=(19.3,9.3),arrowprops=dict(arrowstyle='->',color='#e08000',lw=2,connectionstyle='arc3,rad=-0.15'))
fan(ax,rx,ry,120,'#e08000'); robot(ax,rx,ry,col='#ffe2b3',ec='#e08000',lab='3')
ax.text(18.6,9.3,'これより広い間は取れない\n（左の赤い所と右の緑の道があるため）',fontsize=10,va='bottom',ha='right')
ax=axs[2]; xs=[19.1+0.8*i for i in range(6)]; base(ax,'(2) 間0.8mのまま、真下まで来てからまっすぐ入る','○ まっすぐ入るので、横の台がセンサーに入らない','#2a8a2a')
slots(ax,xs,occ=[0,1,3,4]); gap(ax,xs[3],xs[4],11.75,'0.8m')
ax.plot([19.0,xs[2]],[9.3,10.0],color='#e08000',lw=2); ax.annotate('',xy=(xs[2],11.15),xytext=(xs[2],10.0),arrowprops=dict(arrowstyle='->',color='#e08000',lw=2))
ax.plot(xs[2],10.0,'o',ms=6,color='#e08000'); ax.text(xs[2]+0.15,9.95,'入る点（待機点の真下）',fontsize=9,va='top',color='#b06000')
fan(ax,xs[2],10.45,90,'#2a8a2a'); robot(ax,xs[2],10.45,col='#ffe2b3',ec='#e08000',lab='3')
ax.text(18.6,9.3,'店の形は今と同じ。\nロボットの入り方の決まりを足す',fontsize=10,va='bottom',ha='right')
ax=axs[3]; xs=[19.0+1.2*i for i in range(4)]; base(ax,'(3) 1列・間1.2m・4点 ＋ 受け渡し口の左に1点','○ 間は広いが、スタッフの持ち場を動かす','#2a8a2a')
slots(ax,xs); gap(ax,xs[2],xs[3],11.75,'1.2m')
slots(ax,[14.9],occ=[]); robot(ax,14.9,11.35,lab='5')
for (x,y) in staff: ax.add_patch(mp.Rectangle((x-0.15,y-0.15),0.3,0.3,fc='#2a6fd6',ec='none',zorder=6,alpha=0.45))
ax.text(14.2,10.55,'青い四角＝今のスタッフの持ち場\n（重なる所は動かす）',fontsize=9,color='#2a6fd6',ha='center',va='top')
fig.suptitle('⑧ ロボットの待機点の直し方（上から見た図）\n白い丸＝待っているロボット、だいだい＝戻ってくるロボット、薄い扇＝前のセンサー（中心から0.85m。形は簡単にした絵）',x=0.02,ha='left',fontsize=12)
plt.tight_layout(rect=(0,0,1,0.955)); plt.savefig('standby_fix_options.png',facecolor='white')
```

### 1列に戻し、まっすぐ入る決まりを足した差分（p2m-site commit de01a0e）

````diff
commit de01a0ed250eeb3c6bb94397760dd53d3dbdbb71
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 7 15:18:13 2026 +0900

    ⑧の待機点を元の1列に戻し、待機点へまっすぐ入る決まり（standby_straight_entry・既定は切）を足す

2列の形（18d23fe）は Unity で奥の列へ台が戻れなかったため、2026-11-07 エイイチの (2) で、店の形は元の1列（large-99db3254b08b）に戻し、
⑧の試算もページ・params とも元の値に戻した。止まり合いは入り方の決まりで直す。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LevEXUFMhag721ag4sz8Jz


 public/sim/layouts/large/p6_large_center.json      |    50 +-
 .../layouts/large/p6_large_center_analysis.json    |    92 +-
 public/sim/layouts/large/p7_large_b.json           |     2 +-
 public/sim/layouts/large/p7_large_b_analysis.json  |     2 +-
 public/sim/layouts/large/summary.json              |     8 +-
 .../sim/layouts/large/unity/p6_large_center.json   | 14650 +++++++++----------
 .../layouts/large/unity/p6_large_center_map.json   |     2 +-
 public/sim/layouts/large/unity/p7_large_b.json     |     2 +-
 public/sim/layouts/large/unity/p7_large_b_map.json |     2 +-
 public/sim/serving-robot-params.json               |   874 +-
 public/sim/serving-robot.html                      |     5 +-
 tools/serving_sim/build_page_large.py              |     2 -
 tools/sim_layouts/README.md                        |     2 +-
 tools/sim_layouts/famires_v3.py                    |    14 +-
 tools/sim_layouts/large_store.py                   |    12 -
 15 files changed, 7521 insertions(+), 8198 deletions(-)
commit de01a0ed250eeb3c6bb94397760dd53d3dbdbb71
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 7 15:18:13 2026 +0900

    ⑧の待機点を元の1列に戻し、待機点へまっすぐ入る決まり（standby_straight_entry・既定は切）を足す
    
    2列の形（18d23fe）は Unity で奥の列へ台が戻れなかったため、2026-11-07 エイイチの (2) で、店の形は元の1列（large-99db3254b08b）に戻し、
    ⑧の試算もページ・params とも元の値に戻した。止まり合いは入り方の決まりで直す。
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01LevEXUFMhag721ag4sz8Jz

diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index 3d1fb7e..153328e 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -5,7 +5,7 @@
   "reps": 40,
   "ng_min": 10,
   "layout_generation": "9b8dae7ebf8c",
-  "layout_generation_large": "large-b13cd179e6bf",
+  "layout_generation_large": "large-99db3254b08b",
   "layout_dirs": {
    "fam_": "public/sim/layouts/（unity/ に建てるための形）",
    "large_": "public/sim/layouts/large/（unity/ に建てるための形。2026-11-02 に足した大型店⑧⑨）"
@@ -430,6 +430,12 @@
    "value": false,
    "role": "site_rule",
    "note": "（切）待機点を台ごとに決めず、列で使う（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。店の形の RobotStandby は、受け渡し口に近い順に1番から並べる。次の往復に出るのは、待機している台のうち受け渡し口に一番近い台。往復を終えて戻る台は、待機している台より受け渡し口に近い側の空いている待機点のうち、一番遠い所（いる台のすぐ手前）へ入る。待機している台がいなければ一番遠い待機点へ入る。こうすると、出る台も戻る台も、待機している台の前を通らない。店の形（待機点の位置と数）は変えない。試算の数字は変わらない"
+  },
+  "standby_straight_entry": {
+   "value": false,
+   "role": "site_rule",
+   "entry_back_m": 1.0,
+   "note": "（切）待機点へ戻るロボットは、待機点の真正面（壁から離れる向き）に entry_back_m（1.0m）下がった「入る点」まで来てから、待機点へまっすぐ入る。出るときも、入る点までまっすぐ下がってから向きを変える（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。待機点の間が0.8mの1列では、斜めに寄ると前のセンサー（中心から0.85m）に隣の待機点の台が入って止まり合っていたため。待機点の間を広げる案は、受け渡し口の前と右の卓へ上がる道があって⑧では1.1mまでしか取れず、2列の案は手前の列のすき間で台が戻れなかったので、店の形は変えず、入り方の決まりで直す。入る点がほかの台・人でふさがっていたら、入る点の手前で待つ。店の形と試算の数字は変わらない"
   }
  },
  "stores": {
@@ -1029,7 +1035,7 @@
    "tables": 70,
    "dist_m": [
     6.9,
-    21.4
+    22.0
    ],
    "peak_min": 120,
    "first_dishes": [
@@ -1123,32 +1129,32 @@
     19.07,
     19.37,
     21.22,
-    21.38,
-    19.53,
-    17.68,
-    17.08,
+    21.97,
+    20.12,
+    18.27,
+    17.66,
     15.47,
     17.32,
-    17.18,
-    15.33,
-    13.48,
+    17.77,
+    15.92,
+    14.07,
     19.43,
     21.28,
-    21.14,
-    19.29,
-    17.44,
-    9.81,
-    9.04,
-    8.35,
+    21.73,
+    19.88,
+    18.03,
+    9.46,
+    8.69,
+    7.93,
     7.23,
-    7.44,
+    7.66,
     15.38,
     17.23,
-    17.09,
-    15.24,
-    13.39,
-    16.38,
-    17.15,
+    17.68,
+    15.83,
+    13.98,
+    16.97,
+    17.74,
     10.52,
     11.28,
     12.27,
@@ -4454,13 +4460,13 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.5612,
-    "dish_wait_p90": 1.1555,
-    "cold_share": 0.0002,
-    "seat_wait_mean": 7.7119,
-    "turn_mean": 3.6546,
-    "walk_km_per_staff": 4.3528,
-    "staff_util": 0.671,
+    "dish_wait_mean": 0.5945,
+    "dish_wait_p90": 1.2434,
+    "cold_share": 0.0001,
+    "seat_wait_mean": 7.0762,
+    "turn_mean": 3.8446,
+    "walk_km_per_staff": 4.3531,
+    "staff_util": 0.6728,
     "robot_util": 0.0,
     "robot_share": 0.0,
     "robot_bus_share": 0.0,
@@ -4468,13 +4474,13 @@
     "rescues": 0,
     "pauses": 0,
     "fragile_robot": 0,
-    "groups": 138.975,
-    "entry_wait_mean": 8.24,
-    "blocked_wait_mean": 1.6557,
-    "guide_wait_mean": 0.2706,
-    "staff_wait_mean": 1.9263,
-    "full_wait_mean": 6.0563,
-    "pay_wait_mean": 33.6306
+    "groups": 137.95,
+    "entry_wait_mean": 7.6329,
+    "blocked_wait_mean": 1.7186,
+    "guide_wait_mean": 0.2974,
+    "staff_wait_mean": 2.016,
+    "full_wait_mean": 5.3576,
+    "pay_wait_mean": 33.4507
    }
   },
   {
@@ -4489,27 +4495,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 2.352,
-    "dish_wait_p90": 3.1438,
-    "cold_share": 0.1375,
-    "seat_wait_mean": 8.6567,
-    "turn_mean": 2.518,
-    "walk_km_per_staff": 3.552,
-    "staff_util": 0.5942,
-    "robot_util": 0.672,
-    "robot_share": 0.5104,
+    "dish_wait_mean": 2.3446,
+    "dish_wait_p90": 3.125,
+    "cold_share": 0.1341,
+    "seat_wait_mean": 5.9739,
+    "turn_mean": 2.5357,
+    "walk_km_per_staff": 3.4071,
+    "staff_util": 0.5897,
+    "robot_util": 0.661,
+    "robot_share": 0.5048,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 1,
-    "pauses": 22.8,
-    "fragile_robot": 39.3,
-    "groups": 141.875,
-    "entry_wait_mean": 9.0055,
-    "blocked_wait_mean": 0.9619,
-    "guide_wait_mean": 0.0899,
-    "staff_wait_mean": 1.0518,
-    "full_wait_mean": 7.6948,
-    "pay_wait_mean": 35.5143
+    "rescues": 0.75,
+    "pauses": 20.2,
+    "fragile_robot": 37.6,
+    "groups": 135.35,
+    "entry_wait_mean": 6.3214,
+    "blocked_wait_mean": 0.8027,
+    "guide_wait_mean": 0.0876,
+    "staff_wait_mean": 0.8903,
+    "full_wait_mean": 5.1712,
+    "pay_wait_mean": 33.9434
    }
   },
   {
@@ -4524,27 +4530,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.8581,
-    "dish_wait_p90": 2.9396,
-    "cold_share": 0.0905,
-    "seat_wait_mean": 6.9812,
-    "turn_mean": 2.4111,
-    "walk_km_per_staff": 2.8138,
-    "staff_util": 0.537,
-    "robot_util": 0.6085,
-    "robot_share": 0.8609,
+    "dish_wait_mean": 1.8623,
+    "dish_wait_p90": 2.9531,
+    "cold_share": 0.0949,
+    "seat_wait_mean": 6.9302,
+    "turn_mean": 2.4288,
+    "walk_km_per_staff": 2.859,
+    "staff_util": 0.5405,
+    "robot_util": 0.6115,
+    "robot_share": 0.8664,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 1.125,
-    "pauses": 44.7,
-    "fragile_robot": 61,
-    "groups": 138.625,
-    "entry_wait_mean": 7.278,
-    "blocked_wait_mean": 0.8318,
-    "guide_wait_mean": 0.0393,
-    "staff_wait_mean": 0.871,
-    "full_wait_mean": 6.1494,
-    "pay_wait_mean": 34.7543
+    "rescues": 1.5,
+    "pauses": 44.35,
+    "fragile_robot": 60.125,
+    "groups": 138.85,
+    "entry_wait_mean": 7.2357,
+    "blocked_wait_mean": 0.826,
+    "guide_wait_mean": 0.0446,
+    "staff_wait_mean": 0.8707,
+    "full_wait_mean": 6.1042,
+    "pay_wait_mean": 34.9124
    }
   },
   {
@@ -4559,13 +4565,13 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.4927,
-    "dish_wait_p90": 0.9757,
-    "cold_share": 0.0001,
-    "seat_wait_mean": 0.1662,
-    "turn_mean": 3.2174,
-    "walk_km_per_staff": 3.2802,
-    "staff_util": 0.627,
+    "dish_wait_mean": 0.4654,
+    "dish_wait_p90": 0.907,
+    "cold_share": 0.0,
+    "seat_wait_mean": 0.0422,
+    "turn_mean": 2.9786,
+    "walk_km_per_staff": 3.2205,
+    "staff_util": 0.6232,
     "robot_util": 0.0,
     "robot_share": 0.0,
     "robot_bus_share": 0.0,
@@ -4573,13 +4579,13 @@
     "rescues": 0,
     "pauses": 0,
     "fragile_robot": 0,
-    "groups": 104.075,
-    "entry_wait_mean": 0.6291,
-    "blocked_wait_mean": 0.154,
-    "guide_wait_mean": 0.2049,
-    "staff_wait_mean": 0.3588,
-    "full_wait_mean": 0.0122,
-    "pay_wait_mean": 17.6891
+    "groups": 101.475,
+    "entry_wait_mean": 0.482,
+    "blocked_wait_mean": 0.0369,
+    "guide_wait_mean": 0.1791,
+    "staff_wait_mean": 0.2161,
+    "full_wait_mean": 0.0053,
+    "pay_wait_mean": 16.2233
    }
   },
   {
@@ -4594,27 +4600,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 2.2494,
-    "dish_wait_p90": 3.0278,
-    "cold_share": 0.1081,
-    "seat_wait_mean": 0.0158,
-    "turn_mean": 2.4498,
-    "walk_km_per_staff": 2.5471,
-    "staff_util": 0.5456,
-    "robot_util": 0.6762,
-    "robot_share": 0.5454,
+    "dish_wait_mean": 2.2783,
+    "dish_wait_p90": 3.0578,
+    "cold_share": 0.1196,
+    "seat_wait_mean": 0.061,
+    "turn_mean": 2.5018,
+    "walk_km_per_staff": 2.6039,
+    "staff_util": 0.5497,
+    "robot_util": 0.6812,
+    "robot_share": 0.5421,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 0.525,
-    "pauses": 17.6,
-    "fragile_robot": 30.725,
-    "groups": 104,
-    "entry_wait_mean": 0.3464,
-    "blocked_wait_mean": 0.013,
-    "guide_wait_mean": 0.0727,
-    "staff_wait_mean": 0.0857,
-    "full_wait_mean": 0.0028,
-    "pay_wait_mean": 17.5336
+    "rescues": 0.65,
+    "pauses": 17.95,
+    "fragile_robot": 32.4,
+    "groups": 104.575,
+    "entry_wait_mean": 0.4135,
+    "blocked_wait_mean": 0.0355,
+    "guide_wait_mean": 0.0925,
+    "staff_wait_mean": 0.128,
+    "full_wait_mean": 0.0255,
+    "pay_wait_mean": 18.6058
    }
   },
   {
@@ -4629,27 +4635,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.7444,
-    "dish_wait_p90": 2.8463,
-    "cold_share": 0.0757,
-    "seat_wait_mean": 0.0392,
-    "turn_mean": 2.3889,
-    "walk_km_per_staff": 2.0519,
-    "staff_util": 0.4935,
-    "robot_util": 0.6092,
-    "robot_share": 0.9102,
+    "dish_wait_mean": 1.7372,
+    "dish_wait_p90": 2.8339,
+    "cold_share": 0.0722,
+    "seat_wait_mean": 0.1205,
+    "turn_mean": 2.4048,
+    "walk_km_per_staff": 2.1033,
+    "staff_util": 0.4985,
+    "robot_util": 0.61,
+    "robot_share": 0.9001,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 1.175,
-    "pauses": 36.45,
-    "fragile_robot": 47.7,
-    "groups": 104,
-    "entry_wait_mean": 0.3274,
-    "blocked_wait_mean": 0.0177,
-    "guide_wait_mean": 0.0309,
-    "staff_wait_mean": 0.0486,
-    "full_wait_mean": 0.0215,
-    "pay_wait_mean": 18.7765
+    "rescues": 1.5,
+    "pauses": 35.8,
+    "fragile_robot": 48.1,
+    "groups": 104.275,
+    "entry_wait_mean": 0.417,
+    "blocked_wait_mean": 0.0492,
+    "guide_wait_mean": 0.0364,
+    "staff_wait_mean": 0.0856,
+    "full_wait_mean": 0.0713,
+    "pay_wait_mean": 19.0489
    }
   },
   {
@@ -4664,13 +4670,13 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.4695,
-    "dish_wait_p90": 0.958,
+    "dish_wait_mean": 0.4712,
+    "dish_wait_p90": 0.9525,
     "cold_share": 0.0,
-    "seat_wait_mean": 26.4942,
-    "turn_mean": 2.8607,
-    "walk_km_per_staff": 5.4991,
-    "staff_util": 0.7008,
+    "seat_wait_mean": 27.6461,
+    "turn_mean": 2.8576,
+    "walk_km_per_staff": 5.657,
+    "staff_util": 0.707,
     "robot_util": 0.0,
     "robot_share": 0.0,
     "robot_bus_share": 0.0,
@@ -4678,13 +4684,13 @@
     "rescues": 0,
     "pauses": 0,
     "fragile_robot": 0,
-    "groups": 175.525,
-    "entry_wait_mean": 26.9024,
-    "blocked_wait_mean": 1.7704,
-    "guide_wait_mean": 0.1513,
-    "staff_wait_mean": 1.9217,
-    "full_wait_mean": 24.7238,
-    "pay_wait_mean": 41.9722
+    "groups": 177.925,
+    "entry_wait_mean": 28.056,
+    "blocked_wait_mean": 1.8373,
+    "guide_wait_mean": 0.1494,
+    "staff_wait_mean": 1.9867,
+    "full_wait_mean": 25.8087,
+    "pay_wait_mean": 42.2738
    }
   },
   {
@@ -4699,27 +4705,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 2.2659,
-    "dish_wait_p90": 3.0064,
-    "cold_share": 0.1046,
-    "seat_wait_mean": 29.0781,
-    "turn_mean": 2.4277,
-    "walk_km_per_staff": 4.3562,
-    "staff_util": 0.6118,
-    "robot_util": 0.7267,
-    "robot_share": 0.5338,
+    "dish_wait_mean": 2.2935,
+    "dish_wait_p90": 3.0495,
+    "cold_share": 0.1164,
+    "seat_wait_mean": 28.0039,
+    "turn_mean": 2.4527,
+    "walk_km_per_staff": 4.4133,
+    "staff_util": 0.6163,
+    "robot_util": 0.7263,
+    "robot_share": 0.5295,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 0.85,
+    "rescues": 1.175,
     "pauses": 28.25,
-    "fragile_robot": 51.875,
-    "groups": 178.55,
-    "entry_wait_mean": 29.3736,
-    "blocked_wait_mean": 1.4586,
-    "guide_wait_mean": 0.039,
-    "staff_wait_mean": 1.4976,
-    "full_wait_mean": 27.6196,
-    "pay_wait_mean": 42.1347
+    "fragile_robot": 50.875,
+    "groups": 177.25,
+    "entry_wait_mean": 28.3101,
+    "blocked_wait_mean": 1.4607,
+    "guide_wait_mean": 0.0459,
+    "staff_wait_mean": 1.5066,
+    "full_wait_mean": 26.5432,
+    "pay_wait_mean": 41.7854
    }
   },
   {
@@ -4734,27 +4740,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.7427,
-    "dish_wait_p90": 2.8431,
-    "cold_share": 0.0756,
-    "seat_wait_mean": 28.283,
-    "turn_mean": 2.385,
-    "walk_km_per_staff": 3.5899,
-    "staff_util": 0.5612,
-    "robot_util": 0.6671,
-    "robot_share": 0.8722,
+    "dish_wait_mean": 1.7547,
+    "dish_wait_p90": 2.8333,
+    "cold_share": 0.0718,
+    "seat_wait_mean": 26.8499,
+    "turn_mean": 2.3926,
+    "walk_km_per_staff": 3.5766,
+    "staff_util": 0.5613,
+    "robot_util": 0.6678,
+    "robot_share": 0.8726,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 2.05,
-    "pauses": 59.575,
-    "fragile_robot": 81.05,
-    "groups": 178.075,
-    "entry_wait_mean": 28.5589,
-    "blocked_wait_mean": 1.4017,
-    "guide_wait_mean": 0.0183,
-    "staff_wait_mean": 1.42,
-    "full_wait_mean": 26.8814,
-    "pay_wait_mean": 42.5077
+    "rescues": 1.95,
+    "pauses": 60.775,
+    "fragile_robot": 80.65,
+    "groups": 176.1,
+    "entry_wait_mean": 27.1302,
+    "blocked_wait_mean": 1.4002,
+    "guide_wait_mean": 0.0213,
+    "staff_wait_mean": 1.4215,
+    "full_wait_mean": 25.4497,
+    "pay_wait_mean": 42.3534
    }
   },
   {
@@ -4769,13 +4775,13 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.9178,
-    "dish_wait_p90": 1.7919,
-    "cold_share": 0.0077,
-    "seat_wait_mean": 12.8797,
-    "turn_mean": 12.2848,
-    "walk_km_per_staff": 5.1931,
-    "staff_util": 0.8043,
+    "dish_wait_mean": 0.927,
+    "dish_wait_p90": 1.8078,
+    "cold_share": 0.0104,
+    "seat_wait_mean": 13.7163,
+    "turn_mean": 12.8738,
+    "walk_km_per_staff": 5.2921,
+    "staff_util": 0.8094,
     "robot_util": 0.0,
     "robot_share": 0.0,
     "robot_bus_share": 0.0,
@@ -4783,13 +4789,13 @@
     "rescues": 0,
     "pauses": 0,
     "fragile_robot": 0,
-    "groups": 137.4,
-    "entry_wait_mean": 13.6877,
-    "blocked_wait_mean": 7.5345,
-    "guide_wait_mean": 0.5499,
-    "staff_wait_mean": 8.0843,
-    "full_wait_mean": 5.3453,
-    "pay_wait_mean": 27.151
+    "groups": 138.125,
+    "entry_wait_mean": 14.5449,
+    "blocked_wait_mean": 7.881,
+    "guide_wait_mean": 0.567,
+    "staff_wait_mean": 8.448,
+    "full_wait_mean": 5.8353,
+    "pay_wait_mean": 26.8272
    }
   },
   {
@@ -4804,27 +4810,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 2.5928,
-    "dish_wait_p90": 3.567,
-    "cold_share": 0.2723,
-    "seat_wait_mean": 9.2707,
-    "turn_mean": 4.0339,
-    "walk_km_per_staff": 4.1976,
-    "staff_util": 0.708,
-    "robot_util": 0.677,
+    "dish_wait_mean": 2.5913,
+    "dish_wait_p90": 3.5586,
+    "cold_share": 0.27,
+    "seat_wait_mean": 9.525,
+    "turn_mean": 4.2149,
+    "walk_km_per_staff": 4.2182,
+    "staff_util": 0.7093,
+    "robot_util": 0.6746,
     "robot_share": 0.5187,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 0.675,
-    "pauses": 22.2,
-    "fragile_robot": 40.65,
-    "groups": 140.525,
-    "entry_wait_mean": 9.8292,
-    "blocked_wait_mean": 2.236,
-    "guide_wait_mean": 0.2995,
-    "staff_wait_mean": 2.5354,
-    "full_wait_mean": 7.0347,
-    "pay_wait_mean": 33.7894
+    "rescues": 0.925,
+    "pauses": 22.05,
+    "fragile_robot": 39.375,
+    "groups": 140.4,
+    "entry_wait_mean": 10.0775,
+    "blocked_wait_mean": 2.3619,
+    "guide_wait_mean": 0.2915,
+    "staff_wait_mean": 2.6534,
+    "full_wait_mean": 7.1631,
+    "pay_wait_mean": 33.9029
    }
   },
   {
@@ -4839,27 +4845,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.9696,
-    "dish_wait_p90": 3.1674,
-    "cold_share": 0.1401,
-    "seat_wait_mean": 7.3505,
-    "turn_mean": 2.7115,
-    "walk_km_per_staff": 3.3634,
-    "staff_util": 0.6428,
-    "robot_util": 0.6129,
-    "robot_share": 0.8738,
+    "dish_wait_mean": 1.9866,
+    "dish_wait_p90": 3.1985,
+    "cold_share": 0.148,
+    "seat_wait_mean": 8.9113,
+    "turn_mean": 2.8007,
+    "walk_km_per_staff": 3.4923,
+    "staff_util": 0.6491,
+    "robot_util": 0.6193,
+    "robot_share": 0.8722,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 1.5,
-    "pauses": 43.85,
-    "fragile_robot": 63.225,
-    "groups": 138.65,
-    "entry_wait_mean": 7.7515,
-    "blocked_wait_mean": 1.0155,
-    "guide_wait_mean": 0.1442,
-    "staff_wait_mean": 1.1597,
-    "full_wait_mean": 6.335,
-    "pay_wait_mean": 34.5649
+    "rescues": 1.3,
+    "pauses": 46.45,
+    "fragile_robot": 63.775,
+    "groups": 141.925,
+    "entry_wait_mean": 9.3212,
+    "blocked_wait_mean": 1.18,
+    "guide_wait_mean": 0.1492,
+    "staff_wait_mean": 1.3292,
+    "full_wait_mean": 7.7312,
+    "pay_wait_mean": 35.3463
    }
   },
   {
@@ -4874,13 +4880,13 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.3645,
-    "dish_wait_p90": 0.6641,
+    "dish_wait_mean": 0.3708,
+    "dish_wait_p90": 0.6819,
     "cold_share": 0.0,
-    "seat_wait_mean": 7.0754,
-    "turn_mean": 2.5445,
-    "walk_km_per_staff": 3.7676,
-    "staff_util": 0.5766,
+    "seat_wait_mean": 6.4945,
+    "turn_mean": 2.5521,
+    "walk_km_per_staff": 3.7638,
+    "staff_util": 0.5776,
     "robot_util": 0.0,
     "robot_share": 0.0,
     "robot_bus_share": 0.0,
@@ -4888,13 +4894,13 @@
     "rescues": 0,
     "pauses": 0,
     "fragile_robot": 0,
-    "groups": 140.225,
-    "entry_wait_mean": 7.4272,
-    "blocked_wait_mean": 0.8813,
-    "guide_wait_mean": 0.0947,
-    "staff_wait_mean": 0.976,
-    "full_wait_mean": 6.1941,
-    "pay_wait_mean": 35.5031
+    "groups": 138.95,
+    "entry_wait_mean": 6.8431,
+    "blocked_wait_mean": 0.8681,
+    "guide_wait_mean": 0.0889,
+    "staff_wait_mean": 0.957,
+    "full_wait_mean": 5.6264,
+    "pay_wait_mean": 35.3472
    }
   },
   {
@@ -4909,27 +4915,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 2.2525,
-    "dish_wait_p90": 2.9653,
-    "cold_share": 0.0943,
-    "seat_wait_mean": 8.147,
-    "turn_mean": 2.396,
-    "walk_km_per_staff": 3.0107,
-    "staff_util": 0.5076,
-    "robot_util": 0.6656,
-    "robot_share": 0.5065,
+    "dish_wait_mean": 2.2512,
+    "dish_wait_p90": 2.9599,
+    "cold_share": 0.0959,
+    "seat_wait_mean": 7.8412,
+    "turn_mean": 2.4023,
+    "walk_km_per_staff": 2.9753,
+    "staff_util": 0.5059,
+    "robot_util": 0.664,
+    "robot_share": 0.508,
     "robot_bus_share": 0.0,
     "collects": 0,
     "rescues": 0.825,
-    "pauses": 21.975,
-    "fragile_robot": 38.45,
-    "groups": 140.75,
-    "entry_wait_mean": 8.4348,
-    "blocked_wait_mean": 0.8787,
-    "guide_wait_mean": 0.0293,
-    "staff_wait_mean": 0.908,
-    "full_wait_mean": 7.2682,
-    "pay_wait_mean": 35.7662
+    "pauses": 20.75,
+    "fragile_robot": 37.9,
+    "groups": 138.95,
+    "entry_wait_mean": 8.1301,
+    "blocked_wait_mean": 0.8466,
+    "guide_wait_mean": 0.0292,
+    "staff_wait_mean": 0.8757,
+    "full_wait_mean": 6.9946,
+    "pay_wait_mean": 35.0935
    }
   },
   {
@@ -4944,27 +4950,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.8139,
-    "dish_wait_p90": 2.839,
-    "cold_share": 0.0742,
-    "seat_wait_mean": 6.8815,
-    "turn_mean": 2.3768,
-    "walk_km_per_staff": 2.415,
-    "staff_util": 0.4607,
-    "robot_util": 0.6109,
-    "robot_share": 0.8627,
+    "dish_wait_mean": 1.8263,
+    "dish_wait_p90": 2.873,
+    "cold_share": 0.0771,
+    "seat_wait_mean": 8.6271,
+    "turn_mean": 2.3882,
+    "walk_km_per_staff": 2.5362,
+    "staff_util": 0.4671,
+    "robot_util": 0.6164,
+    "robot_share": 0.8611,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 1.45,
-    "pauses": 44.65,
-    "fragile_robot": 60.275,
-    "groups": 138.425,
-    "entry_wait_mean": 7.1538,
-    "blocked_wait_mean": 0.7616,
-    "guide_wait_mean": 0.0145,
-    "staff_wait_mean": 0.7761,
-    "full_wait_mean": 6.1199,
-    "pay_wait_mean": 34.3847
+    "rescues": 1.5,
+    "pauses": 46.05,
+    "fragile_robot": 63.275,
+    "groups": 143.15,
+    "entry_wait_mean": 8.9029,
+    "blocked_wait_mean": 0.8862,
+    "guide_wait_mean": 0.0148,
+    "staff_wait_mean": 0.901,
+    "full_wait_mean": 7.7409,
+    "pay_wait_mean": 35.6842
    }
   },
   {
@@ -5924,27 +5930,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 2.3627,
-    "dish_wait_p90": 3.1438,
-    "cold_share": 0.1375,
-    "seat_wait_mean": 8.6566,
-    "turn_mean": 2.4222,
-    "walk_km_per_staff": 3.4205,
-    "staff_util": 0.5903,
-    "robot_util": 0.8571,
-    "robot_share": 0.5093,
-    "robot_bus_share": 0.1812,
+    "dish_wait_mean": 2.3583,
+    "dish_wait_p90": 3.1278,
+    "cold_share": 0.1354,
+    "seat_wait_mean": 5.9933,
+    "turn_mean": 2.4367,
+    "walk_km_per_staff": 3.2798,
+    "staff_util": 0.5859,
+    "robot_util": 0.8522,
+    "robot_share": 0.5034,
+    "robot_bus_share": 0.1875,
     "collects": 0,
-    "rescues": 1.25,
-    "pauses": 29.475,
-    "fragile_robot": 38.7,
-    "groups": 141.875,
-    "entry_wait_mean": 9.0054,
-    "blocked_wait_mean": 0.9618,
-    "guide_wait_mean": 0.0899,
-    "staff_wait_mean": 1.0517,
-    "full_wait_mean": 7.6948,
-    "pay_wait_mean": 35.5051
+    "rescues": 0.925,
+    "pauses": 28.15,
+    "fragile_robot": 37.075,
+    "groups": 135.475,
+    "entry_wait_mean": 6.3412,
+    "blocked_wait_mean": 0.8058,
+    "guide_wait_mean": 0.0881,
+    "staff_wait_mean": 0.894,
+    "full_wait_mean": 5.1875,
+    "pay_wait_mean": 33.9524
    }
   },
   {
@@ -5959,27 +5965,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.8964,
-    "dish_wait_p90": 2.9402,
-    "cold_share": 0.0907,
-    "seat_wait_mean": 7.1718,
-    "turn_mean": 2.1948,
-    "walk_km_per_staff": 2.541,
-    "staff_util": 0.5289,
-    "robot_util": 0.8207,
-    "robot_share": 0.8589,
-    "robot_bus_share": 0.4168,
+    "dish_wait_mean": 1.9063,
+    "dish_wait_p90": 2.9681,
+    "cold_share": 0.0981,
+    "seat_wait_mean": 7.0338,
+    "turn_mean": 2.2047,
+    "walk_km_per_staff": 2.577,
+    "staff_util": 0.5314,
+    "robot_util": 0.8234,
+    "robot_share": 0.8641,
+    "robot_bus_share": 0.4182,
     "collects": 0,
-    "rescues": 1.625,
-    "pauses": 61.475,
-    "fragile_robot": 61.825,
-    "groups": 139.475,
-    "entry_wait_mean": 7.4686,
-    "blocked_wait_mean": 0.8396,
-    "guide_wait_mean": 0.039,
-    "staff_wait_mean": 0.8786,
-    "full_wait_mean": 6.3321,
-    "pay_wait_mean": 34.8663
+    "rescues": 2.175,
+    "pauses": 60.85,
+    "fragile_robot": 59.925,
+    "groups": 139.85,
+    "entry_wait_mean": 7.338,
+    "blocked_wait_mean": 0.8115,
+    "guide_wait_mean": 0.0433,
+    "staff_wait_mean": 0.8547,
+    "full_wait_mean": 6.2223,
+    "pay_wait_mean": 34.9873
    }
   },
   {
@@ -6064,27 +6070,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.2054,
-    "dish_wait_p90": 2.3115,
-    "cold_share": 0.021,
-    "seat_wait_mean": 7.3093,
-    "turn_mean": 2.3892,
-    "walk_km_per_staff": 2.65,
-    "staff_util": 0.5226,
-    "robot_util": 0.5372,
-    "robot_share": 0.9885,
+    "dish_wait_mean": 1.2472,
+    "dish_wait_p90": 2.371,
+    "cold_share": 0.0244,
+    "seat_wait_mean": 6.2072,
+    "turn_mean": 2.3916,
+    "walk_km_per_staff": 2.6166,
+    "staff_util": 0.5221,
+    "robot_util": 0.5278,
+    "robot_share": 0.983,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 2.825,
-    "pauses": 69.4,
-    "fragile_robot": 69.95,
-    "groups": 140.9,
-    "entry_wait_mean": 7.5985,
-    "blocked_wait_mean": 0.8147,
-    "guide_wait_mean": 0.0313,
-    "staff_wait_mean": 0.846,
-    "full_wait_mean": 6.4946,
-    "pay_wait_mean": 35.8429
+    "rescues": 2.225,
+    "pauses": 66.6,
+    "fragile_robot": 68.15,
+    "groups": 138.225,
+    "entry_wait_mean": 6.496,
+    "blocked_wait_mean": 0.7825,
+    "guide_wait_mean": 0.0297,
+    "staff_wait_mean": 0.8122,
+    "full_wait_mean": 5.4247,
+    "pay_wait_mean": 35.2621
    }
   },
   {
@@ -6099,27 +6105,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.8419,
-    "dish_wait_p90": 1.6395,
-    "cold_share": 0.0018,
-    "seat_wait_mean": 7.4054,
-    "turn_mean": 2.3816,
-    "walk_km_per_staff": 2.6105,
-    "staff_util": 0.5195,
-    "robot_util": 0.4525,
-    "robot_share": 0.9999,
+    "dish_wait_mean": 0.8571,
+    "dish_wait_p90": 1.6813,
+    "cold_share": 0.0029,
+    "seat_wait_mean": 7.0633,
+    "turn_mean": 2.3934,
+    "walk_km_per_staff": 2.6181,
+    "staff_util": 0.5208,
+    "robot_util": 0.4538,
+    "robot_share": 0.9996,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 3.025,
-    "pauses": 88.975,
-    "fragile_robot": 71.725,
-    "groups": 140.5,
-    "entry_wait_mean": 7.6872,
-    "blocked_wait_mean": 0.8361,
-    "guide_wait_mean": 0.0242,
-    "staff_wait_mean": 0.8604,
-    "full_wait_mean": 6.5693,
-    "pay_wait_mean": 36.4595
+    "rescues": 3,
+    "pauses": 85.875,
+    "fragile_robot": 71.775,
+    "groups": 139.25,
+    "entry_wait_mean": 7.3482,
+    "blocked_wait_mean": 0.7689,
+    "guide_wait_mean": 0.0246,
+    "staff_wait_mean": 0.7935,
+    "full_wait_mean": 6.2944,
+    "pay_wait_mean": 35.8418
    }
   },
   {
@@ -6134,27 +6140,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.6924,
-    "dish_wait_p90": 1.1719,
-    "cold_share": 0.0003,
-    "seat_wait_mean": 6.9978,
-    "turn_mean": 2.3834,
-    "walk_km_per_staff": 2.6027,
-    "staff_util": 0.5215,
-    "robot_util": 0.38,
-    "robot_share": 1.0,
+    "dish_wait_mean": 0.6921,
+    "dish_wait_p90": 1.1558,
+    "cold_share": 0.0004,
+    "seat_wait_mean": 7.9521,
+    "turn_mean": 2.3865,
+    "walk_km_per_staff": 2.6648,
+    "staff_util": 0.5242,
+    "robot_util": 0.3838,
+    "robot_share": 0.9999,
     "robot_bus_share": 0.0,
     "collects": 0,
-    "rescues": 2.925,
-    "pauses": 93.475,
-    "fragile_robot": 69.625,
-    "groups": 139.375,
-    "entry_wait_mean": 7.2786,
-    "blocked_wait_mean": 0.8073,
-    "guide_wait_mean": 0.023,
-    "staff_wait_mean": 0.8303,
-    "full_wait_mean": 6.1906,
-    "pay_wait_mean": 36.0945
+    "rescues": 2.975,
+    "pauses": 95,
+    "fragile_robot": 71.125,
+    "groups": 142.15,
+    "entry_wait_mean": 8.237,
+    "blocked_wait_mean": 0.8386,
+    "guide_wait_mean": 0.0257,
+    "staff_wait_mean": 0.8643,
+    "full_wait_mean": 7.1136,
+    "pay_wait_mean": 36.417
    }
   },
   {
@@ -6169,27 +6175,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 1.3037,
-    "dish_wait_p90": 2.3935,
-    "cold_share": 0.0246,
-    "seat_wait_mean": 6.7453,
-    "turn_mean": 2.0999,
-    "walk_km_per_staff": 2.221,
-    "staff_util": 0.5088,
-    "robot_util": 0.7133,
-    "robot_share": 0.9861,
-    "robot_bus_share": 0.5604,
+    "dish_wait_mean": 1.3127,
+    "dish_wait_p90": 2.4035,
+    "cold_share": 0.0264,
+    "seat_wait_mean": 6.9139,
+    "turn_mean": 2.0965,
+    "walk_km_per_staff": 2.2348,
+    "staff_util": 0.51,
+    "robot_util": 0.7147,
+    "robot_share": 0.9831,
+    "robot_bus_share": 0.5592,
     "collects": 0,
-    "rescues": 3.25,
-    "pauses": 86.075,
-    "fragile_robot": 69.525,
-    "groups": 139.275,
-    "entry_wait_mean": 7.034,
-    "blocked_wait_mean": 0.7813,
-    "guide_wait_mean": 0.0309,
-    "staff_wait_mean": 0.8122,
-    "full_wait_mean": 5.964,
-    "pay_wait_mean": 35.5222
+    "rescues": 2.825,
+    "pauses": 88.2,
+    "fragile_robot": 70.55,
+    "groups": 139.375,
+    "entry_wait_mean": 7.1988,
+    "blocked_wait_mean": 0.7764,
+    "guide_wait_mean": 0.0263,
+    "staff_wait_mean": 0.8026,
+    "full_wait_mean": 6.1376,
+    "pay_wait_mean": 35.4565
    }
   },
   {
@@ -6204,27 +6210,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.924,
-    "dish_wait_p90": 1.774,
-    "cold_share": 0.002,
-    "seat_wait_mean": 8.3032,
-    "turn_mean": 2.0073,
-    "walk_km_per_staff": 2.1243,
-    "staff_util": 0.504,
-    "robot_util": 0.6251,
-    "robot_share": 0.9999,
-    "robot_bus_share": 0.7054,
+    "dish_wait_mean": 0.9333,
+    "dish_wait_p90": 1.8167,
+    "cold_share": 0.0032,
+    "seat_wait_mean": 6.8993,
+    "turn_mean": 2.0174,
+    "walk_km_per_staff": 2.1145,
+    "staff_util": 0.5043,
+    "robot_util": 0.6244,
+    "robot_share": 0.9994,
+    "robot_bus_share": 0.6983,
     "collects": 0,
-    "rescues": 3.825,
-    "pauses": 114.5,
-    "fragile_robot": 72.875,
-    "groups": 142.25,
-    "entry_wait_mean": 8.5806,
-    "blocked_wait_mean": 0.7975,
-    "guide_wait_mean": 0.0198,
-    "staff_wait_mean": 0.8173,
-    "full_wait_mean": 7.5057,
-    "pay_wait_mean": 36.9252
+    "rescues": 3.725,
+    "pauses": 111.85,
+    "fragile_robot": 71.925,
+    "groups": 140.2,
+    "entry_wait_mean": 7.1791,
+    "blocked_wait_mean": 0.7823,
+    "guide_wait_mean": 0.0205,
+    "staff_wait_mean": 0.8028,
+    "full_wait_mean": 6.117,
+    "pay_wait_mean": 36.2508
    }
   },
   {
@@ -6239,27 +6245,27 @@
     "registers": 1
    },
    "site_result": {
-    "dish_wait_mean": 0.7431,
-    "dish_wait_p90": 1.3415,
-    "cold_share": 0.0005,
-    "seat_wait_mean": 7.7443,
-    "turn_mean": 1.9501,
-    "walk_km_per_staff": 2.0254,
-    "staff_util": 0.5024,
-    "robot_util": 0.5456,
-    "robot_share": 1.0,
-    "robot_bus_share": 0.821,
-    "collects": 0,
-    "rescues": 4.625,
-    "pauses": 123.825,
-    "fragile_robot": 71.3,
-    "groups": 141.45,
-    "entry_wait_mean": 8.0233,
-    "blocked_wait_mean": 0.7923,
-    "guide_wait_mean": 0.0228,
-    "staff_wait_mean": 0.8151,
-    "full_wait_mean": 6.952,
-    "pay_wait_mean": 36.8324
+    "dish_wait_mean": 0.7426,
+    "dish_wait_p90": 1.3365,
+    "cold_share": 0.0009,
+    "seat_wait_mean": 8.963,
+    "turn_mean": 1.9489,
+    "walk_km_per_staff": 2.0839,
+    "staff_util": 0.506,
+    "robot_util": 0.5522,
+    "robot_share": 0.9998,
+    "robot_bus_share": 0.8205,
+    "collects": 0,
+    "rescues": 3.7,
+    "pauses": 126.675,
+    "fragile_robot": 72.45,
+    "groups": 144.225,
+    "entry_wait_mean": 9.2389,
+    "blocked_wait_mean": 0.8409,
+    "guide_wait_mean": 0.0171,
+    "staff_wait_mean": 0.858,
+    "full_wait_mean": 8.1221,
+    "pay_wait_mean": 37.013
    }
   },
   {
diff --git a/tools/sim_layouts/README.md b/tools/sim_layouts/README.md
index 3942ac1..33c941d 100644
--- a/tools/sim_layouts/README.md
+++ b/tools/sim_layouts/README.md
@@ -59,7 +59,7 @@
 - 版は `large-` で始まる（large_store.py と famires_v3 の版から決まる）
 - トイレが2つ・レジが2つの店のための Unity の細かい形の規則（2026-11-02。`unity_export.py`）：トイレの入口の点は、そのトイレの部屋に接する入口から取る（前はどのトイレも1つ目の入口になっていた）。会計に立つ点と並ぶ点は1つ目のレジだけに置く（Unity はレジ1つの条件で回すため。2つ目のレジは部屋として建てるだけ）。トイレ・レジが1つの今の6店は結果が変わらないので、出力は作り直していない（版 9b8dae7ebf8c のまま）。大型店は作り直した（版 large-f4f8ad343efe → large-291ae2e65898。卓・距離・止まる位置は同じ）
 - 2026-11-06：⑨のレジのまわりが狭すぎたので、島と左の壁ぞいの席を上へ1.0m（レジの上の端から島まで 1.5m → 2.5m）、レジと下の壁ぞいの6人席を右へ1.0m（レジの左の待つ所 3.1m → 4.1m）動かした。70卓・312席のまま、受け渡し口から卓まで 4.0〜34.4m。版は large-99db3254b08b（⑧は卓・距離・止まる位置とも前と同じ）。試算は⑨の 3,066 条件だけ回し直して入れ替え、結果は iCloud の simulation/v2_9_large/results_large_p7_v3.json
-- 2026-11-07：⑧のロボットの待機点を、1列（間0.8m）から2列の互い違い6点に変えた（エイイチ 案B・(2)）。1列で間0.8mだと、ロボットの前のセンサー（中心から0.85m）が隣の待機点の台にかかり、待機場所のそばで止まり合っていたため。奥の列は今までと同じ y=11.35 に x 18.9・20.5・22.1、手前の列は y=9.5 に x 19.7・21.3・22.9（同じ列は1.6m、斜めの隣は約2.0m）。2列のあいだに、ロボットのふだんの道（1.0m）が通る1.05m をあけた（右上の卓への距離を変えないため）。待機点は `robot_standby.slot_rects` に1台ずつの区画で持つ（famires_v3.standby_slots が読む。障害物も区画ごと）。卓までの距離は 19卓が −0.6〜＋0.4m 変わり、平均 15.6 → 15.5m。版は large-b13cd179e6bf（⑨は版の名前だけ変わり、中身は同じ）。⑧の試算は 3,066 条件を回し直した
+- 2026-11-07：⑧の待機点を2列の互い違いにした形（large-b13cd179e6bf・commit 18d23fe）を一度公開したが、Unity で奥の列の待機点3へ台が戻れなかった（手前の列の台のすき間 0.8m の下で行ったり来たり）ので、同じ日に元の1列・間0.8m・6点（large-99db3254b08b）に戻した。⑧の試算も元の値に戻した。待機場所のそばの止まり合いは、店の形を変えず、params の unity_rules.standby_straight_entry（待機点の真下 1.0m の入る点まで来てからまっすぐ入る）で直す
 - サイトと同じ描き方の平面図の画像は `large_plan_images.py`（試算のページの planSvg・bigPlanSvg をそのまま使う）
 
 ```
````


## 作業ログ ― 依頼112：待機点の真下からまっすぐ入る決まりを入れた

まっすぐ入る決まり（standby_straight_entry）を Unity に入れ、どかされた台が戻る形と比べました。最初の作りでは、待機点3・4の台が待機点から出られませんでした。入る点（待機点の真下）から引いた道が、並びのすぐ下を通って待機点1の台で止まり続けたためです。Claude Code が、まっすぐの区間ではすれ違いで寄らない・入る点からの最初の道は近くの台をよけて引く、の2つを足して直しています。

### 依頼112 の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 480
---
# 依頼112：⑧を元の1列の店の形に戻し、待機点へまっすぐ入る決まりを入れて、⑧で比べる

依頼108 の報告（claude_code_reports/20261107_sb108.txt）を読んで、エイイチと決めたこと（2026-11-07）：
- 2列の待機点（large-b13cd179e6bf）はやめる。奥の列の待機点3へ、手前の列の台のすき間（0.8m）の下で行ったり来たりして戻れなかったため
- 待機点の間を広げる案は、⑧では受け渡し口の前と右の卓へ上がる道があって1.1mまでしか取れず、斜めに寄ると隣の台がまだセンサーに入るのでやめる
- 店の形は元の1列・間0.8m・6点（large-b13cd179e6bf の前の large-99db3254b08b）に戻した。⑧の試算もページ・params とも元の値に戻した
- 止まり合いは、入り方の決まりで直す：待機点へ戻る台は、待機点の真下 1.0m の「入る点」まで来てから、まっすぐ入る（params の unity_rules.standby_straight_entry。既定は切）
- 依頼108 で入れた「どかされた台が待機点へ戻る」直し（cs:90）はそのまま使う
- 依頼108 の決めてほしいこと2（持ち場4が動いた）は、1列に戻したので元の位置に戻るはず。3（待機点に入れるかの確かめ方）と4（戻りの止まりを stops.csv に入れる）は、Claude Code の決めたとおりでよい

サイトは公開済み（p2m-site commit de01a0e）。params の違いは、前の写し（依頼108 で写した large-b13cd179e6bf の版）から見ると、meta.layout_generation_large・stores.large_p6・⑧の23条件の site_result が元に戻り、unity_rules.standby_straight_entry が1つ増えたこと。店の形は large-99db3254b08b（依頼95〜105 で使っていた形と同じ）。

範囲は⑧（large_p6）の配膳だけ。ほかの店・⑨・下げ膳は回さない。staff_moves_robot は入（すぐ押す）、人の先よけ・standby_queue・repeat_stop は切。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所が cs:93 以降、保留 0。Unity・night_runner／rec_runner が動いていない（前の依頼110 はアーム側）。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳と除く一覧を archive/unity_ledger_v1_pre_112_20261107/ に退避（行数と md5 を報告に）
2. サイトの params と⑧⑨の店の形を写し直す。⑧⑨の店の形が、依頼95〜105 で使っていた写し（large-99db3254b08b）と同じであることを確かめる。params の違いが上に書いたものだけであることを確かめる
3. 依頼108 で確かめのために足した cs:92・93 の待機点の確かめ用の作りが、ふだんの回に効かないこと（切り替えか確かめ専用か）を確かめる

## 1. 作る
1. ⑧を元の1列の店の形で建て直す（依頼108 の cs:91 の前の形に戻す）。待機点は places の RobotStandby の6点を読む作り（依頼108 で直したもの）はそのままでよい
2. **standbyStraightEntry**（切り替え。既定は切。値は params から読む）：note のとおり。入る点は、待機点の中心から壁と反対の向きへ entry_back_m（1.0m）下がった点。戻る台は、まず入る点へ行き、着いたら向きを待機点へ合わせてまっすぐ進んで待機点に入る。出るときは、待機点から入る点までまっすぐ下がり（向きを変えずに後ろへ、または向きを変えてまっすぐ）、そこから道を引く。入る点がほかの台・人でふさがっていたら、入る点の手前で待つ（その待ちは止まりとして数える）。瞬間移動はさせない。同じ条件・同じ種なら同じ結果になること
3. check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- standbyStraightEntry 切・1列の店の形で、⑧5台 serve 種7 の記録が、依頼108 の sb108ret（1列＋どかされた台が戻る）のための実行ファイル（Builds/sb108ret_cs90）で回した同じ回と1行も違わないこと（依頼108 で回していなければ、その実行ファイルで1回回して比べる）
- 入のとき、⑧5台 serve 種0 を2回回して一致すること
- 瞬間移動 0
- 入のとき、⑧の待機点1〜5 に、ほかの4台が待機点にいるまま1台ずつ戻れること（依頼108 と同じ確かめ方。900 秒まで）

## 3. 回す（画面なし・同時4本・⑧ serve・すぐ押す 入）
1. ⑧5台（条件 138）× 種0〜9：1列＋どかされた台が戻る（standbyStraightEntry 切）＝ 10回（label sb112ret）
2. ⑧5台 × 種0〜9：1列＋どかされた台が戻る＋まっすぐ入る ＝ 10回（label sb112se）
3. ⑧2〜4台（条件 92・136・137）× 種0〜9：1列＋どかされた台が戻る＋まっすぐ入る ＝ 30回（label sb112se）
- 比べる相手（今のまま）は依頼101b の sm101p6on（1列・どちらの直しもなし）
- 1回の上限は 90 分。止まっても回し直さない

## 4. 表と図（10種の中央値）
- 5台：sm101p6on・sb112ret・sb112se の3列。待機場所のそばの30秒以上の詰まり（依頼104 の型分け）の件数と秒（抜けられなかった行ったり来たりは別に書く）・ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数・料理ができてから届くまで・2分待って人が運んだ皿・往復数・全員が帰った回・往復を終えた台が待機点から1.5m以上離れて待った秒・入る点の手前で待った秒・入店待ち（参考）
- 2〜4台：sm101p6on と sb112se の2列で、同じ数
- 図：依頼104 の fig_where_by_type.png と同じ描き方で、⑧5台の3つ（sm101p6on・sb112ret・sb112se）を横に並べる。赤い丸の大きさ＝詰まりの秒。図の上に、3つそれぞれの「待機場所のそばの30秒以上の詰まりの合計（抜けられなかった件を除く）」を大きく書く

## 5. 撮る（2 が通れば撮る）
- ⑧5台 serve 種7 を、1列＋どかされた台が戻る＋まっすぐ入るで1本。撮り方は依頼105 と同じ。置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sb112_20261107/se/
- 依頼101b の now（直しなし）と左右に並べ、待機場所のそばに寄せて店の時刻の5倍で流すパネル付きの動画を作る。寄る5分は、now の方で待機場所のそばの止まりがいちばん長い5分。題「⑧ ロボット5台：斜めに寄る と まっすぐ入る」
- 撮った回の名前が、撮らない回や前の撮影と同じにならないようにする

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sb112.txt に：始める前の確かめ、1 の作り（どのファイルのどこ・値の読み方・切り替えの名前）、2 の確かめ、4 の表と図の置き場所、5 の動画の名前と長さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼112 の結果

```text
# 結果：20261107_112_⑧を1列に戻し待機点へまっすぐ入る決まりを入れて比べる

- 状態：完了
- 始めた時刻：2026-11-07 15:31
- 終わった時刻：2026-11-07 17:17（106分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 05b04c9b-08ef-44dc-9162-1c915044dd67`

## Claude Code の報告

やったこと
- 始める前の確かめは3つとも通りました。
  - 作業場所は cs:93、保留 0。Unity・night_runner・rec_runner は動いておらず、鍵ファイルもありませんでした。
  - 台帳 3,515 行（md5 13095221…）と除く一覧 27 行（md5 dcaed1a6…）を archive/unity_ledger_v1_pre_112_20261107/ に退避しました。
  - サイト de01a0e の⑧⑨の店の形5ファイルは、依頼95〜105 の写し（large-99db3254b08b）と md5 が同じでした。持ち場4 も (10.75, 12.75) に戻っています。
  - params の違いは依頼に書かれたものだけでした（⑧の23条件・stores.large_p6・版の名前が戻り、unity_rules.standby_straight_entry が1つ増えた）。
  - cs:92・93 の待機点の確かめ用の作りは、-ssStandbyCheck on のときだけ働き、ふだんの回には効きません。
- 作る（cs:94〜97）
  - ⑧を元の1列に戻しました。
  - 切り替え -ssStandbyStraightEntry を入れました（queue の standby_straight_entry、入の回はフォルダ名に _se、既定は切）。
  - 入る点は、待機点から壁と反対の向きへ 1.0m 下がった点です。⑧では6点とも y 10.35 になります。
  - 戻る台は入る点へ行き、その場で向きを合わせてまっすぐ入ります。出る台は入る点までまっすぐ出てから道を引きます。
  - 入る点がふさがっていれば手前で待ち、止まりに数えます。
  - 最初の作り（cs:94）では待機点3・4 の台が戻れませんでした。原因は「出る」側です。地図に待機点の台が入っていないので、入る点から引いた道が並びのすぐ下を通り、待機点1 の台で止まり続けました。
  - そこで、まっすぐの区間ではすれ違いで右へ寄らないようにしました（cs:95）。入る点からの最初の道は、近くの台の体をよけて引くようにしました（cs:97）。どちらも入の回だけで、切の回は変わりません。
- 回す：50 回すべて completed でした。⑧ serve 4本同時で、sb112ret が5台×種0〜9、sb112se が2〜5台×種0〜9 です。
- 表・図・動画を作りました。

結果
- 確かめ（cs:97）はすべて通りました。
  - 切の⑧5台 種7 は、Builds/sb108ret_cs90 で回した同じ回と全19ファイル一致しました。
  - 入の種0 は、2回が全19ファイル一致しました。
  - 瞬間移動 0、1コマの跳び 0 です。
  - 待機点1〜5 に1台ずつ戻れました（68〜87 秒、中心から 0.22〜0.25m）。
- ⑧5台の表（10種の中央値。今のまま → どかされた台が戻る → 戻る＋まっすぐ入る）

| 項目 | 今のまま | どかされた台が戻る | 戻る＋まっすぐ入る |
|---|---|---|---|
| 待機場所のそばの30秒以上の詰まり（行ったり来たりを除く） | 39件・2,366秒 | 54件・3,316秒 | 28件・1,708秒 |
| ロボットの止まりの合計 | 8,068秒 | 10,803秒 | 9,372秒 |
| うちロボット同士 | 5,226秒 | 6,515秒 | 4,538秒 |
| 30秒の呼び出し | 112回 | 113回 | 180.5回 |
| 60秒動けなくなった | 13.5回 | 16.0回 | 21.5回 |
| スタッフが動かした | 151回 | 307.5回 | 232.5回 |
| 料理ができてから届くまで | 1.69分 | 1.72分 | 1.65分 |
| 全員が帰った回 | 9/10 | 10/10 | 10/10 |
| 待機点から1.5m以上離れて待った秒 | 1,392秒 | 2秒 | 0秒 |
| 入る点の手前で待った秒 | 0 | 0 | 209秒（48回） |

- まっすぐ入るで待機場所のそばの詰まりは減りましたが、30秒の呼び出し・60秒動けなくなった回数・止まりの合計は今のままより多くなりました。
- 2〜4台の表も報告に入れました。待機場所のそばの詰まりの秒は3つともまっすぐ入るの方が少なく、30秒の呼び出しは今のままの1.6〜2.4倍でした。
- 図：night/20261107_sb112/fig_where_by_type_sb112.png（3つを横に並べ、上に合計を大きく書いた）
- 動画：rec_sb112_20261107/slow_now_se/slow_now_se_panel.mp4（61.5秒）
  - 寄った5分は開店から53〜58分です。
  - その5分の待機場所のそばの止まりは、左（今のまま）467秒、右（まっすぐ入る）56秒でした。
- 台帳は 3,515 行から 3,570 行になりました（追記55行、すべて completed）。先頭3,515行の md5 は始める前と同じで、終わったあとは f8bb26f1a343be4b6da186aff502f3ce です。

変えたファイル
- Unity（cs:94〜97）
  - ServingRobotController.cs・ServiceOps.cs・ExperimentRunner.cs・TripLogger.cs・HeadlessRun.cs
  - serving-robot-params.json
  - Store/Layouts/large/ の5つ
  - tools/night_runner.py・tools/make_queue.py
- Builds/headless（cs:97 で作り直し）と Builds/rec27_sb112（撮影用の写し）
- KIOXIA：退避、台帳への追記、night/20261107_sb112/、rec_sb112_20261107/
- 報告：claude_code_reports/20261107_sb112.txt（図と表は 20261107_sb112_files/）

決めてほしいこと
1. まっすぐ入るの作りに、note に書かれていない3つを足しました。このままでよいか決めてください。
   - 入る点からの最初の道は、近くの台をよけて引く
   - まっすぐの区間ではすれ違いで寄らない
   - 入る点の手前で待つのは、入る点から1.2m以内に来て、入る点に台・人がいるとき
2. 切の回にも、5秒ごとに近くのスタッフがその場で道を引き直すたびに止まりの秒が0に戻り、30秒の呼び出しにも60秒にもならない止まり方があります（確かめで、切の待機点3 が900秒出られなかった）。直すか決めてください。直すと切の回の結果が変わります。
3. まっすぐ入るを標準にするかを決めてください。あわせて、入る点の手前の待ちを止まりとして数えるか、つまり5秒で近くのスタッフが来る・30秒で呼ぶの対象にするかも決めてください。

判定：合格
```

### 依頼112 の Claude Code の報告（20261107_sb112.txt）

```text
====================================================================
依頼112：⑧を元の1列の店の形に戻し、待機点へまっすぐ入る決まりを入れて、⑧で比べる
2026-11-07 15:31〜17:20　作業場所 cs:93 → cs:94（店の形を戻す・まっすぐ入る）→ cs:95・cs:96・cs:97（確かめで見つけた直し・確かめ用の記録）
====================================================================

結論
  ・1〜5 をすべてやった。止める線（瞬間移動・同じ種の2回の違い）には当たっていない
  ・2 の確かめは cs:97 ですべて通った
      切・1列：⑧5台 serve 種7 が Builds/sb108ret_cs90 で回した同じ回と全19ファイル一致
      入：⑧5台 serve 種0 の2回が全19ファイル一致／瞬間移動 0・1コマの跳び 0（確かめ・本番 50 回・撮影の回すべて）
      入：待機点1〜5 に、ほかの4台が待機点にいるまま1台ずつ戻れた（68〜87 秒・中心から 0.22〜0.25 m）
  ・ただし、待機点の確かめは初め（cs:94）は待機点3・4 で通らず、まっすぐ入る決まりの作りに2つ足して通した（1-4。決めてほしいこと 1）
  ・⑧5台（10 種の中央値）：待機場所のそばの 30 秒以上のロボット同士の詰まり（行ったり来たりを除く）
      今のまま 39 件・2,366 秒 → どかされた台が戻る 54 件・3,316 秒 → 戻る＋まっすぐ入る 28 件・1,708 秒
    一方で、30 秒の呼び出し 112 → 113 → 180.5 回・60 秒動けなくなった 13.5 → 16.0 → 21.5 回・ロボットの止まりの合計 8,068 → 10,803 → 9,372 秒
    （まっすぐ入るは、待機場所のそばの詰まりは減るが、止まり全体・呼び出しは今のままより多い。くわしくは 4）


--------------------------------------------------------------------
0. 始める前の確かめ（15:31〜15:38）
--------------------------------------------------------------------
  1. 作業場所 cs:93 - head・保留 0。Builds/headless は cs93_20261107_1331・pending_changes 空
     Unity エディタ・night_runner・rec_runner は動いていなかった（Unity Hub と、この依頼の claude だけ）。KIOXIA マウント済み／unity_ledger_v1.lock なし
     退避：archive/unity_ledger_v1_pre_112_20261107/
       unity_ledger_v1.csv　3,515 行・md5 13095221b8872182bf9f0955807256ae（依頼108 の終わりと同じ）
       unity_ledger_v1_excluded_runs.csv　27 行・md5 dcaed1a6000e1426600e4d7a03058ab0（依頼108 の終わりと同じ）
  2. サイトの写し：p2m-site de01a0e（main と同じ）から gh api で取った。置き場所 unity/site_copy_large-99db3254b08b_sb112/
       params.json（md5 fb21c19cecf74633446b46f6eabbb9c5）・layouts_large/summary.json・unity/ の4つ・layout/（p6・p7）
     ⑧⑨の店の形：unity/ の4つと summary.json の md5 が、依頼95〜105 の写し（site_copy_large-99db3254b08b_large95）と1字も違わず同じ
       （p6_large_center c6c81982…・p6_map 884aa6d9…・p7_large_b c8925f84…・p7_map d8b6df35…・summary 8d506aa8…）。
       cs:90（依頼108 で 2列にする前）の Unity の5ファイルとも md5 が同じ。スタッフの持ち場4 も (10.75, 12.75) に戻っている
     params：依頼108 の写し（large-b13cd179e6bf 版）と JSON を中まで比べた違いは
       meta.layout_generation_large（→ large-99db3254b08b）・stores.large_p6（dist_list 19 か所・dist_m の最大 21.4 → 22.0）・
       unity_conditions の site_result（23 件。どれも large_p6 の条件 90〜104・132・133・136〜141）・unity_rules.standby_straight_entry が1つ増えた。
       ほかの違いはない → 依頼どおり。cs:90 の Unity の params との違いは standby_straight_entry の1つだけ
       standby_straight_entry：value false・entry_back_m 1.0
  3. cs:92・93 の待機点の確かめ用の作り：-ssStandbyCheck on のときだけ働く（HeadlessRun が job.standbyCheck を立て、
     ExperimentRunner.Update が UpdateStandbyCheck に入るのはそのときだけ。台帳に書かない・フォルダ名に _sbchk）。
     ふだんの回には効かない（依頼108 でも chk108c と chk108a が全ファイル一致）


--------------------------------------------------------------------
1. 作る
--------------------------------------------------------------------
1-1. ⑧を元の1列で建て直す（cs:94）
  Assets/ServiceSim/Store/Layouts/large/ の p6_large_center・p6_large_center_map・p7_large_b・p7_large_b_map・summary.json を 0 章の写しに戻した
  （cs:90 と同じ md5）。params（Experiment/serving-robot-params.json）は de01a0e のもの。待機点は places の RobotStandby を読む作りのまま

1-2. standbyStraightEntry（待機点へまっすぐ入る）
  切り替えの名前：-ssStandbyStraightEntry on|off（付けないときは切）・queue の standby_straight_entry・入の回だけフォルダ名に _se（_rstop の後ろ）
  値の読み方：ExperimentRunner.ReadStandbyStraightEntry（ExperimentRunner.cs 925 行め）。入切は指定があればそれ、無ければ
    params の unity_rules.standby_straight_entry.value。入の回は entry_back_m を同じ項目から読み、0 より大きくなければ回さない。
    待機場所へ戻るが切の回も回さない。ops.SetStandbyStraightEntry（519 行め）で ServiceOps に渡す
  入る点（ServiceOps.StandbyEntryPoint・ServiceOps.cs 2704 行め）：待機点の中心から ＋x・−x・＋z・−z の4つの向きへロボットの地図
    （free_class）を 0.025 m 刻みで進み、通れないマスに一番早く当たる向きを壁とし、その反対へ entry_back_m 下がった点。
    ⑧の1列は6点とも壁は ＋y（パントリー・0.1 m）で、入る点は (x, 10.35)。run_info.json の standby_straight_entry.entry_points に書く
  走り方（Robot/ServingRobotController.cs の「待機点へまっすぐ入る」の節 3655 行めから）
    ・戻る（SeBeginReturnLeg 3733 行め）：往復の戻り（1115 行め）・下げ膳の戻り（847 行め）・どかされた台の戻り（2834 行め）で、
      まず入る点へ地図で道を引いて行く。入る点には角に着いたとみる距離（0.12 m）まで寄る（3505 行め）。
      すでに入る点と待機点のあいだの筋（横 0.1 m 以内）にいれば、そこからまっすぐ入る
    ・入る点に着いたら（3515 行め）、その場で向きを待機点へ合わせ（SeTurnStep 3831 行め。180°/秒・止まりには数えない）、
      待機点までの1本の線をまっすぐ進む。まっすぐの区間は地図で引かず（PlanOnMap 4159 行め）、回り込み・よけの道も引かない
    ・出る（SeBeginExit 3766 行め・BeginRun 1043 行め）：待機点から 0.3 m 以内にいれば、向きを入る点へ合わせて（向きを変えてまっすぐ）、
      入る点までまっすぐ出てから道を引く（受け渡し口の前へ。下げ膳は卓へ）
    ・入る点のふさがり（SeEntryHold 3843 行め）：入る点へ向かっていて入る点から 1.2 m 以内に来たとき、入る点に
      ほかの台（中心どうし 0.6 m 以内）・人（座っている客を除く）がいれば、そこで待つ。止まりに数え、stops.csv の cause_detail は
      「入る点の手前で待った：相手」。その台が前のセンサーで自分を見て止まっているときは待たない（待ち合いにしない）
    ・瞬間移動はしない（向きを変える・走るだけ）。乱数は使わない
  記録：summary.json の standby_straight_entry（入の回だけ）＝entry_legs・straight_ins・straight_outs・entry_waits・entry_wait_s／
    run_info.json の standby_straight_entry（入の回だけ）。切の回の記録の中身は変えていない
  道具：tools/night_runner.py・tools/make_queue.py に standby_straight_entry（-ssStandbyStraightEntry・_se）を足した

1-3. check-in と実行ファイル（cm ci でファイルを1つずつ指定。保留 0）
  cs:94 店の形5つ・params・ServingRobotController・ServiceOps・HeadlessRun・ExperimentRunner・TripLogger・night_runner.py・make_queue.py
  cs:95 まっすぐの区間ではすれ違いで右へ寄らない（1-4）
  cs:96 待機点の確かめ（-ssStandbyCheck on のときだけ）で、往復させている台の様子を 5 秒ごとに standby_state.csv に書く（原因を調べるため）
  cs:97 入る点までまっすぐ出たあとの道を、近くの台・人の体をよけて引く（1-4）
  いまの Builds/headless：build_id cs97_20261107_1552・unity_cs ServiceSim/cs:97・pending_changes 空・Build Finished, Result: Success
  撮影用に同じ実行ファイルを Builds/rec27_sb112 に写した（md5 9f55881a8127d03571fb2e6ad0f8ba4c）

1-4. 確かめで分かって足したこと（入の回だけ。切の回は変わらない）
  cs:94 の待機点の確かめで、待機点3・4 の台が 900 秒たっても戻れなかった（待機点1・2・5 は戻れた）。中身は「入る」ではなく「出る」だった：
    待機点3 の台は入る点 (20.7, 10.35) までまっすぐ出たあと、受け渡し口へ地図で引いた道が並びのすぐ下（待機点1 の台の中心から 0.47 m）を通り、
    前のセンサーに待機点1 の台が入って (19.8, 10.75) で止まり続けた。地図には待機点にいる台が入っていないため。
    ・(イ) まっすぐの区間（入る・出る）では、すれ違いで右へ寄る走り方をしない（cs:95。寄ると筋から外れるため）。これだけでは結果は同じだった
    ・(ロ) 入る点からの最初の道を、回り込みと同じ印（近くの台・人の体を通れないマスとして置く）を入れて引く（cs:97。引けなければふつうの道）
    → cs:97 で待機点1〜5 とも戻れた
  ★ 同じ止まり方は切の回にもある：cs:95 で切のまま待機点3 を確かめると、同じ所 (19.9, 10.8) で 900 秒たっても出られなかった（待機点4 は出られた）。
    止まって 5 秒で近くのスタッフが来て、その場で道を引き直すたびに止まりの秒が 0 に戻るので、30 秒の呼び出しにも 60 秒の
    動けなくなったにもならない（standby_state.csv で、止まりの秒が 5 秒前後で戻り続けていた）。切の回の作りなので直していない（決めてほしいこと 2）


--------------------------------------------------------------------
2. 確かめ（cs:97）
--------------------------------------------------------------------
  比べ方：cmp112.py（依頼108 の cmp108.py の写し）
  (1) 切・1列：ref112（Builds/sb108ret_cs90・⑧5台 serve 種7・依頼108 では回していなかったので回した）と chk112off（cs:97 切）
      → 一致（conditions・contacts・dishes・give_ups・groups・nowarp_jams・park_returns・passes・people_jams・requeues・rescues・
        robot_track・run_info・staff_moves・stops・summary・timeline・trips・yields の 19 ファイル）。どちらも全員が帰った
  (2) 入：⑧5台 serve 種0 を2回（chk112a・chk112b）→ 19 ファイルとも一致。entry_legs 244・straight_ins 301・straight_outs 202・entry_waits 55・entry_wait_s 202.8
  (3) 瞬間移動 0・1コマの跳び 0（ref112・chk112off・chk112a・chk112b・本番 50 回・rec112 のどれも）
  (4) 待機点に戻れるか（依頼108 と同じ確かめ方。cs:97・入・台 k だけ受け渡し口に一番近い卓 T27 へ1往復・ほかの4台は待機点にいるまま・900 秒まで）
          台	待機点	結果	往復の秒	止まり（回／秒）	待機点まで
          1	1 (19.1, 11.35)	入れた	68.1	4／7.6	0.226 m
          2	2 (19.9, 11.35)	入れた	77.1	3／6.0	0.226 m
          3	3 (20.7, 11.35)	入れた	79.8	4／6.9	0.223 m
          4	4 (21.5, 11.35)	入れた	81.8	4／7.0	0.220 m
          5	5 (22.3, 11.35)	入れた	87.2	4／10.0	0.245 m
      戻りは入る点まで地図の道で来て、入る点から向きを北へ合わせてまっすぐ入っていた（standby_state.csv の se_stage 1 → 2）
      cs:94・cs:95 の確かめ（待機点3・4 が時間切れ）と、cs:95 の切の確かめ（待機点3 が時間切れ・4 は入れた）も残してある
  cs:94 で始めた chk112off・chk112a・chk112b は作りを直したので止めた（フォルダ名の後ろに _stopped。台帳には書かれていない）


--------------------------------------------------------------------
3. 回す（15:58〜16:53・画面なし・同時4本・上限 90 分・やり直しなし）
--------------------------------------------------------------------
  sb112ret ⑧5台 種0〜9（切）10 回・sb112se ⑧2〜5台 種0〜9（入）40 回 ＝ 50 回すべて completed（実時間 平均 4.2 分・最長 6.3 分）
  どの回も全員が帰った。比べる相手は sm101p6on（cs:87・そのまま）


--------------------------------------------------------------------
4. 表と図（10 種の中央値。回数・秒は1回あたり）
--------------------------------------------------------------------
  5台	今のまま（sm101p6on）	どかされた台が戻る（sb112ret）	戻る＋まっすぐ入る（sb112se）
  待機場所のそばの30秒以上の詰まり（行ったり来たりを除く）件／秒	39.0／2,366	54.0／3,316	28.0／1,708
    （10 回の和）	368 件／22,688 秒	523 件／31,746 秒	277 件／16,485 秒
  抜けられなかった行ったり来たり（型D）（10 回の和）	1 件／31,320 秒（種7）	0	0
  ロボットの止まりの合計秒	8,068	10,803	9,372
  うちロボット同士（秒）	5,226	6,515	4,538
  60秒動けなくなった（回）	13.5	16.0	21.5
  30秒の呼び出し（回）	112.0	113.0	180.5
  スタッフが動かした（回）	151.0	307.5	232.5
  料理ができてから届くまで（分）	1.69	1.72	1.65
  2分待って人が運んだ皿	24.0	23.5	23.5
  往復数	252.5	260.0	256.0
  全員が帰った回	9/10	10/10	10/10
  往復を終えた台が待機点から1.5m以上離れて待った秒	1,392	2	0
  入る点の手前で待った秒（回）	0	0	208.9（48.0 回）
  入店待ち（分・参考）	11.32	13.34	16.11

  型ごと（件の中央値／秒の中央値）	今のまま	戻る	戻る＋まっすぐ
    A 出る台と入る台が並びの中で向かい合う	3.0／194	5.5／251	2.0／106
    B 受け渡し口へ向かう台と戻る台	3.5／173	3.0／139	2.0／96
    C1 待機点にいる台のそばで戻る台が入れない	10.5／657	21.0／1,238	8.0／487
    C2 はみ出して止まった台	2.5／204	0／0	0／0
    E 出る台が出られない	1.0／44	1.0／33	0／0
    F 出る台どうし	2.5／128	3.5／194	1.0／55
    G 戻る台どうし	4.0／195	9.0／654	5.5／395
    H 受け渡し口から卓へ向かう台がからむ	8.5／446	7.5／378	5.5／357
    Z そのほか	1.0／38	0／0	0／0

  2〜4台	2台 今のまま	2台 まっすぐ	3台 今のまま	3台 まっすぐ	4台 今のまま	4台 まっすぐ
  待機場所のそばの30秒以上の詰まり 件／秒	2.0／77	1.5／57	10.0／425	4.0／270	19.0／971	15.0／847
  抜けられなかった行ったり来たり	0	0	0	0	0	0
  ロボットの止まりの合計秒	1,810	2,279	3,959	4,146	5,903	6,102
  うちロボット同士（秒）	610	369	1,679	1,265	3,282	2,549
  60秒動けなくなった（回）	3.0	3.0	5.5	6.0	9.0	9.5
  30秒の呼び出し（回）	42.5	71.5	64.5	105.0	59.0	142.5
  スタッフが動かした（回）	35.5	82.0	82.5	142.0	115.5	204.5
  料理ができてから届くまで（分）	2.27	2.29	1.91	1.86	1.72	1.69
  2分待って人が運んだ皿	78.5	77.5	40.5	39.5	30.5	28.0
  往復数	142.0	136.5	203.0	195.5	231.0	237.5
  全員が帰った回	10/10	10/10	10/10	10/10	10/10	10/10
  往復を終えた台が待機点から1.5m以上離れて待った秒	0	0	292	0	272	5
  入る点の手前で待った秒（回）	0	26.2（8.0）	0	72.5（25.0）	0	166.1（37.0）
  入店待ち（分・参考）	10.94	10.26	10.71	11.67	11.76	14.21

  数え方：agg112.py の頭に書いた（agg105.py と同じ。止まりは stops.csv で、どかされた台の戻りの止まり trip_id 0 も入る）。
    詰まりの型分けは ep112.py（依頼108 の ep108.py の写しに、入る点へ向かう台も「自分の待機点へ戻る」とみる1か所を足した）。
    「待機点から1.5m以上離れて待った秒」は robot_track.csv（5 秒ごと）の段「往復おわり」「待機」で自分の待機点から 1.5 m 以上の行 × 5 秒。
    「入る点の手前で待った秒」は stops.csv の cause_detail が「入る点の手前で待った：」の行（summary の entry_wait_s は測り始める前も入るので少し大きい：5台 251.4）
  気づいたこと
    ・まっすぐ入るで、待機場所のそばの詰まりは今のままより 28％ 少なくなった（5台・件）。C1・A・E・F が減った。ただ G（戻る台どうし）は今のままより多い
    ・まっすぐ入るでは 30 秒の呼び出しが 2〜5 台とも今のままの 1.6〜2.4 倍・スタッフが動かした回数も多い。
      入る点の手前の待ちを止まりに数えるので、5 秒で近くのスタッフが来る・30 秒で呼ぶに入っている
    ・どかされた台が戻る（sb112ret）だけだと、待機点を離れて待つ台は無くなったが、待機場所のそばの詰まり（特に C1・G）は今のままより増えた
  図：night/20261107_sb112/fig_where_by_type_sb112.png（報告の置き場所の 20261107_sb112_files/ にも写した）
    依頼104 の fig_where_by_type.png と同じ下地に、3つを横に並べた。赤い円の大きさ＝詰まりの秒。題の下の大きい字が
    「待機場所のそばの 30 秒以上の詰まりの合計（行ったり来たりを除く・10 回の和）」：今のまま 368 件・22,688 秒／戻る 523 件・31,746 秒／戻る＋まっすぐ 277 件・16,485 秒
  表の全体：night/20261107_sb112/agg112_out.txt（20261107_sb112_files/ にも写した）・型分けの行は ep_<名札>_r<台数>.csv


--------------------------------------------------------------------
5. 撮る（15:59〜17:14）
--------------------------------------------------------------------
  ⑧5台 serve 種7・戻る＋まっすぐ入る を1本（依頼105 と同じ撮り方：rec_runner.py の写し・斜め2つ wide_l30／wide_r30・道の線なし・上限 120 分）
    回の名前 20261107_rec112_cs97_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove_se（名札 rec112。撮らない回 sb112se・前の撮影 rec101b・rec105 と違う名前）
    completed・全員が帰った・瞬間移動 0・1コマの跳び 0
    置き場所 /Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sb112_20261107/se/（mp4・frames・camera と timeline・summary・stops など）
  並べた動画：rec_sb112_20261107/slow_now_se/slow_now_se_panel.mp4（61.5 秒・3840×1280・30fps・5.3 MB）
    題「⑧ ロボット5台：斜めに寄る と まっすぐ入る」。左＝依頼101b の now（rec_sm101_20261107/on_now）・右＝今回
    寄った5分：店の時刻 3,180〜3,480 秒（0時間53分〜58分）＝ now で待機場所のそばの止まりがいちばん長い5分（467 秒）。
      その5分の待機場所のそばの止まり：左 467 秒・右 56 秒
    店全体の引き 1.5 秒 → 待機場所のそば（店の座標 20.2, 10.9）に寄って店の時刻の5倍で 60 秒。確かめ用のコマ4枚と _log.txt を同じ所に置いた
    作った台本：select112.py・slow112.py・mpv112.py（依頼105 の写し。題・左右の名前・出力先だけ変えた）


--------------------------------------------------------------------
台帳
--------------------------------------------------------------------
  3,515 行（始める前）→ 3,570 行（追記 55 行だけ。どれも completed）
    ref112（cs:90）1・chk112off・chk112a・chk112b（cs:97）3・sb112ret 10・sb112se 40・rec112 1
  先頭 3,515 行の md5 は 13095221b8872182bf9f0955807256ae（始める前と同じ）。終わったあとの md5 f8bb26f1a343be4b6da186aff502f3ce。鍵ファイルは残っていない
  除く一覧は変えていない（27 行・md5 dcaed1a6000e1426600e4d7a03058ab0）
  待機点の確かめ（sbchk112・sbchkoff112・dbg112）は台帳に書いていない（フォルダは KIOXIA に残した）


--------------------------------------------------------------------
記録の置き場所
--------------------------------------------------------------------
  KIOXIA night/20261107_sb112/：compile1〜4.log・build_cs94〜97.log・mkq112.py・q_*.json・run_chk112*.sh・run_sbchk112.sh・run_sb112.sh・rec112.sh・
    runner_*.txt・cmp112.py・cmp_*.txt・sbchk112_r1〜5.log（cs:97）・sbchk_cs94/・sbchk_cs95/・sbchkoff112_r3〜4.log・dbg_on/off.log・
    common112.py・ep112.py・agg112.py・agg112_out.txt・ep_*.csv・fig112.py・fig_where_by_type_sb112.png・
    rec_runner.py・watch112.py・post112.py・select112.py・slow112.py・mpv112.py・plan112.json・slow112_log_run.txt
  night/20261107_ref112・chk112offc97・chk112ac97・chk112bc97・sb112run・rec112（実行係の記録）
  サイトの写し：unity/site_copy_large-99db3254b08b_sb112/


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  Unity（cs:94〜97）：Robot/ServingRobotController.cs・Service/ServiceOps.cs・Experiment/ExperimentRunner.cs・Experiment/TripLogger.cs・
    Experiment/HeadlessRun.cs・Experiment/serving-robot-params.json・Store/Layouts/large/ の5つ・tools/night_runner.py・tools/make_queue.py
  Builds/headless（cs:97 に作り直し）・Builds/rec27_sb112（新しく足した写し）
  KIOXIA：archive/unity_ledger_v1_pre_112_20261107/・台帳への追記 55 行・上の置き場所のもの・rec_sb112_20261107/
  このファイルと 20261107_sb112_files/（図・表）
  変えていない：サイト（何も上げていない）・除く一覧・standby_queue／repeat_stop／人の先よけ（切のまま）・⑨・下げ膳（回していない）


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. まっすぐ入るの作りに、note に書かれていないことを3つ入れた。このままでよいか
       ・入る点からの最初の道は、近くの台・人の体をよけて引く（これが無いと待機点3・4 の台が出られなかった。1-4）
       ・まっすぐの区間ではすれ違いで右へ寄らない・回り込みの道を引かない
       ・入る点の手前で待つのは「入る点から 1.2 m 以内に来て、入る点から 0.6 m 以内に台（人は体の半径の和＋0.1 m）がいるとき」。
         待ちは止まりに数えるので、5 秒で近くのスタッフが来る・30 秒で呼ぶにも入る（30 秒の呼び出しが今のままより多い一因）
  2. 切の回（今のまま・sb112ret）にも、並びのすぐ下で前のセンサーに待機点の台が入ったまま、5 秒ごとの近くのスタッフの引き直しで止まりの秒が
     0 に戻り続け、30 秒の呼び出しにも 60 秒にもならない止まり方がある（待機点の確かめ・切の待機点3 で 900 秒）。
     ふだんの回では、ほかの台が動くので解けていた。直すか（直すと切の回の結果が変わる）
  3. まっすぐ入るは、待機場所のそばの詰まりは減ったが、30 秒の呼び出し・60 秒動けなくなった・止まりの合計は今のままより多い。
     標準にするか・入る点の手前の待ちを止まりに数えるか（スタッフが来る対象にするか）

判定：合格
```

### 待機場所のそばの詰まりの位置（今のまま・どかされた台が戻る・戻る＋まっすぐ入る）

【画像】LOG456_08_straight_entry_112.png ⑧ロボット5台・10回分の、待機場所のそばのロボット同士の30秒以上の詰まりの始めの位置。左から、今のまま（368件・22,688秒）、どかされた台が戻る（523件・31,746秒）、戻る＋まっすぐ入る（277件・16,485秒）

【動画】LOG456_11_straight_entry.mp4 ⑧ロボット5台の開店53〜58分の待機場所のそば。左が今のまま、右が待機点の真下からまっすぐ入る形。店の時刻の5倍で流す。この5分の待機場所のそばの止まりは、左467秒、右56秒

待機場所のそばの止まり合いは減りました。一方で、30秒の呼び出しは112回から180.5回に増えました。もう1つ、気になる数え方が見つかりました。入る点の手前で順番を待つ台が、止まりとして数えられ、近くのスタッフに動かされていたことです。順番を待つのは止まっているのではなく、並んでいるだけです。


## 作業ログ ― 依頼114：入る点の待ちを止まりから外し、止まりの数え間違いを直した

入る点の手前で順番を待つ間は、止まりとして数えないことにしました（5秒・30秒・60秒のきっかけにも入れない）。あわせて、依頼112 の報告にあった数え間違いを直しました。近くのスタッフがその場で道を引き直すたびに、止まりの秒が0に戻り、30秒の呼び出しにならない止まり方があったためです。

### params の差分（p2m-site commit e70e145）

```diff
commit e70e145d6e4dec116b20218484cf513adde3fc44
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 7 17:36:58 2026 +0900

    params: standby_straight_entry に、入る点の手前の順番待ちは止まりとして扱わない決まりを足す（既定は切のまま）


diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index 153328e..4aba54c 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -435,7 +435,7 @@
    "value": false,
    "role": "site_rule",
    "entry_back_m": 1.0,
-   "note": "（切）待機点へ戻るロボットは、待機点の真正面（壁から離れる向き）に entry_back_m（1.0m）下がった「入る点」まで来てから、待機点へまっすぐ入る。出るときも、入る点までまっすぐ下がってから向きを変える（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。待機点の間が0.8mの1列では、斜めに寄ると前のセンサー（中心から0.85m）に隣の待機点の台が入って止まり合っていたため。待機点の間を広げる案は、受け渡し口の前と右の卓へ上がる道があって⑧では1.1mまでしか取れず、2列の案は手前の列のすき間で台が戻れなかったので、店の形は変えず、入り方の決まりで直す。入る点がほかの台・人でふさがっていたら、入る点の手前で待つ。店の形と試算の数字は変わらない"
+   "note": "（切）待機点へ戻るロボットは、待機点の真正面（壁から離れる向き）に entry_back_m（1.0m）下がった「入る点」まで来てから、待機点へまっすぐ入る。出るときも、入る点までまっすぐ下がってから向きを変える（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。待機点の間が0.8mの1列では、斜めに寄ると前のセンサー（中心から0.85m）に隣の待機点の台が入って止まり合っていたため。待機点の間を広げる案は、受け渡し口の前と右の卓へ上がる道があって⑧では1.1mまでしか取れず、2列の案は手前の列のすき間で台が戻れなかったので、店の形は変えず、入り方の決まりで直す。入る点がほかの台・人でふさがっていたら、入る点の手前で待つ。店の形と試算の数字は変わらない。2026-11-07 に足した決まり（依頼112 の結果を見てエイイチが了承）：入る点の手前で順番を待っている台は、止まった台として扱わない。近くのスタッフが動かしに来る（5秒）・30秒の呼び出し・60秒動けない、のどれにも数えず、待った時間は別に記録する（並んで待つロボットを店員はどかさないため）"
   }
  },
  "stores": {
```

### 依頼114 の依頼文

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 420
---
# 依頼114：入る点の手前の順番待ちを止まりから外し、止まりの秒が0に戻る数え間違いを直して、⑧で比べ直す

依頼112 の報告（claude_code_reports/20261107_sb112.txt）を読んで、エイイチと決めたこと（2026-11-07）：
1. 入る点の手前で順番を待っている台は、止まった台として扱わない。近くのスタッフが動かしに来る（5秒）・30秒の呼び出し・60秒動けない、のどれにも数えない。待った時間は別に記録する（並んで待つロボットを店員はどかさないため）。params の unity_rules.standby_straight_entry の note に書き足した（p2m-site commit e70e145。value は切のまま）
2. 依頼112 の決めてほしいこと2の数え間違いを直す：近くのスタッフが道を引き直すたびに止まりの秒が0に戻り、ずっと止まっているのに30秒の呼び出しにも60秒にもならない。直すと今のまま（切）の回の結果も変わるが、それでよい
3. 依頼112 の決めてほしいこと1（まっすぐ入るの作りに足した3つ）は、このままでよい
4. standby_straight_entry を標準にするかは、この依頼の結果を見てから決める

範囲は⑧（large_p6）の配膳だけ。ほかの店・⑨・下げ膳は回さない。staff_moves_robot は入（すぐ押す）、人の先よけ・standby_queue・repeat_stop は切。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が cs:97、保留 0。Unity・night_runner／rec_runner が動いていない（前の依頼113 はアーム側）。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳と除く一覧を archive/unity_ledger_v1_pre_114_20261107/ に退避（行数と md5 を報告に）
2. サイトの params を写し直し、前の写しとの違いが unity_rules.standby_straight_entry.note の文だけであることを確かめる

## 1. 直す（どちらも切り替えにしない。作りの直し）
1. 入る点の手前の待ち：standbyStraightEntry 入のとき、入る点の手前で待っている間は止まりの見張り（近くのスタッフの5秒・30秒の呼び出し・60秒・進めているかの見張り10秒で0.5m）に数えない。stops.csv には入れず、待った時間を別の列か別のファイル（例：entry_waits.csv。始まりの時刻・台・待った秒・前にいた台）に書く。summary.json の entry_wait は今のまま出す
2. 止まりの秒が0に戻る数え間違い：近くのスタッフが道を引き直したり、近くのスタッフが行くのを取り消したりしても、台がその場から動いていない（たとえば 0.3m 以内）なら、止まりの続きとして秒を足し続ける。どこで0に戻っていたか（ファイルと行）を報告に書く
3. check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- ⑧5台 serve 種0 を、standbyStraightEntry 入で2回回して一致すること
- 瞬間移動 0
- 依頼112 の待機点の確かめ（ほかの4台が待機点にいるまま1台ずつ戻る）を、切と入の両方でもう一度。切の待機点3 で起きていた「止まりの秒が0に戻り続けて900秒」が、直したあとは30秒の呼び出しになることを確かめる
- 直しの前後で何が変わったかを見るため、⑧5台 serve 種7 を切で1回回し、依頼112 の sb112ret の同じ回と、30秒の呼び出し・60秒動けない・止まりの合計を並べる（一致はしなくてよい）

## 3. 回す（画面なし・同時4本・⑧ serve・すぐ押す 入）
直しで今のまま（切）の結果も変わるので、比べる相手も回し直す。
1. ⑧5台（条件 138）× 種0〜9：どかされた台が戻る（依頼108 の直し）＋ standbyStraightEntry 切 ＝ 10回（label sb114ret）
2. ⑧5台 × 種0〜9：どかされた台が戻る ＋ standbyStraightEntry 入 ＝ 10回（label sb114se）
3. ⑧2〜4台（条件 92・136・137）× 種0〜9：切と入の両方 ＝ 60回（label sb114ret・sb114se）
- 1回の上限は 90 分。止まっても回し直さない

## 4. 表と図（10種の中央値）
- 2〜5台それぞれで、sb114ret と sb114se の2列（参考に依頼112 の sm101p6on・sb112ret・sb112se も横に置く）：待機場所のそばの30秒以上の詰まり（依頼104 の型分け）の件数と秒（抜けられなかった行ったり来たりは別に書く）・ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数・スタッフが動かした回数・料理ができてから届くまで・2分待って人が運んだ皿・往復数・全員が帰った回・入る点の手前で待った秒と回数・入店待ち（参考）
- 入店待ちが sb114ret より sb114se の方が長いときは、なぜ長いのかを、時刻ごとの席の空き（timeline.csv の満席の時間・片付けを待つ卓）と、スタッフの仕事の割合で調べて書く
- 図：依頼112 の fig_where_by_type_sb112.png と同じ描き方で、⑧5台の sb114ret と sb114se を横に並べる。図の上に、それぞれの「待機場所のそばの30秒以上の詰まりの合計」と「ロボットの止まりの合計」「入店待ち」を大きく書く

## 5. 撮る（2 が通れば撮る）
- ⑧5台 serve 種7 を、sb114se と同じ作りで1本。撮り方は依頼112 と同じ。置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sb114_20261107/se/
- 依頼112 で撮った now（今のまま）と左右に並べ、待機場所のそばに寄せて店の時刻の5倍で流すパネル付きの動画を作る。寄る5分は依頼112 と同じ5分。題「⑧ ロボット5台：斜めに寄る と まっすぐ入る（順番待ちは止まりにしない）」
- 撮った回の名前が、撮らない回や前の撮影と同じにならないようにする

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sb114.txt に：始める前の確かめ、1 の直し（どのファイルのどこ）、2 の確かめ、4 の表と図の置き場所、5 の動画の名前と長さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 依頼114 の結果

```text
# 結果：20261107_114_入る点の待ちを止まりから外し止まりの数え直しを直して⑧で比べる

- 状態：完了
- 始めた時刻：2026-11-07 17:38
- 終わった時刻：2026-11-07 19:37（120分）
- 作業フォルダ：/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume e41db82b-792a-4651-a142-dd9ba70db7cf`

## Claude Code の報告

**やったこと**
- 始める前の確かめ：作業場所は cs:97・保留 0 で、Unity・実行係は動いていませんでした。KIOXIA はマウント済みで、鍵ファイルはありませんでした。台帳と除く一覧は archive/unity_ledger_v1_pre_114_20261107/ に退避しました。
  - 台帳：3,570 行・md5 f8bb26f1a343be4b6da186aff502f3ce
  - 除く一覧：27 行・md5 dcaed1a6000e1426600e4d7a03058ab0
- サイトの params（e70e145）を写し直しました。前の写しとの違いは standby_straight_entry.note の文だけでした。
- 直し1（入る点の手前の待ち）：待っている間は止まりとして扱わないようにしました。5秒・30秒・60秒・進めているかの見張りのどれにも入りません。待った分は stops.csv に入れず、entry_waits.csv に1回ずつ書きます。
- 直し2（止まりの秒の数え間違い）：0 に戻っていたのは ServingRobotController.cs（cs:97）の2か所です。
  - 3118 行め：ClearAfterRescue。近くのスタッフがその場で道を引き直したときと、相手の台を動かしたあとに通っていました。
  - 1581 行め：台が少しでも動いたコマ。スタッフが行くのを取り消したときに通っていました。
  - 近くのスタッフが行くと決めた止まりは、止まり始めた所から 0.3 m 以内なら秒を足し続けるようにしました。
- cs:98 で check-in し、待機点の確かめで呼び出しの記録も書くように cs:99 を足しました（保留 0）。実行ファイルは cs99 で作り直しました。
- 確かめ・本番 80 回・撮影 1 本・表・図・動画を作り、報告ファイルに書きました。

**結果**
- **確かめはすべて通りました。**
  - ⑧5台 種0 入の2回は全 20 ファイル一致しました。
  - 瞬間移動は全部の回で 0 でした。
  - 待機点の確かめは、入では 1〜5 とも戻れました。
  - 切の待機点3 は、前は止まりの秒が 0 に戻り続けて 900 秒でしたが、直したあとは 30 秒の呼び出しになりました（19 回）。ただし呼ばれたスタッフが毎回「その場で引き直し」になるため、900 秒の時間切れは残っています。
- **直しの前後（⑧5台 種7・切）：** 30 秒の呼び出しは 136 → 115 回、60 秒動けないは 15 → 25 回、止まりの合計は 9,750 → 11,699 秒になりました。
- **⑧5台（10 種の中央値）：**

| 項目 | sb114ret | sb114se |
|---|---|---|
| 待機場所のそばの 30 秒以上の詰まり | 54.0 件・3,317 秒 | 24.0 件・1,255 秒 |
| 止まりの合計 | 11,083 秒 | 8,703 秒 |
| 30 秒の呼び出し | 115.5 回 | 180.0 回 |
| 入店待ち | 12.22 分 | 14.90 分 |

- **入店待ちが長い理由：** sb114se では、待機点に入った台が人の道をふさいで呼ばれる回が約 1.9 倍に増えました。その分スタッフの手すきが 25.6% → 20.3% に減り、片付けを待つ卓が 0.80 → 1.85、満席の時間が 93 → 104.5 分に延びました。
- **見つかった問題：** 2台が互いの入る点をふさいで互いに待つと、だれも来ないので解けません。sb114se の 40 回のうち3回で起きました。
  - 2台・種9：約4時間、回の終わりまで解けませんでした。
  - 4台・種1：3台が約 24 分待ちました。
- **撮影と動画：** 撮影は completed・瞬間移動 0 でした。動画は slow_now_se_panel.mp4（61.5 秒・3840×1280）です。
  - 寄った5分は依頼112 と同じ 3,180〜3,480 秒です。今回の撮影はこの時間帯では依頼112 の撮影と台の動きが同じなので、右側は依頼112 の動画と同じ絵です。
  - 右パネルの上の小さな名前が少し切れています。
- **台帳：** 3,570 → 3,657 行で、87 行足しただけです（すべて completed）。先頭 3,570 行の md5 は始める前と同じで、終わったあとの md5 は 51f613d2e476d59588247c07ac87a19a です。

**変えたファイル**
- Unity：ServingRobotController.cs・ServiceOps.cs・ExperimentRunner.cs・TripLogger.cs・serving-robot-params.json（cs:98・99）
- 実行ファイル：Builds/headless（作り直し）・Builds/rec28_sb114（新しく足した写し）
- KIOXIA：night/20261107_sb114/（台本・表・図）・rec_sb114_20261107/・台帳への追記・退避フォルダ
- 報告：claude_code_reports/20261107_sb114.txt と 20261107_sb114_files/・site_copy_large-99db3254b08b_sb114/

**決めてほしいこと**
1. 入る点の手前の待ち合いを直すかどうか、どう直すか。たとえば「相手が自分を待っているときは待たない」を足す、または待ちが一定の秒を超えたら止まりに戻す、など。直すと sb114se を回し直すことになります。
2. 入る点の手前で待っている台が、ほかの台の止まりの相手としてスタッフに動かされていました（5台 10 回で 32 回）。これも止めるかどうか。
3. 30 秒の呼び出しのあとの助けでも、止まりの秒を続けて数えるかどうか。今は 0 に戻るので、切の待機点3 は 60 秒にならず時間切れのままです。
4. standby_straight_entry を標準にするかどうか。詰まりは減りましたが、呼び出しと入店待ちは増えました。1 の待ち合いも合わせて見て決めてください。

判定：合格
```

### 依頼114 の Claude Code の報告（20261107_sb114.txt）

```text
====================================================================
依頼114：入る点の手前の順番待ちを止まりから外し、止まりの秒が0に戻る数え間違いを直して、⑧で比べ直す
2026-11-07 17:38〜19:45　作業場所 cs:97 → cs:98（2つの直し）→ cs:99（待機点の確かめで呼び出しの記録も書く）
====================================================================

結論
  ・0〜5 をすべてやった。止める線（瞬間移動・同じ種の2回の違い）には当たっていない
  ・2 の確かめはすべて通った（種0 入の2回が全20ファイル一致・瞬間移動 0・待機点の確かめ 入は1〜5 とも戻れた・
    切の待機点3 は「止まりの秒が0に戻り続けて900秒」から「30秒の呼び出し」になった）
  ・⑧5台（10 種の中央値）：待機場所のそばの 30 秒以上の詰まり（行ったり来たりを除く）
      sb114ret 54.0 件・3,317 秒 → sb114se 24.0 件・1,255 秒（10 回の和 537 件・32,885 秒 → 228 件・12,442 秒）
    ロボットの止まりの合計 11,083 → 8,703 秒・60 秒動けなくなった 24.0 → 23.0 回。一方 30 秒の呼び出しは 115.5 → 180.0 回・入店待ちは 12.22 → 14.90 分
  ・★ 入る点の手前の待ちを止まりから外したので、2台が互いの入る点をふさいで互いに待つ「待ち合い」が解けなくなる回が出た
    （sb114se 40 回のうち3回。2台・種9 は 3,115 秒から回の終わりまで約4時間。決めてほしいこと 1）


--------------------------------------------------------------------
0. 始める前の確かめ（17:38〜17:42）
--------------------------------------------------------------------
  1. 作業場所 cs:97 - head・保留 0。Builds/headless は cs97_20261107_1552・pending_changes 空
     Unity エディタ・night_runner・rec_runner は動いていなかった（Unity Hub と、この依頼の claude だけ）。KIOXIA マウント済み／unity_ledger_v1.lock なし
     退避：archive/unity_ledger_v1_pre_114_20261107/
       unity_ledger_v1.csv　3,570 行・md5 f8bb26f1a343be4b6da186aff502f3ce（依頼112 の終わりと同じ）
       unity_ledger_v1_excluded_runs.csv　27 行・md5 dcaed1a6000e1426600e4d7a03058ab0（依頼112 の終わりと同じ）
  2. サイトの params：p2m-site e70e145（main と同じ）の public/sim/serving-robot-params.json を gh api で取った
       置き場所 unity/site_copy_large-99db3254b08b_sb114/params.json（md5 d6a7f77c6159bcd2b3776350074f6e94）
       前の写し（site_copy_large-99db3254b08b_sb112/params.json・md5 fb21c19c…）と JSON を中まで比べた違いは
       unity_rules.standby_straight_entry.note の1つだけ（文の終わりに「2026-11-07 に足した決まり…待った時間は別に記録する…」が足された）。
       value は false のまま・entry_back_m 1.0 のまま → 依頼どおり。Unity の Experiment/serving-robot-params.json をこれに写した（cs:98）


--------------------------------------------------------------------
1. 直す（どちらも切り替えにしない作りの直し・cs:98）
--------------------------------------------------------------------
1-1. 入る点の手前の待ち（standbyStraightEntry 入のときだけ起きる）
  Robot/ServingRobotController.cs
    ・1459 行め else if (seHold)：止まっている分け方に「入る点の手前で順番を待っている」を、通路の入口・1本道の順番待ちと同じ形で足した。
      このあいだは止まりの記録を開かない（開いていれば閉じる）・止まりの秒（_stoppedTimer）は 0 のまま・止まった回数／長さに入れない。
      → 近くのスタッフの5秒（StoppedOnRunFor は止まりの中だけ）・30 秒の呼び出し・60 秒には入らない
    ・1606 行め：進めているかの見張り（10 秒で 0.5 m）とくり返し止まるの見張りに、わざと待っている分として渡す（見張りを始め直す）
    ・依頼112 で止まりの原因に「入る点の手前で待った：相手」を入れていた所は消した（stops.csv にはもう出ない）
    ・3955 行め SeCountWait：待ち始めに1行を開き、待ちが終わったら閉じる
  Service/ServiceOps.cs 2690 行め EntryWaitRow・BeginStandbyEntryWait・EndStandbyEntryWait（1回ずつの記録）
  Experiment/TripLogger.cs 494 行め WriteEntryWaitsCsv・Experiment/ExperimentRunner.cs 2026 行め
    → entry_waits.csv（入の回だけ書く。切の回のファイルは今までと同じ）
       列：condition_id,seed,robot_id,t_s（待ち始め）,end_t_s（待ち終わり。回の終わりまで待っていたら空）,wait_s,front（待ち始めに入る点にいた台・人）,
           x,z（待った所）,entry_x,entry_z（入る点）
  summary.json の standby_straight_entry（entry_waits・entry_wait_s）は今までどおり出す（数え方も同じ。止まりにはもう入っていない）

1-2. 止まりの秒が 0 に戻る数え間違い
  0 に戻っていた所（cs:97 の行）
    ・Robot/ServingRobotController.cs 3118 行め（ClearAfterRescue の _stoppedTimer = 0f）
        近くのスタッフが着いて「その場で引き直した」とき（FinishRescueMove 2640 行め → ClearAfterRescue）と、
        相手の台を動かしたあとに呼んだ台を走らせ直すとき（ServiceOps.cs 2359 行め CompleteStuckRescue → ResumeAfterPartnerRescued 3111 行め → ClearAfterRescue）
    ・同じファイル 1581 行め（速さが少しでも出たコマで _stoppedTimer = 0f）
        近くのスタッフが行くと決めたあと台が少し動く（取り消しになる）と、ここで 0 に戻っていた
  直し方（cs:98）
    ・止まりが始まった所を覚える（1481 行め）。近くのスタッフが行くと決めた止まり（ServiceOps.StartStaffMove 2656 行め → MarkStaffMoveCalled）では、
      台が止まりの始めた所から 0.3 m 以内（StallCarryNearM 2393 行め）にいるあいだ、上の2か所で 0 に戻さず、止まりの続きとして秒を足し続ける
      （1595 行め・3185 行め。近くのスタッフの助けかどうかは ServiceOps が CarryStallOnClear を立てて渡す：2340・2362 行め）
    ・近くのスタッフの5秒の数えは今までどおり、引き直し・少し動いたところから数え直す（StaffMoveStoppedNowS。staff_moves.csv の stopped_s も今までと同じ意味）
    ・30 秒の呼び出し・60 秒で動けなくなったあとの助けが終わったときは今までどおり 0 に戻す（60 秒を超えて続けると、すぐまた動けなくなるのをくり返すため）
    ・stops.csv の行の切れ目は今までどおり（足し続けるのは見張りの秒だけ）
1-3. check-in と実行ファイル（cm ci でファイルを1つずつ指定。保留 0）
  cs:98 ServingRobotController.cs・ServiceOps.cs・ExperimentRunner.cs・TripLogger.cs・serving-robot-params.json
  cs:99 ExperimentRunner.cs：待機点の確かめ（-ssStandbyCheck on のときだけ）で rescues.csv と staff_moves.csv も書く（30 秒の呼び出しを確かめるため。ふだんの回は変わらない：
        cs:98 と cs:99 で種0 入・種7 切がそれぞれ全20／19ファイル一致）
  いまの Builds/headless：build_id cs99_20261107_1755・unity_cs ServiceSim/cs:99・pending_changes 空・Build Finished, Result: Success
  撮影用に同じ実行ファイルを Builds/rec28_sb114 に写した（md5 efe78f870ba03c55974e20d09c871bcc）


--------------------------------------------------------------------
2. 確かめ（cs:99。cs:98 でも同じ結果）
--------------------------------------------------------------------
  (1) ⑧5台 serve 種0・入を2回（chk114a・chk114b）→ 20 ファイルとも一致（entry_waits.csv を含む）。
      entry_legs 245・straight_ins 323・straight_outs 194・entry_waits 57・entry_wait_s 674.9。stops.csv に「入る点の手前で待った」の行は 0
  (2) 瞬間移動 0・1コマの跳び 0（確かめ 6 回・本番 80 回・撮影 1 回のどれも）
  (3) 待機点に戻れるか（依頼112 と同じ確かめ方。台 k だけ T27 へ1往復・ほかの4台は待機点にいるまま・900 秒まで）
          台	入（まっすぐ入る）	切（斜めに寄る）
          1	入れた 68.1 秒	入れた 69.2 秒
          2	入れた 77.1 秒	入れた 87.2 秒
          3	入れた 79.8 秒	時間切れ 900 秒（30 秒の呼び出し 19 回・近くのスタッフが動かした 101 回）
          4	入れた 81.8 秒	入れた 102.9 秒（近くのスタッフ 1 回）
          5	入れた 87.2 秒	入れた 95.1 秒
      入は依頼112（cs:97）と同じ秒で全部入れた。
      切の待機点3：依頼112 では止まりの秒が 5 秒前後で 0 に戻り続け、30 秒の呼び出しは 0 回だった。直したあとは止まりの秒が 30 秒まで伸びて
        30 秒の呼び出しになった（50.6 秒から 45 秒おきに 19 回）。ただし呼ばれたスタッフは相手（待機点2 の台）の動かし先を見つけられず
        毎回「その場で引き直した」になり、30 秒の呼び出しのあとの助けは今までどおり止まりの秒を 0 に戻すので、60 秒にはならず、900 秒の時間切れは残った（決めてほしいこと 3）
  (4) 直しの前後（⑧5台 serve 種7・切。前＝依頼112 の sb112ret 種7（cs:97）・後＝chk114off7（cs:99。本番の sb114ret 種7 と全ファイル一致））
          項目	前	後
          30 秒の呼び出し（回）	136	115
            うち止まった台が呼んだ分（止まりの秒 25 秒以上）	19	28
          60 秒動けなくなった（回）	15	25
          ロボットの止まりの合計（秒）	9,750	11,699
          うちロボット同士（秒）	5,743	6,778
          スタッフが動かした（回）	251	313
          往復数	259	253
          入店待ち（分）	13.66	11.67
      30 秒の呼び出しの数の多くは「止まっている台が人の道をふさいでいた」（人の側から呼ぶ・止まりの秒 0）で、こちらは減った。
      止まった台が自分で呼んだ分と 60 秒は増えた（直しで、続けて止まっている台が呼べるようになったため）


--------------------------------------------------------------------
3. 回す（18:02〜19:33・画面なし・同時4本・上限 90 分・やり直しなし）
--------------------------------------------------------------------
  sb114ret（切）⑧2〜5台 × 種0〜9 ＝ 40 回・sb114se（入）⑧2〜5台 × 種0〜9 ＝ 40 回 ＝ 80 回すべて completed
  実時間 平均 4.5 分・最長 8.4 分（撮影と同時のため初めの回は長い）。どの回も全員が帰った
  条件：⑧5台 large_p6_s6_r5_a70（138）・4台 r4（137）・3台 r3（136）・2台 r2（92）。すぐ押す 入・人の先よけ／standby_queue／repeat_stop 切


--------------------------------------------------------------------
4. 表と図（10 種の中央値。回数・秒は1回あたり）
--------------------------------------------------------------------
  5台	sb114ret	sb114se	（参考）sm101p6on	sb112ret	sb112se
  待機場所のそばの30秒以上の詰まり 件／秒	54.0／3,317	24.0／1,255	39.0／2,366	54.0／3,316	28.0／1,708
    （10 回の和）	537／32,885	228／12,442	368／22,688	523／31,746	277／16,485
  抜けられなかった行ったり来たり（型D・10 回の和）	0	0	1 件／31,320 秒	0	0
  ロボットの止まりの合計秒	11,083	8,703	8,068	10,803	9,372
  うちロボット同士（秒）	6,518	3,981	5,226	6,515	4,538
  60秒動けなくなった（回）	24.0	23.0	13.5	16.0	21.5
  30秒の呼び出し（回）	115.5	180.0	112.0	113.0	180.5
  スタッフが動かした（回）	292.5	221.5	151.0	307.5	232.5
  料理ができてから届くまで（分）	1.75	1.65	1.69	1.72	1.65
  2分待って人が運んだ皿	23.5	25.0	24.0	23.5	23.5
  往復数	255.5	248.0	252.5	260.0	256.0
  全員が帰った回	10/10	10/10	9/10	10/10	10/10
  入る点の手前で待った秒（回）	0	318.0（77.5）	0	0	208.9（48.0）
  入店待ち（分・参考）	12.22	14.90	11.32	13.34	16.11

  4台	sb114ret	sb114se	（参考）sm101p6on	sb112se
  詰まり 件／秒	32.0／1,754	10.0／544	19.0／971	15.0／847
  抜けられなかった行ったり来たり	0	0	0	0
  止まりの合計秒	7,870	5,917	5,903	6,102
  うちロボット同士	4,168	2,225	3,282	2,549
  60秒動けなくなった	16.0	14.5	9.0	9.5
  30秒の呼び出し	91.0	143.0	59.0	142.5
  スタッフが動かした	213.5	173.0	115.5	204.5
  料理ができてから届くまで（分）	1.69	1.69	1.72	1.69
  2分待って人が運んだ皿	29.5	25.0	30.5	28.0
  往復数	228.0	237.5	231.0	237.5
  全員が帰った回	10/10	10/10	10/10	10/10
  入る点の手前で待った秒（回）	0	144.2（43.0）	0	166.1（37.0）
  入店待ち（分）	12.42	12.70	11.76	14.21

  3台	sb114ret	sb114se	（参考）sm101p6on	sb112se
  詰まり 件／秒	11.0／701	4.5／197	10.0／425	4.0／270
  抜けられなかった行ったり来たり	0	0	0	0
  止まりの合計秒	4,740	3,912	3,959	4,146
  うちロボット同士	2,014	1,110	1,679	1,265
  60秒動けなくなった	8.5	6.0	5.5	6.0
  30秒の呼び出し	63.5	106.0	64.5	105.0
  スタッフが動かした	140.0	134.5	82.5	142.0
  料理ができてから届くまで（分）	1.93	1.84	1.91	1.86
  2分待って人が運んだ皿	45.0	35.5	40.5	39.5
  往復数	203.5	204.0	203.0	195.5
  全員が帰った回	10/10	10/10	10/10	10/10
  入る点の手前で待った秒（回）	0	56.5（23.0）	0	72.5（25.0）
  入店待ち（分）	10.52	10.97	10.71	11.67

  2台	sb114ret	sb114se	（参考）sm101p6on	sb112se
  詰まり 件／秒	0／0（10 回の和 11／433）	0／0（4／158）	2.0／77	1.5／57
  抜けられなかった行ったり来たり（10 回の和）	0	2 件／29,380 秒（種9。下の★）	0	0
  止まりの合計秒	2,233	2,165	1,810	2,279
  うちロボット同士	520	327	610	369
  60秒動けなくなった	1.0	2.0	3.0	3.0
  30秒の呼び出し	46.5	71.0	42.5	71.5
  スタッフが動かした	77.5	73.0	35.5	82.0
  料理ができてから届くまで（分）	2.20	2.34	2.27	2.29
  2分待って人が運んだ皿	77.0	79.0	78.5	77.5
  往復数	140.0	136.5	142.0	136.5
  全員が帰った回	10/10	10/10	10/10	10/10
  入る点の手前で待った秒（回）	0	13.3（7.5）	0	26.2（8.0）
  入店待ち（分）	10.82	10.26	10.94	10.26

  （sb112ret は依頼112 で5台だけ回した。型ごとの件・秒は agg114_out.txt）
  数え方：agg114.py の頭に書いた（agg112.py と同じ）。入る点の手前で待った秒は sb114se は entry_waits.csv、sb112se は stops.csv の「入る点の手前で待った：」の行。
    sb114se では入る点の手前の待ちは stops.csv に入らないので、止まりの合計にも詰まりにも入らない（sb112se では入っていた）
    型分けの ep114.py は ep112.py の写しに1か所足した：回の終わりまで解けない詰まりで、受け渡し口の側にほかの台がいないときは一番近い台を相手にする（2台・種9 で落ちたため）

  ★ 待ち合い（入る点の手前の待ちが解けない）
    sb114se 2台・種9：台1（待機点1 へ）と台2（待機点2 へ）が 3,115 秒に、互いに相手の入る点のそば（0.23 m・0.46 m）にいて、互いに「入る点の手前で待つ」になった。
      止まりではないので、近くのスタッフも 30 秒の呼び出しも来ず、回の終わり（17,805 秒）まで 14,681 秒ずつ待った（往復 28 回。料理は人が運んで全員は帰った）。
      ep114.py ではこれが型D（2 件・29,380 秒）として出ている
    ほかに 4台・種1（3台が約 1,430 秒ずつ・14,470 秒に解けた）・4台・種3（3台が 138〜183 秒）。依頼112 では5秒で近くのスタッフが来て解けていた
    入る点の手前で待っている台が、ほかの台の止まりの相手として近くのスタッフに動かされたのは 5台 10 回で 32 回（決めてほしいこと 2）。
    待っている台が止まった台として扱われたのは 10 回で 2 回だけ（待ち始めと同じコマで近くのスタッフが決まった1回・道をふさがれたスタッフの1回）

  入店待ちが sb114ret より sb114se の方が長い（5台 12.22 → 14.90 分・4台 12.42 → 12.70・3台 10.52 → 10.97。2台は 10.82 → 10.26 で短い）ことを調べた（why114.py）
    5台	sb114ret	sb114se
    満席の時間（分）	93.0	104.5
    片付けを待つ卓（平均）	0.80	1.85
    入店を待つ組（平均）	5.09	6.27
    スタッフの仕事の割合：待機（手すき）	25.6%	20.3%
    　　　　　　　　　　　片付け	33.8%	36.7%
    　　　　　　　　　　　立ち往生（ロボットの助け）	5.6%	7.2%
    30 秒の呼び出しの人の秒（rescue_staff_s）	5,703	7,230
    時刻ごと（30 分きざみ）：満席の割合は 2:30〜3:00 で ret 47% → se 77%・入店を待つ組は 2:00〜 で 21.5 → 25.4 組
    ・30 秒の呼び出しの多くは「止まっている台が人の道をふさいでいた」（人の側から呼ぶ）で、5台 10 回の和で ret 863 件・人の秒 33,607 → se 1,602 件・67,160 秒。
      どれも待機点の上（y 11.0 以上）で起きている。まっすぐ入るでは台が待機点の真ん中にきちんと入るので、待機点の並びを通る人の道をふさぐ回が増えたとみる
    ・その分スタッフの手すきが減り、片付けを待つ卓が増えて席の回りが遅れ、終わり近く（2:30〜）まで満席が続いて入店待ちが長くなった
    ・4台・3台も同じ向き（片付けを待つ卓 0.50→0.65・0.32→0.35、立ち往生の割合 3.8→5.1%・2.2→3.3%）で、差は小さい
    全体：night/20261107_sb114/why114_out.txt・why114_person_calls.txt

  図：night/20261107_sb114/fig_where_by_type_sb114.png（報告の置き場所の 20261107_sb114_files/ にも写した）
    依頼112 の fig_where_by_type_sb112.png と同じ下地・描き方で sb114ret と sb114se を横に並べた。題の下に大きく
      sb114ret：詰まり 537 件・32,885 秒（10 回の和）／1回あたり 3,317 秒・止まりの合計 1回あたり 11,083 秒・入店待ち 12.22 分
      sb114se ：詰まり 228 件・12,442 秒（10 回の和）／1回あたり 1,255 秒・止まりの合計 1回あたり 8,703 秒・入店待ち 14.90 分
  表の全体：night/20261107_sb114/agg114_out.txt（20261107_sb114_files/ にも写した）・型分けの行は ep_<名札>_r<台数>.csv


--------------------------------------------------------------------
5. 撮る（18:02〜19:26）
--------------------------------------------------------------------
  ⑧5台 serve 種7・sb114se と同じ作り（cs:99・どかされた台が戻る＋まっすぐ入る・順番待ちは止まりにしない）を1本（依頼112 と同じ撮り方：
    rec_runner.py の写し・斜め2つ wide_l30／wide_r30・道の線なし・上限 120 分）
    回の名前 20261107_rec114_cs99_large_p6_r5_s7_passon_sbret_ek_post_rescue_smove_se（名札 rec114。撮らない回 sb114se・前の撮影 rec112・rec101b と違う名前）
    completed・全員が帰った・瞬間移動 0・1コマの跳び 0・実時間 78 分
    置き場所 /Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sb114_20261107/se/（mp4 2本・frames・camera と timeline・summary・stops・entry_waits など）
  並べた動画：rec_sb114_20261107/slow_now_se/slow_now_se_panel.mp4（61.5 秒・3840×1280・30fps・5.4 MB）
    題「⑧ ロボット5台：斜めに寄る と まっすぐ入る（順番待ちは止まりにしない）」。左＝依頼112 と同じ now（rec_sm101_20261107/on_now）・右＝今回
    寄った5分：依頼112 と同じ店の時刻 3,180〜3,480 秒（0時間53分〜58分）・同じ寄せ枠（crop 1360×1080・店の座標 20.2, 10.9）。
    店全体の引き 1.5 秒 → 寄って店の時刻の5倍で 60 秒。確かめ用のコマ4枚と _log.txt を同じ所に置いた
    その5分の止まり：左 624 秒（待機場所のそば 467 秒）・右 219 秒（待機場所のそば 56 秒）
    ★ 今回の撮影は、依頼112 の撮影（rec112）と 4,695 秒まで台の動きが同じだった（違いは入る点の手前の待ちが stops.csv から entry_waits.csv に移っただけ）。
      寄った5分はその前なので、右の動きは依頼112 の動画の右と同じ絵になっている
    右のパネルの上の小さな名前は長くて端が少し切れている（帯の左右の名前は全部読める）
  作った台本：select114.py（寄る5分と枠は plan112.json から読む）・slow114.py・mpv114.py（依頼112 の写し）


--------------------------------------------------------------------
台帳
--------------------------------------------------------------------
  3,570 行（始める前）→ 3,657 行（追記 87 行だけ。どれも completed）
    chk114a・chk114b・chk114off7 を cs:98 と cs:99 で 各1（6）・sb114ret 40・sb114se 40・rec114 1
  先頭 3,570 行の md5 は f8bb26f1a343be4b6da186aff502f3ce（始める前と同じ）。終わったあとの md5 51f613d2e476d59588247c07ac87a19a。鍵ファイルは残っていない
  除く一覧は変えていない（27 行・md5 dcaed1a6000e1426600e4d7a03058ab0）
  待機点の確かめ（sbchk114on・sbchk114off（cs:98）・sbchk114on99・sbchk114off99（cs:99））は台帳に書いていない（フォルダは KIOXIA に残した）


--------------------------------------------------------------------
記録の置き場所
--------------------------------------------------------------------
  KIOXIA night/20261107_sb114/：compile1〜2.log・build_cs98／99.log・mkq114.py・q_*.json・run_chk114.sh・run_sbchk114.sh・run_sb114.sh・rec114.sh・
    runner_*.txt・cmp114.py・cmp_*.txt・sbchk114*_r1〜5.log・common114.py・ep114.py・agg114.py・agg114_out.txt・ep_*.csv・fig114.py・
    fig_where_by_type_sb114.png・why114.py・why114_out.txt・why114_person_calls.txt・rec_runner.py・watch114.py・post114.py・
    select114.py・slow114.py・mpv114.py・plan114.json・slow114_log_run.txt
  night/20261107_chk114*・sb114run・rec114（実行係の記録）
  サイトの写し：unity/site_copy_large-99db3254b08b_sb114/


--------------------------------------------------------------------
変えたファイル
--------------------------------------------------------------------
  Unity（cs:98・99）：Robot/ServingRobotController.cs・Service/ServiceOps.cs・Experiment/ExperimentRunner.cs・Experiment/TripLogger.cs・
    Experiment/serving-robot-params.json
  Builds/headless（cs:99 に作り直し）・Builds/rec28_sb114（新しく足した写し）
  KIOXIA：archive/unity_ledger_v1_pre_114_20261107/・台帳への追記 87 行・上の置き場所のもの・rec_sb114_20261107/
  このファイルと 20261107_sb114_files/（図・表）・unity/site_copy_large-99db3254b08b_sb114/
  変えていない：サイト（何も上げていない）・除く一覧・standby_queue／repeat_stop／人の先よけ（切のまま）・⑨・下げ膳・ほかの店（回していない）


--------------------------------------------------------------------
決めてほしいこと
--------------------------------------------------------------------
  1. 入る点の手前の待ちの待ち合い：2台が互いの入る点をふさいで互いに待つと、止まりではないのでだれも来ず解けない（sb114se 40 回のうち3回。
     2台・種9 は約4時間）。直すか・どう直すか（たとえば、今ある「相手が前のセンサーで自分を見て止まっているときは待たない」と同じく
     「相手が入る点の手前で自分を待っているときは待たない」を足す・待ちが一定の秒を超えたら止まりに戻す、など）。直すと sb114se を回し直すことになる
  2. 入る点の手前で待っている台を、ほかの台の止まりの相手として近くのスタッフが動かすこと（5台 10 回で 32 回）・道をふさがれたスタッフが動かすこと
     （1 回）は今は止めていない。待っている台は「動かさない」にもするか
  3. 30 秒の呼び出しのあとの助けで「その場で引き直した」になったときは、今までどおり止まりの秒を 0 に戻している（この依頼で直したのは近くのスタッフの分だけ）。
     このため切の待機点3 の確かめは 30 秒の呼び出しを 19 回くり返して 60 秒にはならず、900 秒の時間切れのままだった。30 秒の呼び出しの分も続けて数えるか
  4. まっすぐ入るでは、待機点に入った台が待機点の並びを通る人の道をふさぐ呼び出しが ret の約 1.9 倍（5台）で、その分スタッフの手が取られ入店待ちが長くなった。
     standby_straight_entry を標準にするかは、この結果と 1 を見て決めてほしい

判定：合格
```

### まっすぐ入る決まりの前と後（⑧5台・10種の中央値）

| 項目 | どかされた台が戻る・斜めに寄る（sb114ret） | 戻る＋まっすぐ入る（sb114se） |
|---|---|---|
| 待機場所のそばの30秒以上の詰まり | 54.0件・3,317秒 | 24.0件・1,255秒 |
| ロボットの止まりの合計 | 11,083秒 | 8,703秒 |
| 30秒の呼び出し | 115.5回 | 180.0回 |
| 入店待ち | 12.22分 | 14.90分 |

【画像】LOG456_09_straight_entry_114.png ⑧ロボット5台・10回分の、待機場所のそばのロボット同士の30秒以上の詰まりの始めの位置。左が斜めに寄る形（537件・32,885秒）、右がまっすぐ入る形（228件・12,442秒）。右では待機点の下に広がっていた詰まりが減っている

【図解】LOG456_standby_entry.html

- ねらい：待機点の間を0.8m のまま、戻る台の前のセンサーに隣の台が入らないようにする
- 変わったこと：戻る台は、待機点の真下1.0m の点まで来て、向きを合わせてからまっすぐ入る
- 見込める効果（測った値）：待機場所のそばの30秒以上の詰まりは1回あたり3,317秒から1,255秒、ロボットの止まりの合計は11,083秒から8,703秒に減った

入店待ちは12.22分から14.90分に延びました。報告では、待機点に入ったロボットが人の道をふさいで呼ばれる回が約1.9倍に増え、そのぶんスタッフの手すきが25.6%から20.3%に減り、片付けを待つ卓が増えていました。待機点の列の中を、Unity のスタッフやお客さんが通り道にしているためです。現実の店では、待機中のロボットの列は人がよけて通ります。

もう1つ、新しい詰まりが見つかりました。2台が互いの入る点をふさいで、互いに相手を待ち、だれも来ないので解けない待ち合いです。40回のうち3回で起き、2台・種9では約4時間、回の終わりまで解けませんでした。


## 作業ログ ― 依頼118 を出さずに区切った理由と、残した候補

依頼114 の報告を見て、次の依頼118 の下書きまで作りました。人は待機点の区画を通らない（people_avoid_standby）・待ち合いを解く・30秒の呼び出しのあとも止まりの秒を続けて数える、の3つです。params には people_avoid_standby を既定は切で足しました（commit 453df0f）。

ここで、次の問いが出ました。

> 区切りはどこですか？また意味もなく作業を長引かせていないですか？

この回は、どこまでやったら終わりかを先に決めずに始めていました。依頼を1つ回すたびに、次に直したい所が出てきて、そのまま次の依頼を作っていました。このシミュレーションは原因を切り分けるための道具で、Unity の中のずれを全部直すことが目的ではありません。待機場所の止まり合いの原因（間0.8m と斜めの寄り方）と、それを入り方で減らせることは、この時点で数で言えます。依頼118 は置かずに下書きのまま残し、ここで区切りました。

### params の差分（p2m-site commit 453df0f）

```diff
commit 453df0f17490481af65ca4af94d0c369824a8982
Author: Claude <noreply@anthropic.com>
Date:   Sat Nov 7 19:40:21 2026 +0900

    params: 人は待機点の区画を通らない（people_avoid_standby・既定は切）を足し、まっすぐ入るの待ち合いの決まりを書き足す


diff --git a/public/sim/serving-robot-params.json b/public/sim/serving-robot-params.json
index 4aba54c..20747f7 100644
--- a/public/sim/serving-robot-params.json
+++ b/public/sim/serving-robot-params.json
@@ -435,7 +435,12 @@
    "value": false,
    "role": "site_rule",
    "entry_back_m": 1.0,
-   "note": "（切）待機点へ戻るロボットは、待機点の真正面（壁から離れる向き）に entry_back_m（1.0m）下がった「入る点」まで来てから、待機点へまっすぐ入る。出るときも、入る点までまっすぐ下がってから向きを変える（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。待機点の間が0.8mの1列では、斜めに寄ると前のセンサー（中心から0.85m）に隣の待機点の台が入って止まり合っていたため。待機点の間を広げる案は、受け渡し口の前と右の卓へ上がる道があって⑧では1.1mまでしか取れず、2列の案は手前の列のすき間で台が戻れなかったので、店の形は変えず、入り方の決まりで直す。入る点がほかの台・人でふさがっていたら、入る点の手前で待つ。店の形と試算の数字は変わらない。2026-11-07 に足した決まり（依頼112 の結果を見てエイイチが了承）：入る点の手前で順番を待っている台は、止まった台として扱わない。近くのスタッフが動かしに来る（5秒）・30秒の呼び出し・60秒動けない、のどれにも数えず、待った時間は別に記録する（並んで待つロボットを店員はどかさないため）"
+   "note": "（切）待機点へ戻るロボットは、待機点の真正面（壁から離れる向き）に entry_back_m（1.0m）下がった「入る点」まで来てから、待機点へまっすぐ入る。出るときも、入る点までまっすぐ下がってから向きを変える（2026-11-07 エイイチと決めた。⑧で今のままと比べる）。待機点の間が0.8mの1列では、斜めに寄ると前のセンサー（中心から0.85m）に隣の待機点の台が入って止まり合っていたため。待機点の間を広げる案は、受け渡し口の前と右の卓へ上がる道があって⑧では1.1mまでしか取れず、2列の案は手前の列のすき間で台が戻れなかったので、店の形は変えず、入り方の決まりで直す。入る点がほかの台・人でふさがっていたら、入る点の手前で待つ。店の形と試算の数字は変わらない。2026-11-07 に足した決まり（依頼112 の結果を見てエイイチが了承）：入る点の手前で順番を待っている台は、止まった台として扱わない。近くのスタッフが動かしに来る（5秒）・30秒の呼び出し・60秒動けない、のどれにも数えず、待った時間は別に記録する（並んで待つロボットを店員はどかさないため）。2026-11-07 に足した決まり（依頼114 の結果を見てエイイチが了承）：入る点の手前で順番を待っている台は、近くのスタッフも30秒の呼び出しで来た人も動かさない。2台が互いの入る点の手前で相手を待ち合ったときは、受け渡し口に近い待機点へ入る台が先に入り、もう1台はそのまま待つ（待ち合いで動かなくなるのを防ぐ）"
+  },
+  "people_avoid_standby": {
+   "value": false,
+   "role": "site_rule",
+   "note": "（切）スタッフとお客さんは、ロボットの待機点の区画（RobotStandby の各区画）を通り道にしない（2026-11-07 エイイチと決めた。⑧で比べる）。待機中のロボットの列は人がよけて通るのが現実の店の形のため。依頼114 で、待機点に止まっている台が人の道をふさいだとして30秒の呼び出しが多く鳴り（⑧5台・10回で1,602件）、スタッフの手が取られていた。待機点へ物を取りに行く・ロボットを動かすなど、待機点そのものに用がある人は入ってよい。店の形と試算の数字は変わらない"
   }
  },
  "stores": {
```

### 依頼118 の下書き（置いていない）

```text
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 480
---
# 依頼118：人は待機点の区画を通らない・待ち合いを解く・数え方をそろえる、を入れて、⑧で「まっすぐ入る」を比べ直す

依頼114 の報告（claude_code_reports/20261107_sb114.txt）を読んで、エイイチと決めたこと（2026-11-07）：
1. 人（スタッフ・お客さん）は、ロボットの待機点の区画を通り道にしない。待機中のロボットの列は人がよけて通るのが現実の店の形のため。params の unity_rules.people_avoid_standby（既定は切）。待機点そのものに用がある人（ロボットを動かす・物を取る）は入ってよい
2. まっすぐ入るの待ち合い（2台が互いの入る点の手前で相手を待ち、だれも来ず動かない）は、受け渡し口に近い待機点へ入る台が先に入り、もう1台はそのまま待つ（決めてほしいこと1）。params の standby_straight_entry の note に書き足した
3. 入る点の手前で順番を待っている台は、近くのスタッフも30秒の呼び出しで来た人も動かさない（決めてほしいこと2）。同じ note に書き足した
4. 30秒の呼び出しのあとの助けで「その場で引き直した」になったときも、台がその場から動いていなければ止まりの秒を続けて数える（決めてほしいこと3。依頼114 で近くのスタッフの分を直したのと同じ扱い）。作りの直し
5. standby_straight_entry を標準にするかは、この依頼の結果を見て決める

サイトは公開済み（p2m-site commit 453df0f）。店の形と試算の数字は変わっていない。
範囲は⑧（large_p6）の配膳だけ。ほかの店・⑨・下げ膳は回さない。staff_moves_robot は入（すぐ押す）、人の先よけ・standby_queue・repeat_stop は切。
**エイイチは見ていない。人に聞かないと進めない所に当たったら、その項目は止めて報告に書き、ほかは続ける。**

## 始める前に確かめること（違えば回さずに報告して終わる）
1. 作業場所・Builds/headless が cs:99、保留 0。Unity・night_runner／rec_runner が動いていない（前の依頼はアーム側）。KIOXIA がマウント済み、unity_ledger_v1.lock がない。台帳と除く一覧を archive/unity_ledger_v1_pre_118_20261107/ に退避（行数と md5 を報告に）
2. サイトの params を写し直し、前の写しとの違いが unity_rules.people_avoid_standby が1つ増えたことと、standby_straight_entry.note の文だけであることを確かめる

## 1. 作る・直す
1. **peopleAvoidStandby**（切り替え。既定は切）：人の通り道（人用 NavMesh か人の道の決め方）で、待機点の区画（RobotStandby の各区画）を通らない所にする。待機点に用がある人（近くのスタッフがロボットを動かしに行く・30秒の呼び出しで行く など）は入ってよい。区画を外したことで、人が行けなくなる所（卓・持ち場・トイレ・レジなど）が出ないことを確かめ、出たら止めて報告する
2. 待ち合いを解く（standbyStraightEntry 入のときだけ効く作りの直し）：2台が互いの入る点の手前で相手を待っているときは、受け渡し口に近い待機点へ入る台が先に入る
3. 入る点の手前で順番を待っている台は、近くのスタッフ・30秒の呼び出しで来た人のどちらも動かす相手に選ばない（standbyStraightEntry 入のときだけ効く）
4. 30秒の呼び出しのあとの「その場で引き直した」でも、台が 0.3m 以内から動いていなければ止まりの秒を続けて数える（切り替えにしない作りの直し）
5. check-in して cs と実行ファイルを作り直す（保留 0）

## 2. 確かめ（通らなければ 3 は回さない）
- ⑧5台 serve 種0 を、peopleAvoidStandby 入・standbyStraightEntry 入で2回回して一致すること
- 瞬間移動 0
- 依頼114 の待機点の確かめ（ほかの4台が待機点にいるまま1台ずつ戻る）を、standbyStraightEntry の切と入で。切の待機点3 が 60 秒（動けなくなった）まで数えられるようになったことを確かめる
- 依頼114 で待ち合いが出た3つの回（2台・種9、4台・種1、4台・種3。どれも standbyStraightEntry 入）を、peopleAvoidStandby 入で回し直し、待ち合いが解けることを確かめる

## 3. 回す（画面なし・同時4本・⑧ serve・すぐ押す 入・peopleAvoidStandby 入）
1. ⑧2〜5台（条件 92・136・137・138）× 種0〜9：どかされた台が戻る ＋ standbyStraightEntry 切 ＝ 40回（label sb118ret）
2. ⑧2〜5台 × 種0〜9：どかされた台が戻る ＋ standbyStraightEntry 入 ＝ 40回（label sb118se）
- 1回の上限は 90 分。止まっても回し直さない

## 4. 表と図（10種の中央値）
- 2〜5台それぞれで、sb118ret と sb118se の2列（参考に依頼114 の sb114ret・sb114se も横に置く）：待機場所のそばの30秒以上の詰まり（依頼104 の型分け）の件数と秒（抜けられなかった行ったり来たり・待ち合いは別に書く）・ロボットの止まりの合計秒・うちロボット同士・60秒動けなくなった回数・30秒の呼び出しの回数（そのうち「止まっている台が人の道をふさいでいた」）・スタッフが動かした回数・料理ができてから届くまで・2分待って人が運んだ皿・往復数・全員が帰った回・入る点の手前で待った秒と回数・片付けを待つ卓（平均）・スタッフの手すきの割合・入店待ち（参考）
- 入店待ちが sb118ret より sb118se の方が長いときは、依頼114 と同じ調べ方（why114.py）で理由を書く
- 図：依頼114 の fig_where_by_type_sb114.png と同じ描き方で、⑧5台の sb118ret と sb118se を横に並べる。図の上に「待機場所のそばの詰まりの合計」「ロボットの止まりの合計」「30秒の呼び出し」「入店待ち」を大きく書く

## 5. 撮る（2 が通れば撮る）
- ⑧5台 serve 種7 を、sb118se と同じ作りで1本。撮り方は依頼114 と同じ。置き場所：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/rec_sb118_20261107/se/
- 依頼112 で撮った now（今のまま）と左右に並べ、待機場所のそばに寄せて店の時刻の5倍で流すパネル付きの動画を作る。寄る5分は依頼112 と同じ5分。題「⑧ ロボット5台：今のまま と まっすぐ入る（人は待機点を通らない）」
- 撮った回の名前が、撮らない回や前の撮影と同じにならないようにする

## 止める線
瞬間移動が1回でも出たとき、または同じ種の2回が違ったとき。止めたら報告に書き、ほかの項目は続ける。

## 報告
claude_code_reports/20261107_sb118.txt に：始める前の確かめ、1 の作り・直し（どのファイルのどこ・切り替えの名前）、2 の確かめ、4 の表と図の置き場所、5 の動画の名前と長さ、台帳の行数の変化と md5。
**報告の最後の1行は必ず次のどれか**：「判定：合格」／「判定：止めた（決めてほしいことあり）」／「判定：失敗」
```

### 残した候補

| 起きた場面 | 原因の候補 | 切り分け方（ほかは同じにして1つだけ変える） |
|---|---|---|
| まっすぐ入る形で入店待ちが延びた | 人が待機点の列の中を通り道にしている | people_avoid_standby の入と切で比べる |
| 2台が互いの入る点の手前で待ち合い、解けない | 待ち合いを解く決まりがない | 受け渡し口に近い待機点へ入る台が先に入る決まりの、ありとなしで比べる |
| 入る点の手前で順番を待つ台が、スタッフに動かされる | 動かす相手を選ぶ決まり | 順番待ちの台を相手に選ばない決まりの、ありとなしで比べる |
| 30秒の呼び出しのあと、止まりの秒が0に戻る | 止まりの数え方 | 続けて数える形にして、切の回の数がどれだけ変わるかを見る |
| まっすぐ入る形を標準にするか | 上の4つの結果しだい | 4つを入れたあとで、斜めに寄る形と比べ直す |

この回で決めたことは次のとおりです。

- 近くのスタッフが止まったロボットを動かす決まり（staff_moves_robot）は、すぐ押す形にした。⑧の配膳では3台以上で効いた
- 待機点を列で使う決まり（standby_queue）と、2列の並びは使わない。2列の店の形とサイトの⑧の試算は、元の1列に戻した
- 待機場所の止まり合いは、待機点の真下からまっすぐ入る決まり（standby_straight_entry）で減らせると分かった。標準にするかは、人が待機点の列を通らない形にしてから決める
- 次に Unity を直すときは、どこまでやったら終わりかを先に決めてから始める
