--state-from-target を足して commit
  しました（483a82c、pi05/run_policy_client.py のみ個別指定）。

  変えた行
     
  ┌─────────┬────────────────────────────────────────────────────────────────┐
  │   行    │                              変更                              │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 25-28   │ docstring の安全策に 1 項目（state だけを目標にする／6°        │
  │         │ 超で実測に戻す）                                               │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 105-107 │ STATE_TARGET_MAX_GAP_DEG = 6.0 を追加                          │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 446     │ last_sent_target = None                                        │
  │         │ を初期化（直前のチャンクで最後に送った目標）                   │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 396-398 │ --state-from-target（既定 off）を追加                          │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │         │ モデルに渡す state の決定。measured_state を保持しつつ、on     │
  │ 531-549 │ かつ last_sent_target ありで差が 6°                            │
  │         │ 以内なら目標を渡す。超えたら [WARN] + 実測。[STATE ]           │
  │         │ 行でどちらを渡したかと最大差（関節名つき）を表示               │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 564-566 │ rec に state_source と measured_state を追加（state            │
  │         │ はモデルに渡したほう）                                         │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 598-601 │ 送信ブロックの先頭で last_sent_target = None（s                │
  │         │ で飛ばす・中断の経路で残さない）                               │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 620,    │ sent_any を追加（実際に送ったか）                              │
  │ 659     │                                                                │
  ├─────────┼────────────────────────────────────────────────────────────────┤
  │ 690-694 │ チャンクを送り終えたら last_sent_target =                      │
  │         │ 最後の中継点の目標（送っていなければ None）                    │
  └─────────┴────────────────────────────────────────────────────────────────┘

  apply_limits / check_send_safe / 中継点の実測からのかけ直し / plan_chunk /
  --via-stride / settle / h・q・s / グリッパー / _send_and_wait_arrival
  本体は未変更です。変えたのはモデルに渡す state だけです。

  確認結果（偽の daemon・アームは動かさず）

  偽の腕は「送ると j1 が目標より 2.5°
  高いところで止まる」、偽のモデルは「受け取った state の j1 から 6°
  持ち上げる予測を返す」。開始 j1 = 60.0°。

  1. off（既定）— 今までどおり実測

  モデルに渡した state の j1: +60.00, +56.50, +53.00
  送った目標 j1 → 実測 j1    : +54.00→+56.50, +50.50→+53.00, +47.00→+49.50
  state_source: measured, measured, measured
  3 チャンクで目標は 47.0 = 開始 −13°（−18° のはずが 2.5°×2
  ぶん積み重なって足りない）。

  2. on — 2 チャンク目以降は直前の目標

  [STATE ] 実測を渡す (直前に送った目標がない)
  [STATE ] 目標を渡す  目標と実測の最大差 2.50°（関節 j1）
  モデルに渡した state の j1: +60.00, +54.00, +48.00
  送った目標 j1 → 実測 j1    : +54.00→+56.50, +48.00→+50.50, +42.00→+44.50
  state_source: measured, target, target
  最後の目標は 42.0 = 開始 −18° ちょうど。不足は毎回 2.5°
  のままで積み重なりません。

  3. 差が 6° を超えたとき（2 チャンク目だけ 8° 足りない腕）

  [WARN  ] 目標と実測の差が 8.00° > 6° なので実測を渡します
  (腕がどこかに当たって止まっている可能性)
  [STATE ] 実測を渡す  目標と実測の最大差 8.00°（関節 j1）
  state_source: measured, target, measured
  止めずに次へ進みます。

  4. s で飛ばした次のチャンク（手動で Enter → s → Enter）

  state_source: measured, target, measured
  送った目標: 54.0, 50.5   ← s のチャンクは送っていない

  5. ドライラン — 送信 0 回、3 チャンクとも measured。

  --via-stride の 11 ケースも再実行して全部 OK のままです。

  実機では --state-from-target --settle-retries 0
  の組み合わせになると思います。--via-stride
