# feat #910 Phase 2c — セルごとにペインの状態を覚える

ズームを別のターミナルに移して戻ってくるたびに、同じディレクトリを 3 つ開き直すことになる。
**セルごとに「どこを開いていたか」を覚える。**

## 何を覚えて、何を覚えないか

| | |
|---|---|
| 覚える | 開いていたディレクトリ、開いていたファイルのパス |
| 覚えない | **未保存のバッファ**。離れるときに保存済み（または退避済み）なので、持ち越すものが無い |
| 覚えない | ファイルの中身。戻ってきたらディスクから読み直す — その間にエージェントが書き換えているのが普通 |

保持はメモリのみ。リロードでグリッドごと作り直しになるうえ、前のセッションのパスは
今は無いかもしれず、復元しようとするほど嘘になる。

## 純粋部分を切り出した

`src/components/filesTreeState.ts`:

- `expandedPaths(nodes)` — 今開いているディレクトリ。**ファイルは覚えない**（開いている
  ディレクトリの下にしか出ないので、親が分かれば十分）
- `restoreOrder(paths)` — 浅い順。ツリーは遅延読み込みなので、**親を開かないと子は存在しない**。
  覚えたときの並びをそのまま使うのでは足りない

どちらも「決め事」なので、マウントしないと触れない場所には置かない。

## どのセルに紐づけるか

スナップショットは **`paneUid`**（ペインが実際に見ているセル）に紐づける。`expandedUid` では
ない — 保存できずに張り替えを断った場合、ペインは動いていないので、**行けなかった方のセルに
他人のツリーを配ってしまう**。

## テスト

- 純粋部分 6 件 — 開いているディレクトリだけ拾う / 閉じたディレクトリの中には降りない /
  浅い順に並べ替える / 重複を落とす
- ペイン 3 件 — 親を先に開いてから入れ子のファイルを開く / 消えたディレクトリは飛ばして
  残りは復元する / snapshot が覚えるべきものを返す
- グリッド 3 件 — 戻ってきたセルに覚えたツリーが渡る / 閉じて開き直しても残る /
  **張り替えに失敗したときのスナップショットは、ペインが実際にいるセルに紐づく**
