「送り直して詰める」を入れました。変更は pi05/run_policy_client.py の 1
  ファイルのみ（未コミット）。

  変えた行

  ┌─────────┬─────────────────────────────────────────────────────────────────┐
  │   行    │                              変更                               │
  ├─────────┼─────────────────────────────────────────────────────────────────┤
  │ 23-24   │ docstring の安全策に 1                                          │
  │         │ 項目（送り直しで詰める・新しい目標は作らない・0 で従来どおり）  │
  ├─────────┼─────────────────────────────────────────────────────────────────┤
  │ 199-245 │ settle_target(target, label, tol, retries) を新設（下記）       │
  ├─────────┼─────────────────────────────────────────────────────────────────┤
  │ 272-276 │ --settle-tol（既定 1.0）と --settle-retries（既定 2）を追加     │
  ├─────────┼─────────────────────────────────────────────────────────────────┤
  │         │ 送信後に rec["settle"], rec["settle_retries_used"] =            │
  │ 457-459 │ settle_target(target, f"pi05_chunk{i:03d}", args.settle_tol,    │
  │         │ args.settle_retries)                                            │
  └─────────┴─────────────────────────────────────────────────────────────────┘

  settle_target の中身:
  - retries <= 0 なら即
  return（関節角の読み取りもしないので、従来と完全に同じ動き）
  - 関節角を読み、|target − actual| の最大が tol 以下なら何もしない
  - 超えていたら _send_and_wait_arrival(tgt.tolist(), f"{label}_settle{n}", 3.0)
  で同じ目標を送り直し、読み直して記録。tol 以下になるか retries 回に達するまで
  - 送る値は引数の target そのもの（apply_limits と check_send_safe
  を通ったもの）。足し引きも再計算もしていません 
  - 最後まで詰まらなければ [WARN] を出して戻る（停止条件は増やしていません）
  - 関節角が読めなくなったら送り直しをやめて戻る

  _send_and_wait_arrival 本体（j0_sweep_scan.py）、HOME・SPEED・SEND_WAIT・J4_SAF
  E・J1_SAFE_MAX・apply_limits は一切触っていません。呼ぶ側で足しただけです。

  背景の裏取り（4 回分の記録）

  実装前に log.jsonl
  のチャンク間で「送った目標」と「次のチャンクの実測」を突き合わせました:

  - 肩を持ち上げる向き（j1 を小さくする指令）: 28 回、すべて届かず 
  0.77〜2.80°（中央 2.00°）低いところで停止。28 回すべて 3° 未満
  なので到達判定を通ってしまう
  確認結果（アームは動かさず・偽の daemon）

  偽の腕は「_send_and_wait_arrival を受けると姿勢 = 目標 + 残差（j1
  のみ）」にし、read_angles がそれを返します。開始 j1=60.0° → 目標 j1=50.0°（10°
  持ち上げ）。

  1. 1 回目 +2.0° → 送り直すと +0.4°（既定 tol 1.0 / retries 2）

  [000] 推論 0ms  5ステップ先  Δ= +0.0 -10.0  +0.0  +0.0  +0.0  +0.0
         [SETTLE] 送り直し 1 回目  最大ずれ 2.00°（関節 j1）→ 0.40°
  送信の履歴 (2 回):
    pi05_chunk000          目標 j1=+50.00 → 実際 j1=+52.00
    pi05_chunk000_settle1  目標 j1=+50.00 → 実際 j1=+50.40
  log: chunk=0 arrived=True settle_retries_used=1
       {"try": 1, "max_err_before": 2.0, "max_err_after": 0.4, "joint": 1,
  "actual": [0.0, 50.4, 0.0, 0.0, -40.0, -30.0]}

  0.40° ≤ 1.0° なので 2 回目には進まず、送り直し 1 回で終了。記録も残っています。

  2. 何度送っても +2.0° のまま

         [SETTLE] 送り直し 1 回目  最大ずれ 2.00°（関節 j1）→ 2.00°
         [SETTLE] 送り直し 2 回目  最大ずれ 2.00°（関節 j1）→ 2.00°
         [WARN] 送り直し 2 回でも最大ずれ 2.00° > 1.0°. 詰まりませんでした
  (止めずに次へ進みます)
  送信の履歴 (3 回): chunk000 / chunk000_settle1 / chunk000_settle2
  log: chunk=0 arrived=True settle_retries_used=2  (settle に 2 件)
  終了コード 0

  2 回で打ち切り、警告を出して次へ。終了コードは 0
  のまま（停止条件を増やしていない）。

  3. --settle-retries 0

  送信の履歴 (1 回): pi05_chunk000 のみ
  log: chunk=0 arrived=True settle_retries_used=0   ("settle": [])

  送り直しなし・[SETTLE] の表示なし = 従来どおり。

  おまけ: ドライラン（--execute なし） も確認しました —
  送信の呼び出しなし／グリッパーの呼び出しなし／settle キーも arrived
  キーも付かない（executed=False）。HOME
  復帰（h）とグリッパー開閉の経路は今回の差分に含まれていません。

  commit はしていません。codex レビューに出す準備ができています（出しますか？
  観点は「同じ目標の再送がアームに与える危険（再送で安全範囲を外れないか・h と
