====================================================================
待機場所へ戻るを標準にし、判定を入切ごとに分け、③⑦を60回回した（夜 20261102・基準データ v5 の候補）
依頼：20261028_15_待機場所へ戻るを標準に_③⑦をv5候補で回す.md
実行ファイル：build_id cs34_20261028_0642（ServiceSim/cs:34・保留なし）
回した時刻：2026-10-28 06:42〜07:43
====================================================================

結論

  ・案B と待機場所へ戻るの既定を params の unity_rules で決めるようにした（schema 0.4 では 待機場所へ戻る 入・案B 切）。
    回ごとに上書きする仕組み（-ssStandbyReturn・-ssRuleB・--standby-return・--rule-b）は今のまま使える。
  ・judge_night.py は、すれ違い・待機場所へ戻る・案B の入切を条件の一部として扱うようにした。
    確かめは2つとも思ったとおりだった（20261101 は60回とも「基準なし」、20261029 を自分自身に当てると「正常」60回）。
  ・60回とも completed・終了コード 0・全員が帰った。失敗した回・止まった回はない。
  ・2台の回は、v4 とほぼ同じか少し良い。20261101（案B 入）で増えた打ち切りや止まりは出なかった。
    受け渡し口の近くでの30秒以上の止まりは、v4 よりはっきり少ない。
  ・judge.md の結果は「基準なし」60回。基準 v4 は待機場所へ戻るが切なので、比べる相手がいない。
    これは決めた形のとおり。


====================================================================
1. 始める前の確かめ（5つとも合格。06:3x ごろ）
====================================================================

  1. Unity エディタ：起動していない
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳：505 行、md5 c7031e3824b9aa6b137668d44e87db64（退避
     archive/unity_ledger_v1_prenight_20261102/unity_ledger_v1.csv と同じ）
  4. ServiceSim の保留：0（cm status：cs:33 head・変更なし）
  5. 公開版 params の meta.schema_version：serving-robot-params/0.4（1回目で 0.4 だった）
     unity_rules：standby_return true・pass_one_robot false・pass_clear_m 1.5・same_table_one_robot false


====================================================================
2. 入れた cs・実行ファイル・変えたファイル
====================================================================

  check-in：cs:34（保留 0）
  実行ファイル：Builds/headless/build_info.json は build_id cs34_20261028_0642・unity_cs ServiceSim/cs:34・
    pending_changes 空。実行ファイルの中の params は 0.4（0.3 の字は入っていない）。
  check-in の前に、画面なしで Unity を開いてコンパイルを確かめた（エラーなし）。

  params の写し：公開版をそのまま Assets/ServiceSim/Experiment/serving-robot-params.json に写した。
    前の写しと違うのは meta.schema_version（0.3 → 0.4）と unity_rules だけで、ほかは同じだった
    （試算の版 v2.8・店の形の版 39257d16b68a は変わらない）。

  変えたファイル（9つ）
    Assets/ServiceSim/Experiment/serving-robot-params.json … 公開版 0.4 の写し
    Assets/ServiceSim/Experiment/SimParams.cs … 既定を読む関数を2つ足した（StandbyReturnDefault・RuleBDefault）
    Assets/ServiceSim/Experiment/ExperimentRunner.cs … Job.ruleB・Job.standbyReturn を「指定なし（null）＝ params の既定」
        にした。サイトの条件でない回は、指定がなければ今までどおり切
    Assets/ServiceSim/Experiment/HeadlessRun.cs … -ssRuleB・-ssStandbyReturn が無いときは params の既定で決める
        （フォルダ名の _ruleb・_sbret もその値で付ける）
    Assets/ServiceSim/Editor/ServiceSimSiteRun.cs … Site Run のメニューも params の既定で回す。入の回はフォルダ名に _sbret
    Assets/ServiceSim/Editor/ServiceSimStageB.cs … Stage B のまとめて回すメニューも params の既定で回す。
        入の回はフォルダ名の末尾に _ruleb・_sbret を付ける
    tools/make_queue.py … --rule-b・--standby-return を付けないときは params の unity_rules で決める。
        queue に rules_from（arg / params）と params_schema を書く
    tools/night_runner.py … queue に入切が無い回は params の既定で決める（前は切）
    tools/judge_night.py … 下の 3 章

  案B の入切の決め方（作りの説明）
    ・指定なし：pass_one_robot・same_table_one_robot の値をそのまま使う。どちらかが true なら案B 入（今は両方 false なので切）
    ・入と指定した回：受け渡し口は1台ずつ・同じ卓は1台 の両方を入れる。離れる距離 pass_clear_m は params の 1.5 m を使う。
      params が 0.3 のころは両方 true だったので、20261101 と同じ動きになる。
      0.4 で両方 false になったので、params の値をそのまま読むと「入と指定しても何も効かない」ことになる。
      それを避けるためにこの形にした（決めてほしいこと 1）
    ・切と指定した回：両方切


====================================================================
3. 判定の直しと確かめ
====================================================================

  直したこと
    ・条件の名前に standby_return・rule_b を足した（店・スタッフ・来客・mode・trays・すれ違い・待機場所へ戻る・案B・台数）
    ・入切は、回ごとの run_info.json にある pass_by.enabled・standby_return.enabled・rule_b.enabled から取る
      （項目が無い回は切とする。その作りがまだ無かった版の回）
    ・基準データの中で、条件も入切も同じ回とだけ比べる。同じ入切の回が無ければ「基準なし」
    ・judge.md の頭に、今回の回の入切と基準の回の入切を1行で出す。条件の名前にも3つの入切を出す
    ・変えていないもの：振り分けの決まり（線・何を超えたら何に振り分けるか）、基準の既定 20261029_night_cs26_*

  確かめ（どちらも /tmp に出した。night/ の記録は書き換えていない）
    ・夜 20261101（待機場所 入・案B 入）を判定し直した → /tmp/judge_check_20261101
      基準なし 60（正常 0・試算を見直す候補 0・Unity の作り 0・回の失敗 0）　… 思ったとおり
    ・夜 20261029（v4）を自分自身に当てた → /tmp/judge_check_20261029_self
      正常 60（ほかは 0）　… 思ったとおり

  make_queue を何も指定せずに作った queue（4 の確かめ）
    60回＝6条件（fam_p1・fam_p5 × 0・1・2台）× 種 0〜9、60回とも すれ違い入・案B 切・待機場所へ戻る 入。
    rules_from は rule_b・standby_return とも params、params_schema は serving-robot-params/0.4。


====================================================================
4. 回した内容と runner_log のまとめ
====================================================================

  make_queue.py --out /tmp/queue_20261102.json（何も指定しない）
  night_runner.py --queue /tmp/queue_20261102.json --night 20261102 --parallel 4 --no-retry
    （--no-retry は前の夜 20261101 にそろえた）
  出力フォルダ：20261102_night_cs34_fam_{p1|p5}_r{0|1|2}_s{0〜9}_passon_sbret
  記録：night/20261102/（runner_log.txt・runs.csv・queue.json・judge.md・judge.csv・logs/）

  completed 60 回／失敗 0／止まった回 0／終了コード 0 が 60 回
  実時間は平均 3.9 分、いちばん長い回は 4.9 分（20261102_night_cs34_fam_p5_r2_s4_passon_sbret）
  起動したときの同時本数は、4本が56回、3本が2回、2本と1本が1回ずつ
  judge.md の結果：基準なし 60（v4 は待機場所へ戻るが切なので、同じ入切の基準がない）

  プロジェクトの queue.json は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま。
  2026-10-27 からある古いファイル）。作業フォルダには新しい queue を置いていない。


====================================================================
5. 台帳
====================================================================

  505 → 565 行（退避の行数＋60）。先頭 505 行の md5 c7031e3824b9aa6b137668d44e87db64（退避と同じ）
  新しい 60 行：status はすべて completed、everyone_left はすべて 1、unity_cs はすべて ServiceSim/cs:34。
  鍵ファイルは残っていない。


====================================================================
6. 店 × 台数ごとの種10個（中央値（最小〜最大））
====================================================================

  書き方：単位は分。割合は 0〜1。列の取り方は前の報告（20261101_night_37_standby_ruleB.txt）と同じ。
  30秒以上の止まり＝stops.csv の duration_s が 30 秒以上の行の数。1往復あたり＝それ÷trips。
  並び：v4（20261029・待機場所 切・案B 切）／ 20261101（待機場所 入・案B 入）／ 今回 20261102（待機場所 入・案B 切）／ 試算
  試算の値は台帳の site_entry_wait_mean・site_dish_wait_mean・site_robot_share（どの種でも同じ値）

  ③ fam_p1・0台
    入店待ち            4.21（1.50〜15.25）／ 4.22（1.56〜15.12）／ 4.09（1.51〜14.80）／ 3.30
    料理の待ち          0.94（0.80〜1.08） ／ 0.97（0.80〜1.06） ／ 0.98（0.77〜1.05） ／ 0.46
    ロボットが運んだ皿  0 ／ 0 ／ 0 ／ 0
    往復・30秒以上の止まり・動けなくなった・打ち切り  3つの夜とも、すべて 0
    瞬間移動            12（9〜19）／ 10.5（6〜15）／ 10.5（7〜15）
    冷めた皿の割合      0.000（0.000〜0.008）／ 0.000（0.000〜0.010）／ 0.000（0.000〜0.015）

  ③ fam_p1・1台
    入店待ち            3.01（1.44〜11.46）／ 4.10（1.37〜14.56）／ 5.00（1.42〜13.24）／ 2.60
    料理の待ち          2.40（2.01〜2.64） ／ 2.44（1.97〜2.80） ／ 2.48（2.11〜3.24） ／ 1.95
    ロボットが運んだ皿  0.710（0.648〜0.762）／ 0.676（0.610〜0.806）／ 0.706（0.589〜0.738）／ 0.720
    往復の数            69.5（60〜90）／ 67.5（60〜80）／ 65.5（59〜84）
    30秒以上の止まり    7.5（2〜16）／ 9（1〜17）／ 6（2〜22）
     （1往復あたり）    0.107（0.029〜0.262）／ 0.141（0.015〜0.221）／ 0.083（0.027〜0.361）
    動けなくなった      4（0〜12）／ 5.5（0〜15）／ 3.5（1〜14）
    瞬間移動            50（24〜61）／ 45（39〜61）／ 49（43〜61）
    打ち切り            0（0〜1）／ 0（0〜2）／ 0（0〜1）
    冷めた皿の割合      0.300（0.164〜0.358）／ 0.265（0.138〜0.360）／ 0.286（0.150〜0.417）

  ③ fam_p1・2台
    入店待ち            4.17（1.45〜12.78）／ 4.13（1.50〜16.42）／ 3.99（1.40〜13.93）／ 1.18
    料理の待ち          1.62（1.12〜3.40） ／ 2.54（1.73〜5.23） ／ 1.95（1.09〜3.24） ／ 0.95
    ロボットが運んだ皿  0.920（0.709〜0.975）／ 0.560（0.079〜0.888）／ 0.832（0.694〜0.988）／ 0.991
    往復の数            130（95〜164）／ 85（30〜122）／ 119.5（98〜151）
    30秒以上の止まり    38（11〜55）／ 49.5（9〜111）／ 24.5（10〜44）
     （1往復あたり）    0.255（0.116〜0.335）／ 0.470（0.164〜2.523）／ 0.173（0.086〜0.411）
    動けなくなった      25（6〜43）／ 40.5（7〜105）／ 18（5〜31）
    瞬間移動            66（43〜86）／ 45.5（19〜66）／ 60（24〜76）
    打ち切り            3（1〜15）／ 10（1〜19）／ 4.5（0〜10）
    冷めた皿の割合      0.132（0.050〜0.209）／ 0.235（0.086〜0.518）／ 0.163（0.031〜0.228）

  ⑦ fam_p5・0台
    入店待ち            4.48（1.58〜15.36）／ 4.41（1.56〜15.24）／ 4.49（1.55〜15.25）／ 2.76
    料理の待ち          0.98（0.84〜1.01） ／ 0.99（0.85〜1.10） ／ 0.96（0.81〜1.08） ／ 0.45
    ロボットが運んだ皿  0 ／ 0 ／ 0 ／ 0
    往復・30秒以上の止まり・動けなくなった・打ち切り  3つの夜とも、すべて 0
    瞬間移動            14（11〜18）／ 16（12〜20）／ 13（10〜21）
    冷めた皿の割合      0.000（0.000〜0.012）／ 0.002（0.000〜0.029）／ 0.000（0.000〜0.012）

  ⑦ fam_p5・1台
    入店待ち            3.84（1.53〜13.54）／ 3.00（1.36〜14.01）／ 3.22（1.56〜14.63）／ 1.81
    料理の待ち          2.44（1.76〜3.15） ／ 2.46（2.04〜2.70） ／ 2.51（2.19〜2.86） ／ 1.97
    ロボットが運んだ皿  0.666（0.544〜0.825）／ 0.686（0.628〜0.744）／ 0.669（0.625〜0.746）／ 0.721
    往復の数            69（55〜87）／ 66（57〜82）／ 67.5（58〜78）
    30秒以上の止まり    10（2〜26）／ 7（2〜15）／ 8（4〜17）
     （1往復あたり）    0.124（0.029〜0.473）／ 0.106（0.027〜0.197）／ 0.127（0.055〜0.293）
    動けなくなった      6（1〜22）／ 3.5（1〜12）／ 5.5（1〜9）
    瞬間移動            48（29〜66）／ 46.5（32〜62）／ 48.5（31〜58）
    打ち切り            0（0〜2）／ 0（0〜2）／ 0（0〜1）
    冷めた皿の割合      0.304（0.106〜0.461）／ 0.301（0.169〜0.342）／ 0.328（0.244〜0.418）

  ⑦ fam_p5・2台
    入店待ち            4.81（1.43〜10.86）／ 4.02（1.48〜16.05）／ 3.56（1.49〜14.76）／ 1.97
    料理の待ち          1.52（1.02〜2.57） ／ 2.86（1.56〜5.35） ／ 1.61（1.18〜2.41） ／ 0.98
    ロボットが運んだ皿  0.919（0.768〜0.979）／ 0.663（0.074〜0.800）／ 0.916（0.799〜0.969）／ 0.991
    往復の数            136（116〜174）／ 85（26〜128）／ 124（111〜164）
    30秒以上の止まり    27（10〜39）／ 31.5（1〜113）／ 26.5（11〜39）
     （1往復あたり）    0.200（0.074〜0.311）／ 0.323（0.027〜4.346）／ 0.197（0.097〜0.351）
    動けなくなった      17（2〜28）／ 24.5（0〜107）／ 16.5（3〜28）
    瞬間移動            61（35〜82）／ 39.5（13〜71）／ 62.5（33〜85）
    打ち切り            3（1〜10）／ 10（2〜19）／ 3.5（0〜6）
    冷めた皿の割合      0.101（0.031〜0.191）／ 0.274（0.087〜0.616）／ 0.117（0.044〜0.234）

  0台の瞬間移動は、台帳の warped の値をそのまま出した（前の報告と同じく、どこまで数えている列かは確かめていない）。


====================================================================
7. 2台の30秒以上の止まりのうち、受け渡し口の点から 2.5 m 以内のもの
====================================================================

  受け渡し口の点は (15.3, 5.95)。「待機場所での止まり」は、店の形の RobotStandby の四角の中で記録された止まりとした
  （③⑦とも 3つ：x 16.5〜17.3・17.3〜18.1・18.1〜18.9、z 5.65〜6.45）。待機場所を除いた数は、それを引いた数。
  v4 は待機場所へ戻るが切なので、待機場所の四角の中での止まりは 0 だった（除いても数は同じ）。

                       v4                  20261101            今回 20261102
  ③ 2.5 m 以内 計      156（344 のうち）   431（508 のうち）   86（230 のうち）
     中央値            18.5（1〜27）        37.5（7〜109）       6.5（1〜19）
     種0〜9            19,1,27,15,20,19,21,15,1,18
                                           59,18,109,41,86,9,44,34,7,24
                                                               2,5,15,17,1,19,2,8,16,1
    待機場所を除く 計  156                 244                 46
     中央値            18.5（1〜27）        2（0〜102）          3（0〜15）
     種0〜9            （上と同じ）         59,5,102,0,73,2,0,0,1,2
                                                               1,3,4,15,1,9,0,3,10,0

  ⑦ 2.5 m 以内 計      133（248 のうち）   323（423 のうち）   76（247 のうち）
     中央値            13（3〜27）          16（1〜110）         4（1〜24）
     種0〜9            5,14,3,14,7,27,12,23,7,21
                                           13,28,97,18,1,110,8,13,21,14
                                                               5,3,1,24,17,13,4,4,1,4
    待機場所を除く 計  133                 203                 45
     中央値            13（3〜27）          0.5（0〜103）        1.5（0〜23）
     種0〜9            （上と同じ）         1,0,97,0,1,103,1,0,0,0
                                                               0,2,0,23,8,8,2,0,1,1


====================================================================
8. ロボットを1台増やしたときの向き（種10個。今回 20261102）
====================================================================

  向きの決め方は judge_night.py と同じ（5% と 0.2 分より小さい変化は「変わらない」）。
  書き方：試算と同じ向きだった種の数／逆の向きだった種の数／変わらなかった種の数

  ③ 0→1台  入店待ち（試算は短くなる）  同じ 4／逆 2／変わらない 4 … 過半数（6）に届かないが、同じ向きが多い
            料理の待ち（試算は長くなる）同じ 10／逆 0          … 過半数が試算と同じ
  ③ 1→2台  入店待ち（試算は短くなる）  同じ 5／逆 1／変わらない 4 … 過半数（6）に届かないが、同じ向きが多い
            料理の待ち（試算は短くなる）同じ 7／逆 0／変わらない 3 … 過半数が試算と同じ
  ⑦ 0→1台  入店待ち（試算は短くなる）  同じ 6／逆 2／変わらない 2 … 過半数が試算と同じ
            料理の待ち（試算は長くなる）同じ 10／逆 0          … 過半数が試算と同じ
  ⑦ 1→2台  入店待ち：試算は 1.81→1.97 分（差 0.16 分が線の 0.2 分より小さい）ので「変わらない」扱い。
            judge と同じく向きは比べない。Unity は 短くなる 5・長くなる 4・変わらない 1
            料理の待ち（試算は短くなる）同じ 8／逆 0／変わらない 2 … 過半数が試算と同じ
  → 種の過半数で試算と逆になったところはない（judge.md の「向きが逆」も なし）。

  参考：同じ数え方で、前の2つの夜
    v4      ③1→2台 入店待ち 同じ 1／逆 6／変わらない 3（過半数が逆）。
            ③1→2台 料理の待ち 同じ 8／逆 2。ほかは今回と同じ形
    20261101 ③1→2台 料理の待ち 同じ 5／逆 5、⑦1→2台 料理の待ち 同じ 3／逆 5（逆が多い）


====================================================================
9. 全員が帰らなかった回・失敗した回
====================================================================

  なし


====================================================================
10. 決めてほしいこと
====================================================================

  1. 案B を「入」と指定したときの中身。いまは、params の pass_one_robot・same_table_one_robot が false でも、
     指定で入れた回は両方を入れる形にした。0.3 のころの 20261101 と同じ動きになる。
     params の値をそのまま使う形だと、0.4 では入と指定しても何も効かないため、この形にした。この形でよいか。
  2. 夜 20261102 を基準データ v5 にするか（依頼文のとおりエイイチが決める）。
     v5 にする場合は、judge_night.py の BASELINE_DEFAULT（今は 20261029_night_cs26_*）を変えるかも決めてほしい。
     今のままだと、これからの夜（待機場所 入）は毎回「基準なし」になる。
  3. プロジェクトの作業フォルダに、2026-10-27 からある古い queue.json（md5 07f2acccf5b13abbf1a96148fbc70e9f。
     待機場所・案B の項目が無い）が残っている。今回は触っていない。消すかどうか。
