新しい固定版は cs:140 です。（保留は Mat_MonitorBoard の Private 2件だけ）

  1. 回すもの ― ServiceSim / Stage B /

  ┌────────────────────────────┬───────────────────────────────┐
  │          メニュー          │           すること            │
  ├────────────────────────────┼───────────────────────────────┤
  │ Run All（18回）            │ 条件6つ × 種 0・1・2          │
  ├────────────────────────────┼───────────────────────────────┤
  │ 押す前の確かめ（回さない） │ KIOXIA と台帳のヘッダだけ見る │
  ├────────────────────────────┼───────────────────────────────┤
  │ いまの回で止める           │ Play を抜けたところで押す     │
  ├────────────────────────────┼───────────────────────────────┤
  │ 台帳を開く                 │ Finder で開く                 │
  └────────────────────────────┴───────────────────────────────┘

  - 押す前に確かめます（KIOXIA のマウント／置き場所／台帳のヘッダ／StoreBuilder・
  NavMeshBaker）。1つでも合わなければ回し始めません
  - 順番：③ロボット2台 種0 → ⑦ロボット2台 種0 → 残りを条件・種の順。最初の2回で 
  failed なら残りを回さず止めます
  - 1回ごとに Play を出入りします。進みは EditorPrefs に置くので Domain Reload
  で消えません
  - 途中で止めても、もう一度押せば台帳を見てまだ行の無い回から続けます
  - caffeinate -dimsu でスリープを止め、終わりに戻します
  - 終わりに Console と run_all_log.txt（service_sim/unity/）へ一覧を出します

  出力フォルダ名は {日付}_stageB_{店}_r{台数}_s{種} にしました（例 
  20261023_stageB_fam_p1_r2_s0）。台帳の照合キーなので、回し直しても同じ名前にな
  るよう時刻を入れていません。

  2. 台帳

  /Volumes/KIOXIA/r2r2r-data/service_sim/unity/unity_ledger_v1.csv
  まだ実体はありません。初回の追記でヘッダごと作ります。

  - 1回 = 1行・追記のみ。既存の行は書き換えない・消さない
  - 追記ガード：実体の1行めとコードの列が1字でも違えば追記しない
  - 同じ run_folder の行は2度書かない
  - status：completed（summary あり・stopped_early false）／stopped（同
  true。実時間40分超えもここ）／failed（summary なし）
  - 列は指示書の並びのまま 49 列。機械で突き合わせて一致を確認しました

  実データ（2227）で行作りを試したところ 42/49 
  列が埋まりました。残り7列はこの依頼で足した欄（trips
  系・stop_s_total・yield_order_enabled）と cs:139 で足した
  staff_yield_share_of_staff_time なので、新しい回ではすべて埋まります。

  3. summary / run_info に足した欄（記録だけ）

  summary.json "trips": trips, timeouts, stuck_trips, distance_m_total,
                        total_s, stopped_s, robot_speed_mps, pause_s_mean,
  pause_count
  summary.json "stops": stop_s_total を追加
  run_info.json       : yield_order_enabled, unity_cs, pending_changes
  pending_changes は「保留あり N 件」。status に関係なく残します（指示書 2
  の最後）。

  4. 変えていないこと

  ExperimentRunner
  に足した3欄（maxWallSecondsPerRun・unityCs・pendingNote）は既定が 
  0・空で、段階Bのメニューだけが入れます。実時間の上限は > 0
  のときだけ働くので、0 のままなら前とまったく同じ動きです。さらに
  ServiceSimRunSupport.Prepare でこの3つを 0・空に戻しているので、Site Run や 
  Stage 3 の回し方は前と同一です。
  料理の割り当て・譲り方・通路・立ち往生・NavMesh・センサー、店の形の JSON と
  params は触っていません（差分も確認済み）。

  5. ⚠ pause_rate と stuck_rate は空欄にしました（指示書 34 のとおり報告）

  サイトの定義は「hop_m（3 m）進むごとの起きやすさ」ですが、hop_m は 
  role=site_only（試算の中だけの設定）で Unity 
  は読まない決まりなので、同じ定義で出せません。勝手に 3 m
  を使うと「何について正か」の決まりを破ることになるため、空欄にしました。

  割り出すのに要る素の数は summary.json に出してあります:
  pause_rate ≈ stops.count       ÷（trips.distance_m_total ÷ hop_m）
  stuck_rate ≈ stops.stuck_count ÷（trips.distance_m_total ÷ hop_m）
  robot_speed_mps（走った距離 ÷ 動いていた秒数）と
  pause_s_mean（自分で動き出した止まり1回の平均）は unity_measures
  の定義どおり測って入れています。hop_m を Unity 
  に渡してよいかを決めていただければ、2列とも埋められます。

  確認していただきたい1点

  resume の見方を「台帳に行があれば回さない」にしました（status
  に関係なく）。failed・stopped
  の回を自動で回し直すと、同じ所で何度も止まるおそれがあるためです。「failed
  だけは押し直したら再挑戦してほしい」なら、1行変えれば直せます。

  回す前に

  Unity 同梱の Roslyn で2つに分けて通し、エラー・警告ゼロです。ただし Unity 
  本体はまだ再コンパイルしていません。一度 Unity に切り替えてから、まず
  ServiceSim/Stage B/押す前の確かめ（回さない） を押してください（台帳の列と
  KIOXIA だけ見て、回しません）。問題なければ Run All です。

  なお ExperimentRunner
  に欄を3つ足したので、シーンを次に保存すると3行増えます（maxWallSecondsPerRun: 
  0・unityCs:・pendingNote:）。動きには効きません。

  1回目（③ロボット2台 種0）が終わったら台帳の行を見てください。
