{
  "run_name": "family_v0",
  "written_at": "2026-10-25 12:14:34",
  "note": "speed_mps = distance_m / (total_s - stopped_s)。stopped_s には、動けなくなった60秒と、スタッフを待った秒数（stuck_wait_s）、通路の入口で待った秒数も入る。pause_s は stop_durations_s（自分で動き出した止まりだけ）の分布。site_metrics はサイトの meta.metrics と同じ名前・同じ定義。入店待ちの分け方もサイトの試算と同じで、blocked_wait は片付け待ちの卓の数だけ待っている列の前から順に足した分、full_wait は seat_wait − blocked_wait、staff_wait は blocked_wait + guide_wait。pay_wait は（会計が終わった時刻 − 食べ終えた時刻 − pay_s）で、逃がし弁で卓を空けられた組は入れない。Unity は会計の人とスタッフがレジまで歩く時間が入るので、試算より少し長く出る。pauses と rescues は、サイト側が unity_measures の仮の値から出した数なので出どころが違う。",
  "sim_like": {"dish_wait_mean": 0.9613, "dish_wait_p90": 1.6996, "cold_share": 0.0049, "seat_wait_mean": 2.237, "turn_mean": 11.1557, "robot_share": 0, "robot_dishes": 0, "staff_dishes": 206, "requeued_dishes": 0, "late_staff_dishes": 0, "late_staff_share": 0, "robot_first_wait_s": 120, "yields": 0, "yields_by_robot": 0, "yields_by_staff": 0, "yields_by_guest": 0, "yields_stepped_aside": 0, "yields_in_corner": 0, "yields_passed": 0, "yield_wait_s": 0, "yield_wait_mean_s": 0, "staff_yields": 0, "staff_yield_wait_s": 0, "staff_yield_mean_s": 0, "staff_yield_share_of_staff_time": 0, "staff_time_total_s": 44625.41, "corner_stops": 0, "corner_stop_s": 0, "corner_stop_count_share": 0, "corner_stop_time_share": 0, "corner_range": "x 0-0 / z 0-0", "groups": 83, "people_jams": 37, "robot_blocked_jams": 0, "robot_blocked_jam_share": 0, "chair_pulls": 168, "robot_contacts": 0, "robot_yield_waits": 0, "robot_yield_wait_s": 0, "robot_yield_detours": 0, "register_crowd_max": 9, "register_crowd_mean": 2.7037, "register_pay_count": 83, "register_pay_not_at_back": 0, "register_pay_off_spot": 0, "register_pay_offset_mean_m": 0, "register_pay_offset_max_m": 0, "register_back_intruders": 0, "register_back_intruder_s": 0, "drink_bar_queued": 12, "drink_bar_gave_up": 7, "drink_bar_wait_mean": 0.5545, "drink_bar_wait_p90": 0.9257, "gave_up": 7, "warped": 10, "table_freed": 0, "people_jam_total_s": 38.7, "walkers_mean": 9.4199, "measured_minutes": 185.8255},
  "site_metrics": {"entry_wait_mean": 3.9048, "full_wait_mean": 0, "staff_wait_mean": 2.6872, "blocked_wait_mean": 2.237, "guide_wait_mean": 0.4502, "seat_wait_mean": 2.237, "dish_wait_mean": 0.9613, "dish_wait_p90": 1.6996, "cold_share": 0.0049, "turn_mean": 11.1557, "pay_wait_mean": 4.6305, "pay_wait_groups": 83, "walk_km_per_staff": 3.2327, "staff_util": 0.7722, "robot_util": 0, "robot_share": 0, "rescues": 0, "pauses": 0, "groups": 83},
  "site_run": {"site_run": true, "condition_id": "fam_p1_s4_r0_a42", "arrivals_minutes": 120, "total_minutes": 185.8255, "everyone_left": true, "aisle_deferrals": 0, "staff_first_yield": true, "robot_stuck_detours": 0, "rescues_done": 0, "rescue_wait_s": 0, "gave_up": 7, "warped": 10, "table_freed": 0},
  "timeline_check": {"rows": 186, "step_s": 60, "tables": 42, "staff": 4, "bad_table_rows": 0, "bad_staff_rows": 0, "first_bad": "", "note": "timeline.csv の各行で、seated_groups + tables_free + tables_dirty_untaken + tables_clearing が tables と同じか、staff_* の合計が staff と同じかを数えたもの。合わない行があれば bad_* が 0 より大きくなり、Console にも出る"},
  "site_result": {"dish_wait_mean": 0.459, "dish_wait_p90": 0.9759, "cold_share": 0, "seat_wait_mean": 2.8998, "turn_mean": 2.4872, "walk_km_per_staff": 2.8126, "staff_util": 0.7219, "robot_util": 0, "robot_share": 0, "robot_bus_share": 0, "collects": 0, "rescues": 0, "pauses": 0, "fragile_robot": 0, "groups": 85.475, "entry_wait_mean": 3.301, "blocked_wait_mean": 0.7327, "guide_wait_mean": 0.222, "staff_wait_mean": 0.9547, "full_wait_mean": 2.1671, "pay_wait_mean": 12.2785},
  "staff_time_s": {"待機": 10165.4, "案内": 6065.995, "料理": 7562.676, "呼び出し": 2019.695, "会計": 7716.672, "片付け": 11094.97},
  "dish_wait_parts": {"robot": {"dishes": 0, "pass_wait_mean_min": 0, "carry_mean_min": 0, "requeue_lost_mean_min": 0, "total_mean_min": 0, "requeued_per_dish": 0, "requeued_total": 0}, "staff": {"dishes": 206, "pass_wait_mean_min": 0.5271, "carry_mean_min": 0.4342, "requeue_lost_mean_min": 0, "total_mean_min": 0.9613, "requeued_per_dish": 0, "requeued_total": 0}, "all": {"dishes": 206, "pass_wait_mean_min": 0.5271, "carry_mean_min": 0.4342, "requeue_lost_mean_min": 0, "total_mean_min": 0.9613, "requeued_per_dish": 0, "requeued_total": 0}},
  "job_wait_mean_s": {"案内": 27.01, "料理": 31.6275, "呼び出し": 31.6257, "会計": 136.7386, "片付け": 535.7809},
  "job_wait_max_s": {"案内": 135.5684, "料理": 150.5596, "呼び出し": 135.5186, "会計": 204.7471, "片付け": 1243.573},
  "job_wait_over_count": {"片付け": 39},
  "job_wait_note": {"over_s": 600, "pay_wait_from_pay_start_mean": 4.503, "note": "job_wait_* は、仕事が板に載ってからスタッフが取るまでの秒数。取られないまま終わった仕事（卓を空けたときに板から外した分）は入らない。あきらめて板に戻った仕事は、取られるたびに1回ずつ数える。over_s は長びいたと数える境目で、tableStuckFreeSec と同じ。pay_wait_from_pay_start_mean は pay_wait_mean を食べ終えた時刻ではなく会計に入った時刻から数えたもの（分）"},
  "staff_time_share": {"待機": 0.2278, "案内": 0.1359, "料理": 0.1695, "呼び出し": 0.0453, "会計": 0.1729, "片付け": 0.2486},
  "stops": {"count": 0, "stuck_count": 0, "partial_path_count": 0, "stop_s_total": 0},
  "trips": {"trips": 0, "timeouts": 0, "stuck_trips": 0, "distance_m_total": 0, "total_s": 0, "stopped_s": 0, "robot_speed_mps": 0, "pause_s_mean": 0, "pause_count": 0, "pause_rate_note": "hop_m は role=site_only で Unity は読まないため出さない。割り出すときは stops.count ÷（distance_m_total ÷ hop_m）", "stuck_rate_note": "同じ理由で出さない。stops.stuck_count ÷（distance_m_total ÷ hop_m）"},
  "stop_causes": [
  ],
  "conditions": [
  ]
}
