依頼181 報告：実機推論で、箱に置き終えたら自動で終わる（Log35）

■ やったこと
1. run_policy_client.py に --auto-finish を足した（付けなければ今までと同じ。log の頭にも何も足さない）
- 終わる条件（すべて）：a. 爪を閉じてから開いた（推論・補正のどちらでも。補正の中の g の閉→開も数える。つかんだ区間を巻き戻して開いたら数え直す）／爪が今開いている／b. 推論の前の実測角と HOME の差が各関節 8° 以内（--finish-home-tol）／c. b の状態で、答えの先頭 10 ステップと実測角の差が各関節 3° 以内（--finish-still-deg）のチャンクが 2 回続いた（--finish-chunks）
- 終わったら、そのチャンクは送らずに h と同じ送り方で HOME へ戻し、結果の入力（y/n/Enter）へ進む。[FINISH] の 1 行、log.jsonl に type=finish（event=auto_finish・何チャンク目・条件の値・HOME からの差・Δ）、そのチャンクの行に auto_finish、{run_stem}.json の end_reason=auto_finish（result=completed）。各チャンクの行に finish_check（判定の値）
- 放したあとにまた閉じる答え（2 回目のつかみ）が出たら、そのチャンクは送らずに入力欄を出す（[FINISH] の 1 行・type=finish / event=regrasp）。入力欄で Enter を押せば今までどおり送る（人の判断）。--auto のときは入力欄を出せないので送らずに終える（終了コード 1・end_reason=regrasp・アームは動かさない）
- スペースで止める予約があるとき・入力欄で s/b/c/p を選んだあと（Enter で実行するまで）は、終わる条件を満たしても入力欄を優先する（勝手に HOME へ動かさない）
2. lab_start.sh：既定で --auto-finish を渡す。--no-auto-finish で今までどおり。起動時に [FINISH] の行。--help の表示を 2〜64 行に広げた
3. chunk_timing.py：「終わり方」の行（自動で終わった／人が止めた (h・q・Ctrl-C)／上限／2 回目のつかみで止めた／エラー）と比べる表の列、チャンクのメモに「自動で終えた」「2回目のつかみ」
4. テスト：pi05/test_auto_finish.py 17 件（Log35 の 7 本の再生・判定の単体・偽のアームでの通し・HEAD と同じか）。python3 pi05/test_auto_finish.py --table で下の表が出る
  既存：test_rewind_correct 81・test_no_step_confirm 17・test_skip_first_confirm 6・test_flow_send 16・test_chunk_timing 7・test_pad_correction 24・tools/test_gamepad_teleop 93 すべて OK、test_lab_start.sh OK 222 / NG 0
5. codex：3 回。1 回目 必須 2・軽微 1（R1 答えの全ステップを見ていた→先頭 10 ステップだけ／R2 補正の中の閉→開を数えていなかった→爪の指令を 1 つずつ知らせる。あわせて「爪が開いている」を条件に足した／R3 付けないときも頭に auto_finish:null→付けたときだけ）。2 回目 必須 1（チャンクごとに確かめる形で --finish-chunks 1 だと s/c のあとでも自動で HOME へ→確かめの形によらず止める）。3 回目 指摘なし
6. コミット 68f514a（5 ファイルを個別に add）

■ 既定の値と根拠（Log35 の 7 本。放したあとのチャンク。値は各関節の最大）
既定は依頼のまま（8°・3°・2 回）で、直す必要はなかった。
- HOME に戻って止まっているチャンク：HOME からの差 4.1〜5.5°（どれも j1）、Δ 1.1〜2.7°
- HOME へ戻る途中：HOME からの差 6.0〜67.8°、Δ 3.1° 以上（182327 のチャンク 15 は差 6.0°・Δ 3.1° で止まっていない扱い）
- 置く前・運ぶ途中（放したチャンクまで）：「放した」が成り立たないので終わらない（運ぶ途中の HOME からの差は 50° 以上）

182327（放したのはチャンク 10）
 chunk  HOMEからの差  Δ10ステップ  続いた
   11   65.0 (j1)   15.5 (j1)   0
   12   52.0 (j1)   24.8 (j1)   0
   13   29.1 (j1)   15.9 (j1)   0
   14   15.9 (j1)   11.7 (j1)   0
   15    6.0 (j1)    3.1 (j0)   0
   16    5.1 (j1)    1.7 (j1)   1
   17    5.0 (j1)    1.7 (j1)   2  ← 終わる
   …（判定しなければ 35 まで同じ形。36〜46 で j0 が −21° へ流れ、HOME からの差 6.4→21.5°）
   51   66.4 (j4)    1.9 (j1)      ← 2 回目のつかみ（何もない所で閉じた）
180457（放したのは 11）：12 64.0/13.5、13 52.6/22.6、14 31.7/24.7、15 8.5/4.3、16 5.5/2.2 (1)、17 4.8/1.5 (2) ← 終わる
181300（放したのは 14）：15 64.0/16.1、16 50.5/26.1、17 25.7/15.2、18 12.2/8.5、19 5.4/2.0 (1)、20 4.9/1.6 (2) ← 終わる
182039（放したのは 9）：10 63.7/17.5、11 48.5/28.2、12 23.3/11.1、13 14.2/11.0、14 4.6/1.9 (1)、15 4.4/2.0 (2) ← 終わる
182211（放したのは 8）：9 67.8/14.4、10 55.5/27.1、11 30.1/27.3、12 4.3/2.1 (1)（ここで人が止めた）
180704（放したのは 10）：11〜15 で HOME からの差 63.7→18.9°（戻る途中で人が止めた）
181057（放したのは 14）：15〜20 で HOME からの差 27.6° 以上（HOME に戻らないうちに人が止めた）

■ 7 本で何チャンク目で終わる判定になるか
 試行      放した  終わる判定  実際に止めたチャンク
 180457     11      17         24（人）
 180704     10      なし        15（人。HOME に戻る前）
 181057     14      なし        20（人。HOME に戻る前）
 181300     14      20         24（人）
 182039      9      15         15（人）
 182211      8      なし        12（人。HOME 近くで 1 回目のところ。次も同じなら 13 で終わる）
 182327     10      17         59（上限 60。2 回目のつかみ 51 より前に終わる）
HOME に戻ってから 2 チャンク目で終わる。放したチャンクからは 5〜7 チャンクあとで、そのうち 3〜5 チャンクは HOME へ戻る動き。

■ 画面の例（偽のアームで流したもの）
[FINISH] --auto-finish: つかんで放したあと, HOME からの差が各関節 8° 以内で 答えの Δ (10 ステップ先まで) が各関節 3° 以内のチャンクが 2 回続いたら, 送らずに HOME へ戻して終えます. 2 回目のつかみは送らずに止めます
       [FINISH] 置き終えたので終えます (放したあと HOME 近くで止まったチャンクが 2 回続いた). 推論 6 は送らずに HOME へ戻します  HOME からの差 最大 0.0° (j0)  Δ (10 ステップ先まで) 最大 0.3° (j0)
       結果: y=成功 / n=失敗 / Enter=記録しない >
2 回目のつかみ：
       [FINISH] 放したあとにまた閉じる答え (2 回目のつかみ). 推論 5 は送らずに止めます  HOME からの差 最大 0.0° (j0)  Δ (10 ステップ先まで) 最大 0.3° (j0)
       Enter=実行 / s=送らず次へ / b=巻き戻し / p=ゲームパッドで補正 / c=キーで補正 / r=爪の締め直し / h=HOMEに戻して終了 / q=終了 >
止めているとき：
       [FINISH] 終わる条件を満たしたが, 止めているので入力欄を出します  HOME からの差 …
chunk_timing.py：
   終わり方: 自動で終わった (置き終えた)  推論 6 で HOME へ (HOME からの差 最大 0.0°・Δ 最大 0.3°・2 回続いた)
   終わり方: 人が止めた (h で HOME)  (2 回目のつかみで止めた 1 回)

■ 決めてほしいこと
1. 1 回目のつかみが空振りで、AI が開いてつかみ直そうとしたときも「2 回目のつかみ」として止めて入力欄を出す（つかめたかは判定できないため、閉じて開いたあとの閉じる答えはすべて止める）。このままでよいか。補正の R（開いて閉じ直す）のあとの閉じる答えも同じく止まる。
2. --auto のときの 2 回目のつかみは「送らずに終了コード 1 で終える（HOME へは動かさない）」にした。HOME へ戻して終える方がよければ直す。
3. 実機での確かめ（lab_start.sh の既定で --auto-finish が入る）。実機は動かしていない。

■ 気づいたこと（範囲の外なので変えていない）
既存のテスト用の偽のアーム（test_rewind_correct.run_client）は、--execute のときの記録スレッドの電流の読み取り（daemon_read_servo）を差し替えていないため、Pi の daemon（192.168.2.1:5555）につながって読み取りだけしている。アームは動かさないが、テストが実機の daemon に触れる。
