====================================================================
④の一方通行（案A）・1本道は1台ずつ（案B）・T26 を外した店（案B'）を切り替えで入れ、4回で確かめた
依頼：20261101_59_店4の一方通行と1本道は1台ずつを切り替えで入れる.md（依頼57）
2026-11-01 21:38 〜 22:45　check-in：cs:54・cs:55　build_id cs55_20261101_2224（保留 0）
====================================================================

結論

  ・始める前の確かめ3つは、すべて合格だった。
  ・3つの切り替えを入れた（どれも既定は params の切）。-ssOneWay on／-ssSingleLane on／-ssStoreVariant noT26。
  ・確かめの4回（④・スタッフ2・ロボット2・36組/時・種0）は、4回とも completed・全員が帰った・行けない卓 0。
  ・案A は 28 卓すべてに道が引けた（受け渡し口→卓・卓→受け渡し口・卓→待機場所2つ）。
  ・案B・案B' では「待ったまま往復が打ち切られた（600 秒）」が残った（案B 2回・案B' 1回）。
    待っている側は決まりどおり待っており、相手の台が1本道の中でスタッフに4〜5分ふさがれて
    「動けなくなった」をくり返していたため。待ち同士でかみ合ったのではない（下の 5）。
  ・決まりの文に書かれていない所が1つあり、仮の作りで入れた（1本道に横から入るとき。下の「決めてほしいこと」1）。
    この仮の作りを決めてもらうまで、依頼58 はそのまま進めない方がよい。
  ・試しの回（smoke）のうち1回が最後まで回り、台帳に1行（1535行目）書いてしまった。消していない。


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

  1. Unity エディタ：起動していない（Unity Hub だけ）。night_runner・rec_runner：動いていない。
     /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  2. ServiceSim の保留：0（cs:53 head）
  3. サイトの params（p2m-site main 3c292e9＝f3a3888 の次。公開サイトとも md5 同じ）に
     unity_rules.traffic_one_way・traffic_single_lane があり、どちらも value false
     ④の公開の店の形（p2_efficient_narrow.json・_map.json）は今の写しと md5 同じ（変わっていない）

  台帳：始めたとき 1534 行・md5 ea67552d80fab29465b4e17b92ade111
    控え：archive/unity_ledger_v1_pre_traffic_20261101/unity_ledger_v1.csv（md5 同じ）


====================================================================
2. 取り込み
====================================================================

  写し元：https://pixelstomotors.com/sim/（21:40 に curl。GitHub main の同じファイルと md5 がすべて同じ）
  控え：unity/site_copy_9b8dae7ebf8c_f3a3888/（README.txt つき）
    serving-robot-params.json … 前の写しとの違いは unity_rules.traffic_one_way・traffic_single_lane が
                                 足されただけ（項目ごとに比べた。ほかの違い 0）
    案B' の店 … Assets/ServiceSim/Store/Layouts/trials/p2_efficient_narrow_noT26.json・_map.json
                （版 trial-p2-noT26-e578507fff7d。27卓。④との違いは T26 が無いことと routes・地図だけ。
                  places は④と同じ）
  案B' の店は別の店として StoreLayout_p2_efficient_narrow_noT26.asset を作り、シーンの HeadlessRun の店の一覧
  （7つめ）と ServiceSim/Setup に足した。条件の値は fam_p2 のまま（来客のペースも④のまま）。
  試しの店は summary.json に載らず、版も trial- で始まるので、版の突き合わせは
  「版が trial- で始まり地図の版と同じ／params とは、もとの④（summary.json の版 9b8dae7ebf8c）で突き合わせる」にした。
  卓の数（試算 28・建てた店 27）は、試しの店のときだけ「外した卓のぶん少ない」として回す（ログに1行出す）。


====================================================================
3. 足した切り替えと使い方
====================================================================

  画面なしの実行ファイルの引数（どれも付けなければ params の既定＝切。公開の店）
    -ssOneWay on|off        案A 一方通行。出力フォルダ名の末尾に _oneway
    -ssSingleLane on|off    案B 1本道は1台ずつ。_lane
    -ssStoreVariant noT26   案B' の店（fam_p2 の条件を p2_efficient_narrow_noT26 で回す）。_noT26
                            -ssSingleLane on と一緒に使うと、その店の lanes（4本）を使う
    名前の形：{夜}_{名札}_cs{N}_{店}_r{台数}_s{種}[_passon][_ruleb][_sbret][_ek][_post][_oneway][_lane][_noT26][_try{n}]
  夜の道具
    make_queue.py   --one-way on|off・--single-lane on|off・--store-variant noT26
    night_runner.py queue の one_way・single_lane・store_variant を渡す。--one-way・--single-lane で突き合わせ
    judge_night.py  一方通行・1本道・店の指定を条件の鍵に足した（入の回は今の基準データに無いので「基準なし」）
  記録
    run_info.json の traffic（入切・区画/1本道の数・行けない卓・店の指定）
    summary.json の traffic（入の回だけ。待った秒数の合計・1本道ごと・待つと決めた回数・横から入る所でその場で待った回数・
      よけて道を空けた回数・待ったまま往復が終わった回数・行けない卓）

  案A の作り：地図で道を引くとき、区画の中のマス（マスの真ん中が矩形の中）では、dir と逆向きに進む1歩
    （dir との内積が負。斜めも同じ）を通れない扱いにした。直角はよい。近道（曲がり角だけにする所）も同じ。
    回り込み・よけの道も同じ道探しを通るので同じ扱い。回の始めに全卓へ道を引いて、行けない卓を記録に残す。

  案B の作り（「やり方は任せる」とされた所を含む）
    ・向き：1本道の長い辺の軸の上で、その1本道の中を進む向き。軸の向きに 0.2 m 未満しか進まないなら向きなし
    ・入ろうとしている：先の道の上で、1本道に入るまでが 2.0 m 以下になったら「入る」か「待つ」かを決める。
      入ると決めた台は、入って出るまで「入ろうとしている」として持つ（あとから来た台は料理を載せていても待つ）。
      入る前に 1本道から 3.0 m（2.0＋1.0）より離れたら手放す
    ・同時：料理を載せている方（今のよけ方の順番 YieldRank）→ 先に待つ点に着いた方 → 号機の小さい方
    ・待つ点：入る点にいちばん近い待つ点。一度着いたら 0.5 m までは着いたままとみる
    ・卓で止まっている台の向き：卓のあとに向かう先までの道（地図で引く）で見る
    ・待つ点が、向かいの台のこれから進む道の上にあるときは、今のよけ方（よける場所へ動く）で道を空け、
      よけ終わったら待つ点へ戻る（cs:55 で足した。下の 5）
    ・【仮】横から入るとき（入る点が端から通路の幅より離れている）は、待つ点へ行かず、その場で止まって待つ

  案B の待った時間の数え方
    stops.csv に、原因「1本道の順番待ち」・終わり方「1本道の待つ点で待った」の行として残す（ほかの止まりと分けて数えられる）。
    summary.json の traffic.lane_wait_total_s にも合計を出す。止まった回数・動けなくなった（60 秒）には数えない
    （細い通路の順番待ちと同じ扱い）。
    注意：待っている台が押されて 0.5 秒ごとに少し動くことがあり、行が細切れになる（案B cs:55 で 229 行のうち 214 行が 1 秒以下）。
    秒数の合計は正しいが、行の数は「待った回数」に使えない。回数は traffic.lane_holds（待つと決めた回数）を使う。
    細切れになる原因は特定しきれていない。


====================================================================
4. 変えたファイル・cs・build_id
====================================================================

  cs:54（23 ファイル）
    新しく  Robot/TrafficRules.cs（.meta）・Store/StoreLayout_p2_efficient_narrow_noT26.asset（.meta）・
            Store/Layouts/trials/（.meta）と p2_efficient_narrow_noT26.json・_map.json（.meta）
    変えた  Robot/GridPlanner.cs（一方通行）・Robot/ServingRobotController.cs（1本道）・
            Experiment/ExperimentRunner.cs・HeadlessRun.cs・SimParams.cs・TripLogger.cs・serving-robot-params.json・
            Store/JsonStoreLayout.cs（試しの店）・Editor/ServiceSimSetup.cs・Scenes/ServiceSim_Family.unity（店の一覧に1つ）・
            tools/make_queue.py・night_runner.py・judge_night.py
  cs:55（2 ファイル）Robot/ServingRobotController.cs・Robot/TrafficRules.cs（1本道の直し2つ。下の 5）
  画面なしの実行ファイル：Builds/headless　build_id cs55_20261101_2224・unity_cs ServiceSim/cs:55・pending_changes 空
  保留：cs:55 のあと 0
  ArticulationBody・ロボットの速さ・よけ方の決まり・試算の数字・公開の6店の形・ほかの切り替えの既定は変えていない。

  3つとも切のとき：新しく足した所はどれも入切を見てから働くので、切の回は今までのコードの道を通る
  （道探しは一方通行の印が無いときの分かれ道を今までどおり通る。1本道の判断は最初の行で抜ける）。
  run_info.json に traffic の項目が1つ増えるだけ。数字の一致では確かめていない
  （同じ種・同じ実行ファイルでも、くり返すと数字が揺れる作りのため。unity_variance_check_20261101）。


====================================================================
5. 確かめの4回（画面なし・1本ずつ）
====================================================================

  ④ fam_p2_s2_r2_a36・種0・すれ違い入・待機場所へ戻る入・入口番入・持ち場入・案B（回し方の決まり）切
  記録：night/20261101_traffic_check/（runner_log.txt・runs.csv・queue.json・queue_lane55.json・logs/・judge.*）

  | 回 | cs | 入店待ち（分） | 料理の待ち（分） | 動けなくなった（回） | 30秒以上の止まり（うち1本道の待ちを除く） | 1本道の待った時間の合計（秒） | 全員が帰った | 行けない卓 |
  |---|---|---|---|---|---|---|---|---|
  | 今のまま | 54 | 26.76 | 3.03 | 56 | 73（73） | − | はい | − |
  | 案A 一方通行 | 54 | 26.30 | 3.48 | 57 | 82（82） | − | はい | 0 |
  | 案B 1本道は1台ずつ | 55 | 24.90 | 3.03 | 50 | 69（63） | 1183.4 | はい | 0 |
  | 案B' T26 を外した店 | 55 | 19.90 | 2.23 | 30 | 58（53） | 869.8 | はい | 0 |

  そのほか（今のまま／案A／案B／案B'）
    往復 100／100／94／105　打ち切り（600 秒）10／11／11／6　入れた組 57／57／57／57
    店の時間（分）232.8／264.4／237.1／220.6
    案B：待つと決めた 18 回（横から入る所でその場 2）・いちばん長い待ち 287.3 秒・よけて道を空けた 0・待ったまま往復が終わった 2
         1本道ごと 下の通路 396.7 秒／左の通路 438.7 秒／パントリー横 348.0 秒
    案B'：待つと決めた 33 回（横 3）・いちばん長い待ち 287.3 秒・よけて道を空けた 2・待ったまま往復が終わった 1
         1本道ごと 下の左半分 0／下の右半分 12.2／左の通路 402.2／パントリー横 455.5 秒
  種1つずつなので、差がどこから来たかは言えない。

  最初の cs:54 で回した案B・案B'（台帳に残っている。直す前）
    案B  入店待ち 24.65・料理 3.54・動けなくなった 50・30秒以上 70（61）・待った合計 3113.1 秒・いちばん長い待ち 571.1 秒
    案B' 入店待ち 23.10・料理 2.07・動けなくなった 46・30秒以上 65（60）・待った合計 834.3 秒・いちばん長い待ち 287.3 秒
  見つけたことと直したこと（cs:55）
    ・相手の台が「入ってよい」を持ったまま、1本道から 6 m 以上離れて（入口の近く）立ち往生し、
      こちらが 520 秒待った → 入る前に離れたら手放すようにした（コードの誤り）
    ・待つ点が1本道の出口の道の上にあり、出てくる台が出られずに止まった
      → 待っている台が相手の進む道の上にいるときだけ、今のよけ方で道を空けるようにした
  直したあとも残った長い待ち（200 秒以上）：案B 4回・案B' 2回。中身を見た2回（店の時刻 1447 秒・2203 秒）は、
    相手の台が1本道の中（左の通路 (1.98, 4.04)・パントリー横 (9.41, 7.88)）でスタッフ Staff02 に4〜5分ふさがれ、
    「動けなくなった」をくり返していた。待っている側は決まりどおり待っていた。
    待ったまま往復が終わった（案B 2・案B' 1）は、この待ちのあいだに自分の往復が 600 秒で打ち切られたもの。

  png（900〜1200 秒の1コマ。確かめの回の robot_track.csv・stops.csv から真上を描いた。動画のコマではない）
    night/20261101_traffic_check/oneway_t1080_records.png　案A・店の時刻 1080 秒
      赤い枠と矢印が一方通行の区画と向き。2号機は下の通路を左へ、1号機は下の通路を左へ進んでから左の通路を上がって T02 に着いた
    night/20261101_traffic_check/laneNoT26_t1100_records.png　案B'・店の時刻 1100 秒
      緑の枠が1本道、緑の丸が待つ点。2号機が左下の待つ点 (0.80, 1.69) で、左の通路の中の T13 に止まっている1号機が出るのを待っている


====================================================================
6. 依頼58（夜の80回）にそのまま進めてよいか
====================================================================

  そのままは進めない方がよい。足りないもの：
    1. 1本道に横から入るときの待ち方を決めてもらうこと（今は仮で「その場で待つ」）。
       受け渡し口から出るどの往復も、パントリー横の1本道に横から入るので、案B・B' の数字に効く
    2. 待った回数の数え方（行が細切れになる。回数は lane_holds を使うか）
  道具としては回せる状態：make_queue.py を4回（今のまま・--one-way on・--single-lane on・--single-lane on --store-variant noT26）
  呼んで queue をまとめれば、night_runner.py でそのまま回る（今回の確かめもこの形で回した）。
  judge_night.py の「30秒以上の止まり」は、1本道の順番待ちの行も数える（今の決まりのまま。変えていない）。


====================================================================
7. 残したもの・触ったもの
====================================================================

  KIOXIA：台帳 1534 → 1541 行（追記だけ。先頭 1534 行の md5 は控えと同じ）
    1535 行め 20261101_smoke59b_cs53_fam_p2_r2_s0_passon_sbret_ek_post_oneway（試しの回。3分で止めるつもりが、216 秒で最後まで回った）
    1536〜1539 行め 確かめの4回（cs:54）、1540〜1541 行め 案B・案B' の回し直し（cs:55）
  出力フォルダ：上の7回ぶん＋途中で止めた試しの回 2 つ
    20261101_smoke59_cs53_fam_p2_r2_s0_passon_sbret_ek_post_stopped（引数の渡し方を誤り、切り替えが効いていなかった回）
    20261101_smoke59b_cs53_fam_p2_r2_s0_passon_sbret_ek_post_lane_noT26_stopped
  プロジェクト（VCS の外）：Builds/traffic_pre・Builds/traffic_pre2（コンパイルの確かめ）・Builds/headless（cs:55 に作り直した）
  iCloud：unity/site_copy_9b8dae7ebf8c_f3a3888/・この報告
  png の動画のコマ版（録画用の実行ファイルで撮る）は作っていない。


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

  1. 1本道に横から入るときの待ち方。決まりは「近い方の待つ点で待つ」だが、受け渡し口の前からパントリー横の通路へ入るとき
     （入る点が y 4.0〜4.4 あたり）は近い方の待つ点 (9.4, 1.1) が1本道の向こう側になり、待つ点へ行くには1本道に入る必要がある。
     案B では真ん中の細い通路から下の通路へ入るときも同じ。今は仮で「入る手前のその場で止まって待つ」にした。
     このままでよいか、別の待ち方（待機場所で待つ・横から入る所用の待つ点をサイトで足す など）にするか。
  2. 待つ点 (9.4, 9.3)・(2.0, 9.3)・(9.4, 1.1) が、1本道から出てくる台の道の上にある。
     そのとき待っている台を今のよけ方で動かす作りを足した（cs:55）。この足し方でよいか、待つ点の場所をサイトで見直すか。
  3. 試しの回が台帳に書いた1行（1535 行め・20261101_smoke59b_…_oneway）を残すか消すか。
  4. 待った回数は、行の数ではなく lane_holds（待つと決めた回数）で数えてよいか。
  5. 残ったもの（Builds/traffic_pre・traffic_pre2・途中で止めた試しの回のフォルダ2つ）を消すか残すか。
