Skip to content

fix(session): choose the resume line only when the transcript it names actually exists #131

Description

@smileygames

目的

再開の線を選ぶ前に、その会話が実在するかを見る。無ければ通常起動にし、記録も外す。

記録した 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 が会話の実体であり、サーバ側に控えは無い。

効いているのは二点である。

  1. Codex の resume は常に「CLI が死んでいる側」である。 生きているプロセスへ繋ぎ直す道は無い。走っているセッションは再開の対象ではなく、もう中に居るからである。
  2. 記録した id ではなく、実在する transcript から選ばせる。 ファイルが無ければ一覧に出ないため、無いものを resume しようとする状態が作れない。

pullcept は 2 の逆をしている。spawn 直後に id を記録し、後から無条件に渡す。#127 はその帰結である。

二つの場面は、二つの仕組みである

Master の指摘(CLI が生きている場合と死んでいる場合を分けて考える必要がある)を、上の 1 と突き合わせるとこうなる。

場面 実体 担当
CLI が生きている(スリープ復帰) 繋ぎ直し 席の引き取り(#84#115 決定4C)。PTY が生きているので --resume は要らない
CLI が死んでいる(アプリ再起動) 読み直し ここが本当の resume

二つの場合ではなく、二つの別の仕組みが一つの設定欄に相乗りしている。 前者に --resume は元々不要であり、それが同居しているために要らない場面で発火する(#128)。この issue は後者だけを resume の担当として残す。

前提

  • Claude Code の transcript は ~/.claude/projects/<cwd のスラッグ>/<session-id>.jsonl に在る。実測: Claude Lay の作業ディレクトリ C:\Users\smile\Claude に対して C--Users-smile-Claude/ が実在し、その中に uuid 名の .jsonl が並ぶ。C:\Users\smile\CodeC--Users-smile-Code になる。スラッグの規則(区切り文字を - に畳む形)は実装側で二例から確定すること。
  • 現在の resolve_launchsrc-tauri/src/session.rs:369)の条件は「トピックに id が記録されている」と「アカウントが再開の線を持つ」の二つだけで、会話の実在を見ていない。
  • 記録は spawn 成功の直後(同 :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.rs
  • src-tauri/src/room_log.rs
  • docs/0-requirements.md

関連

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bug動いていない、壊れているready本文が実装開始できる形まで収束している状態。ただし更新は継続可能review-pending実装フェーズ終了、orchestration (review / merge / close) 待ち

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions