③ スタッフ4人・ロボット2台（cs:117）が A03 の入口で動けなくなった件。
直さずに原因だけ調べました。読んだのは
  20261023_p1_efficient_corner_fam_p1_s4_r2_a42_s0_0655_stopped（trips/stops/dishes/groups/summary）
  店の形の JSON（p1_efficient_corner.json）
  07:28 の store_report（同じ③の店を、焼きたての NavMesh で調べたもの）

════════════════════════════════════════════════════════
結論
════════════════════════════════════════════════════════

**通路の幅は足りています。足りないのは「止まったまま抜け出す道」です。**

  1.「通路の幅が足りない」は、**幅の話ではありません**。
    「次の点までの道が引けなかった」ときに付く名前です（StopCause.NoPath）。
    そのとき記録された左右の空きは 37〜275 cm（中央 118 cm）で、物理的には広く空いています。

  2. 道が引けないあいだ、ロボットは **1 mm も動けません**。
       走ってよいか＝ wantMove ＝ 前が空いている かつ **道が引けている** かつ …
     道が引けないと wantMove が false になります。

  3. 道が引けないときの逃げ道（EscapePartialPath）は「通路の入口まで歩いて出る」ですが、
    **歩くには道が引けている必要がある**ので、いちばん必要な場面で働きません。
    入口まで 0.48 m しかないのに、そこへ歩き出せません。

  → 10 秒ごとに引き直す → 引けない → 入口へ出ようとする → 歩けない → 10 秒ごとに…
    を 600 秒の打ち切りまで繰り返します。1 往復あたり約 50 回の「止まり」として記録されます。

  実際の記録（往復39・robot1）。2 cm のあいだを行き来しながら、10.0 秒ちょうどで同じことを繰り返します。

     208.1 分 (9.38,4.52) 通路の幅が足りない 10.0 秒 引き直し replans=2 no_path 10.0 秒
     208.3 分 (9.30,4.47) 通路の幅が足りない 10.0 秒 引き直し replans=2 no_path 10.0 秒
     208.5 分 (9.30,4.49) 通路の幅が足りない 10.0 秒 引き直し replans=2 no_path 10.0 秒
     …（51 回・合計 504 秒）→ 600 秒で打ち切り

  no_path が 10.0 秒／10.0 秒なので、**その 10 秒のあいだ一度も道が引けていません**。
  引き直した先（通路の入口 9.2, 4.0）への道も引けていない、ということです。

────────────────────────────────────────────────────────
1. A03 は幅 1.2 m なのに、なぜ「通路の幅が足りない」になるのか
────────────────────────────────────────────────────────

(1) 幅は足りています（07:28 の store_report より。同じ店・焼きたての面）

    A03: 通路 1.2 m / 焼いた面のいちばん狭いところ **0.62 m**（ロボットの半径はすでに引いた後の幅）
    ロボットの道順 42 本・点 189 個のうち、ロボット用の面に乗っていない点 **0 個**
    ふさがないとき、届かない卓 **0 / 42**
    通路の入口の点（9.2, 4.0）のまわりのすき間 **1.00 m**

(2) 椅子でもありません

    ③ の椅子は **8 脚だけ**（A01〜A03 ぞいの卓はベンチで椅子を持ちません）。
    8 脚すべてを 0.3 m 引いた状態で、42 本の道順すべてと突き合わせました。
    **道順をふさぐ組み合わせは 0 件**です。

(3) 残るのは「道の引き方」です

    止まっている位置は (9.30, 4.47)。次の点は (9.31, 4.74) で、**27 cm 先**です。
    まわりは 0.67 m 空いています。この 27 cm の道が引けていません。
    ここから先は、回してみないと決められません。4 節に、何を足せば分かるかを書きます。

(4) ご質問の「1台が中にいるとき、もう1台が入口で待つ決まり」→ **あります**

    ServingRobotController.MustWaitForAisle
      ・その通路の中に別の台がいれば入らない
      ・同じ通路を目指している台が2台あれば、**番号の小さい方が先**
    待つ場所は通路の入口の点で、**待ち時間の上限がありません**。
    （人がロボットを待つときは 20 秒で打ち切る決まり robotYieldMaxSec があるのに、
      ロボットどうしには何もありません）

────────────────────────────────────────────────────────
2. 中の台が出ようとしたとき、入口の台とふさぎ合っていないか
────────────────────────────────────────────────────────

**ふさぎ合っています。記録に 2 回出ています。**

    15.7 分 robot2 往復1 (1.89, 3.81) **576 秒** 入口で待った  先に入っている台：ServingRobot01
    37.3 分 robot1 往復5 (1.90, 3.79) **556 秒** 入口で待った  先に入っている台：ServingRobot02

  どちらも A01 の入口（1.8, 3.8）で、**600 秒の打ち切りまで待ち続けて**終わっています。
  この2往復は、それだけで時間切れになりました（往復1 は届いた皿 0）。

  成り立ちは次のとおりです。
    ・外の台は「中の台が通路の区画から出る」まで待つ。上限なし
    ・中の台が戻り（ToPass）のときは譲らない決まりなので、出ようとはする
    ・しかし外の台は**入口の点そのもの**に立っているので、出口でぶつかる。
      ロボットは前のセンサーで相手を見ると止まる
    ・中の台が出られない → 外の台の待ちが終わらない → 互いに待ち合う

  なお A03 の入口の 982 回の止まりは、**973 回が robot1**、robot2 は 9 回です。
  そのうち 252 回は「道をふさいでいるものとして ServingRobot02 が 2 m 以内に見つかった」
  となっています。待ち合いと、道が引けない繰り返しが、同じ場所で重なっています。

────────────────────────────────────────────────────────
3. サイトの道順のうち、A03 を通る卓
────────────────────────────────────────────────────────

  受け渡し口からの道順 42 本の点が、どの通路の区画を通るかで数えました。

    A01（幅 1.2 m）: **T01 T02 T03 T04 T05 T06 T07 T08**（8 卓）
    A02（幅 1.2 m）: **T09 T10 T11 T12 T13 T14 T15 T16 T17**（9 卓）
    A03（幅 1.2 m）: **T18 T19 T20 T21 T22 T23 T24 T25 T26**（9 卓）
    どの通路も通らない卓: T27〜T42（16 卓）

  ③ は狭い道（0.8 m）が無いので、42 卓すべて use=normal・via_narrow=0 です。

  T19 の道順（7 点・8.76 m）
    (15.30,5.95) → (12.51,4.34) → (12.39,4.31) → (9.56,4.31)
    → (9.34,4.56) → (9.31,4.74) → (9.31,6.81)＝止まる位置
  止まりが集まっている (9.3, 4.4〜4.5) は、**このうち 4 点目と 5 点目のあいだ**です。

  道順に沿った静止物とのすき間（0.05 m 刻み）: いちばん狭くて **0.488 m**（相手 卓T27）。
  ロボットの半径 0.25 m を引くと余裕 0.238 m。狭いですが、通れないほどではありません。

────────────────────────────────────────────────────────
4. 帰らなかった3組（Seated のまま）
────────────────────────────────────────────────────────

  組24（2人・**T16**）着席 34.1 分 ／ 組27（4人・**T19**）着席 36.9 分 ／
  組28（4人・**T20**）着席 35.6 分
  3組とも 食べ終わり・会計・退店 がすべて -1（一度も起きていない）。

  理由は一本道です。

    (1) 組は「最初の料理が**全部**届いたら」食事に移ります（AllFirstDishesArrived）。
    (2) この3卓の料理は一度も届いていません。
        戻した皿 100 枚のうち、**T19 が 24 枚・T20 が 24 枚・T16 が 24 枚**（合計 72 枚）。
        戻した理由は 100 枚すべて「打ち切り」（＝ロボットの往復が 600 秒で切られた）。
        同じ皿が最大 8 回以上も戻されています。
    (3) 食事に移れない → 会計にも片付けにも進まない。
    (4) 「卓が空かないときに強引に空ける」逃がし弁（tableStuckFreeSec 600 秒）は、
        **会計中・片付け中の組にしか効きません**（GState.Paying / Clearing のときだけ）。
        Seated のまま止まった組は、いつまでも卓を占め続けます。
    (5) 卓が空かない → その3枚の皿が受け渡し口の先頭に残り続ける
        → 次の往復もまた同じ3卓へ割り当てられる。

  実際、**往復11 以降（57.8 分〜）robot1 は 22 回続けて まったく同じ「19;20;16」を走って**
  います。毎回 600 秒で切られ、毎回 3 枚とも戻る。これが 45/47 の時間切れの正体です。

    往復11 (57.8分) 19;20;16 時間切れ 入口の止まり 43 回
    往復13 (67.8分) 19;20;16 時間切れ  〃  0 回
    往復15 (77.8分) 19;20;16 時間切れ  〃 50 回
    …
    往復47 (287.9分) 19;20;16 時間切れ  〃 51 回

────────────────────────────────────────────────────────
5. 分かっていないこと（次に何を足せば分かるか）
────────────────────────────────────────────────────────

  「(9.30,4.47) から 27 cm 先の点へ、なぜ道が引けないのか」だけが残っています。
  店の形・焼いた面・椅子のどれでもないことは、上のとおり確かめました。
  いまの記録には、道を引くときに実際に使った点が残っていないので、ここで止まります。

  stops.csv に次の3つを足せば、1回回すだけで決まります（計測の決まりは変わりません）。
    ・道を引いた出発点（SamplePosition で面に寄せたあとの座標）
    ・道を引いた行き先（同じく寄せたあとの座標）と、それが道順の何点目か
    ・CalculatePath の結果（PathComplete / PathPartial / PathInvalid）と、角の数

  いまの見立て（確かめていません）：
    ロボットの立っている位置が面からわずかに外れ、面に寄せた出発点が
    通路の反対側へ飛んでいる、という形です。寄せる半径が 1.0 m と広いので、
    0.62 m 幅の通路では、反対側の島に乗ることがありえます。
    上の3つを足せば、これが当たりかどうかがその場で分かります。

────────────────────────────────────────────────────────
6. 直すとしたら（まだ何もしていません）
────────────────────────────────────────────────────────

  a. 道が引けないときに、その場から動けるようにする
     いまは「入口へ歩いて出る」逃げ道が、歩けないので働きません。
     道が引けないまま一定の秒数が過ぎたら、道順の**手前の点へ戻す**
     （来た道なので必ず引ける）か、その区間だけ寄せる半径を変えて引き直す。
  b. ロボットどうしの入口待ちに上限を付ける（人の robotYieldMaxSec 20 秒と同じ考え方）。
     上限を過ぎたら、譲らずに進む。
  c. Seated のまま止まった組にも、卓を空ける逃がし弁を効かせる
     （いまは会計中・片付け中だけ）。
  d. 同じ皿が何回も戻ったら、ロボットではなくスタッフに回す。
     いまは同じ3枚が 24 回ずつ同じ道へ送り返されています。

  どれを入れるかはご指示をください。
