目的
再開の線を選ぶ前に、その会話が実在するかを見る。無ければ通常起動にし、記録も外す。
記録した id を無条件に --resume へ渡す現在の形をやめる。在るものから選ぶ形にすれば、無い会話へ戻ろうとする状態がそもそも作れない。
由来
Codex の resume を参考にした(Master 指示、2026-08-29)。あちらは codex resume --last / codex resume(一覧から選択)/ codex resume <session-id> で、保存先は ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl。その JSONL が会話の実体であり、サーバ側に控えは無い。
効いているのは二点である。
- Codex の resume は常に「CLI が死んでいる側」である。 生きているプロセスへ繋ぎ直す道は無い。走っているセッションは再開の対象ではなく、もう中に居るからである。
- 記録した id ではなく、実在する transcript から選ばせる。 ファイルが無ければ一覧に出ないため、無いものを resume しようとする状態が作れない。
pullcept は 2 の逆をしている。spawn 直後に id を記録し、後から無条件に渡す。#127 はその帰結である。
二つの場面は、二つの仕組みである
Master の指摘(CLI が生きている場合と死んでいる場合を分けて考える必要がある)を、上の 1 と突き合わせるとこうなる。
| 場面 |
実体 |
担当 |
| CLI が生きている(スリープ復帰) |
繋ぎ直し |
席の引き取り(#84、#115 決定4C)。PTY が生きているので --resume は要らない |
| CLI が死んでいる(アプリ再起動) |
読み直し |
ここが本当の resume |
二つの場合ではなく、二つの別の仕組みが一つの設定欄に相乗りしている。 前者に --resume は元々不要であり、それが同居しているために要らない場面で発火する(#128)。この issue は後者だけを resume の担当として残す。
前提
決定
決定1: 再開の線を選ぶ条件に「transcript が実在すること」を足す。 三つ揃ったときだけ再開になる——記録された id が在り、アカウントが再開の線を持ち、その id の transcript がファイルとして在る。
決定2: 実在しなければ、その場で記録を外す。 失敗を待たずに外す。次の起動は通常起動になる。外したことは状態行で述べる(#127 と同じ理由)。
決定3: Claude Code の保存レイアウトへの依存を受け入れる(Master 判断)。 文字列一致より安定だが、CLI ごとに異なる(Codex なら ~/.codex/sessions/...)ため、複数の CLI を迎える設計とは噛み合わない。現状は Claude 依存で構わない、という判断である。その依存は一箇所に閉じ、どこに依存しているかを docs に書くこと。 将来 CLI が増えるとき、差し替える場所が一つで済む形にする。
決定4: #127 の復帰(失敗した再開のあとに記録を外す)は残す。 この issue の事前判定が入れば通る道はほぼ無くなるが、transcript が在るのに CLI が拒む場合が残る。#130 が直れば生きる守りであり、消して足し直すのは無駄である。
制約
target files
src-tauri/src/session.rs
src-tauri/src/room_log.rs
docs/0-requirements.md
関連
目的
再開の線を選ぶ前に、その会話が実在するかを見る。無ければ通常起動にし、記録も外す。
記録した id を無条件に
--resumeへ渡す現在の形をやめる。在るものから選ぶ形にすれば、無い会話へ戻ろうとする状態がそもそも作れない。由来
Codex の resume を参考にした(Master 指示、2026-08-29)。あちらは
codex resume --last/codex resume(一覧から選択)/codex resume <session-id>で、保存先は~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl。その JSONL が会話の実体であり、サーバ側に控えは無い。効いているのは二点である。
pullcept は 2 の逆をしている。spawn 直後に id を記録し、後から無条件に渡す。#127 はその帰結である。
二つの場面は、二つの仕組みである
Master の指摘(CLI が生きている場合と死んでいる場合を分けて考える必要がある)を、上の 1 と突き合わせるとこうなる。
--resumeは要らない二つの場合ではなく、二つの別の仕組みが一つの設定欄に相乗りしている。 前者に
--resumeは元々不要であり、それが同居しているために要らない場面で発火する(#128)。この issue は後者だけを resume の担当として残す。前提
~/.claude/projects/<cwd のスラッグ>/<session-id>.jsonlに在る。実測: Claude Lay の作業ディレクトリC:\Users\smile\Claudeに対してC--Users-smile-Claude/が実在し、その中に uuid 名の.jsonlが並ぶ。C:\Users\smile\CodeはC--Users-smile-Codeになる。スラッグの規則(区切り文字を-に畳む形)は実装側で二例から確定すること。resolve_launch(src-tauri/src/session.rs:369)の条件は「トピックに id が記録されている」と「アカウントが再開の線を持つ」の二つだけで、会話の実在を見ていない。:596付近)。プロセスが立ったことは会話ができたことではない(bug(session): a session id recorded on spawn poisons every later resume when the CLI never created the conversation #127)。決定
決定1: 再開の線を選ぶ条件に「transcript が実在すること」を足す。 三つ揃ったときだけ再開になる——記録された id が在り、アカウントが再開の線を持ち、その id の transcript がファイルとして在る。
決定2: 実在しなければ、その場で記録を外す。 失敗を待たずに外す。次の起動は通常起動になる。外したことは状態行で述べる(#127 と同じ理由)。
決定3: Claude Code の保存レイアウトへの依存を受け入れる(Master 判断)。 文字列一致より安定だが、CLI ごとに異なる(Codex なら
~/.codex/sessions/...)ため、複数の CLI を迎える設計とは噛み合わない。現状は Claude 依存で構わない、という判断である。その依存は一箇所に閉じ、どこに依存しているかを docs に書くこと。 将来 CLI が増えるとき、差し替える場所が一つで済む形にする。決定4: #127 の復帰(失敗した再開のあとに記録を外す)は残す。 この issue の事前判定が入れば通る道はほぼ無くなるが、transcript が在るのに CLI が拒む場合が残る。#130 が直れば生きる守りであり、消して足し直すのは無駄である。
制約
target files
src-tauri/src/session.rssrc-tauri/src/room_log.rsdocs/0-requirements.md関連