You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
resolve_launch(src-tauri/src/session.rs:369)は、トピックに記録された id と アカウントの再開コマンドの両方が揃ったときだけ再開の線を選ぶ。片方でも欠ければ通常起動になる。
記録は spawn 成功の直後に行われる(同 :596 付近)。コメントはこの順序の理由をこう述べている——「Recorded after the spawn rather than before: an id written for a launch that failed would be resumed into a session that was never started.」
その守りは掛かる位置が一段早い。 spawn 成功は「プロセスが立った」ことであって「会話ができた」ことではない。Claude Lay の args は --dangerously-load-development-channels server:github-webhook-mcp を含んでおり、CLI は起動直後に確認プロンプト(1. I am using this for local development / 2. Exit)で止まる。ここで終了すると、プロセスは立ったが会話は作られていない。id はもう記録されている。
再開コマンドはもともとスリープ回避策として入れたものである。 PC がスリープから復帰したとき、webview の再読み込みで部屋が空になる経路(#108、#84)に対する手当てとして書かれた。
resolve_launch はその由来を知らない。分岐の条件は「このトピックにこのアカウントの id が記録されているか」と「アカウントが再開の線を持つか」の二つだけであり、どの状況で再開すべきかという軸を持たない。したがって、スリープ復帰のために書かれた線が、アプリの再起動後の起動でもそのまま発火する。
目的
起動が会話を作る前に終わると、そのトピックに死んだセッション id が残る。以後そのアカウントをそのトピックで起動するたびに再開が走り、
No conversation found with session IDで失敗する。復帰経路が無い——再開コマンドを消すか、トピックを消すまで直らない。観測
2026-08-29 00:41 に Claude Lay を起動、00:42 に再度起動して次が出た。
状態行は「Claude Lay を再開しました。」であり、再開の線に入っている。
再開コマンドを消すと同じ操作でエラーが出なくなる(Master が実測)。
resolve_launchの再開分岐が両方揃ったときだけ発火するため、片方を欠いた状態が回避になっている。今夜の CLI セッションは
~/.claude/projects/C--Users-smile-Claude/に一つも記録されていない(最新は 8/28 18:58)。id は在るのに会話が無い、という状態が実際に起きている。前提
いずれも
main(542f770)で確認した。resolve_launch(src-tauri/src/session.rs:369)は、トピックに記録された id と アカウントの再開コマンドの両方が揃ったときだけ再開の線を選ぶ。片方でも欠ければ通常起動になる。:596付近)。コメントはこの順序の理由をこう述べている——「Recorded after the spawn rather than before: an id written for a launch that failed would be resumed into a session that was never started.」--dangerously-load-development-channels server:github-webhook-mcpを含んでおり、CLI は起動直後に確認プロンプト(1. I am using this for local development/2. Exit)で止まる。ここで終了すると、プロセスは立ったが会話は作られていない。id はもう記録されている。由来(Master 談)
再開コマンドはもともとスリープ回避策として入れたものである。 PC がスリープから復帰したとき、webview の再読み込みで部屋が空になる経路(#108、#84)に対する手当てとして書かれた。
resolve_launchはその由来を知らない。分岐の条件は「このトピックにこのアカウントの id が記録されているか」と「アカウントが再開の線を持つか」の二つだけであり、どの状況で再開すべきかという軸を持たない。したがって、スリープ復帰のために書かれた線が、アプリの再起動後の起動でもそのまま発火する。この二つは前提が違う。スリープ復帰では CLI のプロセスが生きている——席の引き取り(#115 決定4C / #84)が繋ぎ直す経路であり、そもそも
--resumeを要しない場合がある。再起動後はプロセスが無く、--resumeが頼るのは会話が保存されていることだけである。上の「会話ができる前に終わった起動」は、まさにその前提が崩れる場合であり、スリープ用に書かれた線が一番効かない状況で発火している。制約
docs/0-requirements.md「CLI の出力から状態を読む形」で一度見送られている軸なので、そこへ踏み込むかどうかは判断が要る。No conversation foundを返したらその記録を消す)は最小だが、エラー文字列に依存する。CLI の版で文言が変われば黙って効かなくなる。決定
AI 判断1: 軸2 と軸3 を採る。 再開の線で起動したセッションが席に着かないまま終了したら、そのトピックからその id の記録を外し、状態行でそう言う。次に押したときは通常起動になる。
採る理由:
pty.rs:199がpty-exit-{id}に終了コードを載せて出しており、画面はこれを受けて「〜が終了しました(…)。端末を確認してください。」を既に描いている(src/main.ts:2767)。CLI の出力を読む必要が無いので、制約に挙げた文字列依存を負わない。docs/0-requirements.md「CLI の出力から状態を読む形」で見送られた軸にも踏み込まない。AI 判断2: 自動で起動し直さない。 記録を外して終わり、次の操作は人が決める。自動再試行は失敗の繰り返しをこちらで回す形になり、
model-loop-safetyの避ける形に当たる。一度押し直せば通常起動で立つ。軸4 は見送り、この issue では扱わない。 再開の線に適用範囲を持たせる形は設定の概念を増やす変更であり、今回の復帰とは別の判断である。由来(スリープ回避)から見て検討に値するので、別 issue で扱う。
判別条件(席に着かないまま終了した、の literal)は実装側で決めてよい。
LaunchLine.resumedが再開かどうかを持ち、seats.holdが着席の位置である。CLI のエラー文言との一致を条件に使わないことが制約である。想定される軸(判断の材料。採否は上記)
target files
src-tauri/src/session.rssrc-tauri/src/room_log.rsdocs/0-requirements.md関連
record_sessionが題の無い行を作る側面。こちらは行の見せ方と消し方で、id の生死は別軸)