# 結果：20261114_196_補正エピソードの1コマごとに埋めた値の印を残す

- 状態：完了
- 始めた時刻：2026-11-14 23:31
- 終わった時刻：2026-11-14 23:53（22分）
- 作業フォルダ：/Users/shimazueiichi/r2r2r-scripts
- この続きを Claude Code で話すとき：作業フォルダで `claude --resume 33911490-06b8-4595-a4f2-9b2e50a3158e`

## Claude Code の報告

**やったこと**
- `pi05/build_correction_episodes.py` に、1 コマごとの印 `state_source`（int8）を作る処理を足しました。`episode.npz` に `state_source` を入れ、`meta.json` に次の 4 つを足しました。README の作り方の説明にも、印の意味を 1 段落足しました。
  - `filled_steps`（埋めたコマの数）
  - `filled_motion_steps`（そのうち動いた抜けのコマの数）
  - `filled_ratio`（全コマに対する割合）
  - `state_source_codes`（番号の意味）
- 印の番号と意味:
  - 0 = 実測角。0.25 秒以内の前後の実測角をまっすぐ結んだ値で、ふだんは 0.1 秒おきに読めています。
  - 1 = 動いた抜け（前後の実測角の差が 0.5° を超える）の中を、`fill_motion_gaps` が埋めた値。
  - 2 = 動かなかった抜け（爪の送信など）の中を埋めた値。コードに「動いた抜け」と「動かなかった抜け」の区別があったので、番号を 1 つ足しました。
  - 印は関節 6 列についてのものです。爪の列はいつも指令の値です。actions の関節は次のコマの state なので、その出どころは次のコマの印で分かります。
- 直したところがもう 1 つあります。`check_compat`（`--check-with` でお手本と比べる所）は、お手本にない `state_source` のキーを「キーが違う」と数えないようにしました。直さないと、`--check-with` が新しいキーのせいで不合格を出すためです。
- `convert_to_lerobot.py`・`check_dataset.py`・`eval_policy_offline.py`・`merge_raw_episodes.py` などは、`state`・`actions`・`t_orig` をキーの名前で読むか、フォルダをそのまま写すだけです。新しいキーがあっても今までどおり動くので、直していません。
- 測る道具 `pi05/diag_fill_flags.py` を新しく作りました。元の `runs/pi05_policy` から各エピソードの `meta.json` と同じ条件で /tmp に作り直して数えます。データセットには書き込んでいません。
- codex のレビューを 1 回受けました。本体の不具合はなしで、`diag_fill_flags.py` の P2 が 1 件（対象が 0 本だと落ちる）でした。これは直しました。

**結果**
- テスト: 新しい `test_state_source.py` の 6 件はすべて通りました。実データ 2 本を 3 条件で、直す前（HEAD）と今のコードで作り、`state`・`actions`・`t`・`t_orig` がバイト単位で同じことを確かめました。印のつながりの数が meta の `gaps`・`motion_gaps` を超えないことも確かめています。pi05 のテストは 25 ファイルすべて OK です。
- 既存の補正データセット 14 個・95 本を作り直したところ、全本で state・actions・t がデータセットの中身と一致しました。数えなかった本はありません。

| データセット | 本数 | 全コマ | 埋めたコマ（うち動いた抜け） | 割合 | 割合がいちばん多い本 |
|---|---|---|---|---|---|
| teach_v1_trim2_corr_v5（学習に使用） | 11 | 1584 | 655 (624) | 41.4% | pi05_20261031_175527（76.3%） |
| deep_even10_v1（学習に使用） | 6 | 884 | 385 (366) | 43.6% | 同上（76.3%） |
| teach_v1_trim2_corr_v5_deep | 7 | 1029 | 478 (455) | 46.5% | 同上（76.3%） |
| corr_v1 / trim2_corr_v1 | 5 | 1469 | 1365 (1354) | 92.9% | 同上（95.8%） |
| corr_v2 / trim2_corr_v2 | 5 | 1159 | 922 (900) | 79.6% | 同上（83.9%） |
| corr_v3 / trim2_corr_v3 | 5 | 726 | 514 (497) | 70.8% | 同上（76.3%） |
| corr_v4 / trim2_corr_v4 | 8 | 1090 | 754 (729) | 69.2% | 同上（76.3%） |
| corr_v4b / trim2_corr_v4b | 7 | 893 | 629 (607) | 70.4% | 同上（76.3%） |
| corr_v5 | 11 | 1584 | 655 (624) | 41.4% | 同上（76.3%） |

- 2026-11-06 に記録した 4 本は埋めた割合が 2〜5% と低く、10 月 31 日・11 月 1 日の本は 57〜96% です。

**手教示・scripted に埋めた値があるか**
- あります。印はありません（直していません）。
- `build_demo_episodes.py` は、実測角の間がどれだけ長くても前後をまっすぐ結んでいます。これは補正の `--gap-fill linear` と同じ埋め方です。
- 元の記録では、実測角はふだん約 0.32 秒おきにしか読めていません。補正と同じ「0.25 秒より長い間」の決まりで数えると、10Hz のコマのほぼ全部（98.8〜99.4%）が抜けになります。
- 1 秒を超える間だけを見ると、全体の時間に対して次の割合です（どちらも詰める前の時間軸で数えた値）。
  - teach_v1_trim2・teach_pos1to4_deep_v1: 62%
  - scripted_v1: 93%（最大の間は 212 秒）

**変えたファイル**
- `pi05/build_correction_episodes.py`（直した）
- `pi05/test_state_source.py`（新しく作った）
- `pi05/diag_fill_flags.py`（新しく作った）
- commit は 18e579c です。3 つのファイルだけを指定して add しました。
- 測った結果は `/Volumes/KIOXIA/r2r2r-data/diag/fill_flags_20261114/` にあります: `episodes.csv`・`summary.csv`・`README.md`・`teach_scripted.txt`・`codex_review.txt`。
- 作業の記録として `logs/20261114_2353.md` も置きました（commit はしていません）。

**決めてほしいこと**
- 手教示・scripted の印の決まり: ふだんの読み取りが約 0.32 秒おきなので、補正と同じ 0.25 秒の決まりは使えません。印を付けるなら「何秒より長い間を抜けとみなすか」をエイイチが決める必要があります（今回は直していません）。
- 既存の補正データセットに `state_source` を付けて作り直すかどうか（今回は作り直していません）。

判定：止めた（決めてほしいことあり）
