目的
自分で終了したセッションを、アプリが終了したと気づかない。行は「起動中」のまま残り、人が ❌ を押すまで動かない。押した時点ではこちらから止めた終了として着くため、#127 の復帰は設計どおり見送られる。
結果として #127 の修理は、それが書かれた当の経路で一度も発火しない。
観測(2026-08-29 14:09〜14:12、main bea76b6 の実機)
#127 の経路を意図的に再現した。トピック「ハロ〜」には 00:41 起動時の死んだ id b384c094-… が残っており、Claude Lay の再開コマンドを claude --resume {session_id} に戻したうえで、そのトピックを開いて起動した。
- 再開の線に入った。 状態行「Claude Lay を再開しました。」
- CLI が失敗した。 端末に
No conversation found with session ID: b384c094-f08b-414a-bc8f-e39454a60f46。索引の id と一致する。
- CLI は自分で終了した。 プロセス木を確認したところ、
pullcept.exe の子は webview と conhost.exe のみで、CLI は在らず。走っている claude-code は Master 自身のもの(14:08:40 起動、親は Claude Desktop)だけであった。
- しかしアプリは気づかない。 約 40 秒観測しても行は「起動中」、
セッション: Claude Lay 起動中 のまま。pty-exit に相当する画面側の反応(「〜が終了しました」)が一度も出ない。子を持たない conhost.exe だけが生き残っていた。
❌ で止めると、そこで初めて終了が着いた。 状態行「Claude Lay が終了しました(終了コード不明)。端末を確認してください。」
- 索引の記録はそのまま。
sessions: {2d8f9a1a: b384c094} が全工程のあとも残っている。
効いている構造
#127 は「自分で終わったか」を終了コードの有無で判別している。pty.rs が kill されたセッションを reap の前に map から外すため、こちらから止めた終了はコードを伴わずに着く——これは行の ❌・トピック削除・アプリ終了を除外するための、正しい守りである。
問題は、アプリが自死を観測しないために、自死が人の kill に化けることである。
守りが外れているのではない。守りが正しいまま、入力のほうが化けている。 #127 の条件を緩めても直らない(緩めれば今度は本物の kill で記録を落とす)。直すべきは 4 である。
前提
判断が要る点
target files
src-tauri/src/pty.rs
src-tauri/src/session.rs
src/main.ts
docs/0-requirements.md
関連
目的
自分で終了したセッションを、アプリが終了したと気づかない。行は「起動中」のまま残り、人が
❌を押すまで動かない。押した時点ではこちらから止めた終了として着くため、#127 の復帰は設計どおり見送られる。結果として #127 の修理は、それが書かれた当の経路で一度も発火しない。
観測(2026-08-29 14:09〜14:12、
mainbea76b6の実機)#127 の経路を意図的に再現した。トピック「ハロ〜」には 00:41 起動時の死んだ id
b384c094-…が残っており、Claude Lay の再開コマンドをclaude --resume {session_id}に戻したうえで、そのトピックを開いて起動した。No conversation found with session ID: b384c094-f08b-414a-bc8f-e39454a60f46。索引の id と一致する。pullcept.exeの子は webview とconhost.exeのみで、CLI は在らず。走っている claude-code は Master 自身のもの(14:08:40 起動、親は Claude Desktop)だけであった。セッション: Claude Lay 起動中のまま。pty-exitに相当する画面側の反応(「〜が終了しました」)が一度も出ない。子を持たないconhost.exeだけが生き残っていた。❌で止めると、そこで初めて終了が着いた。 状態行「Claude Lay が終了しました(終了コード不明)。端末を確認してください。」sessions: {2d8f9a1a: b384c094}が全工程のあとも残っている。効いている構造
#127 は「自分で終わったか」を終了コードの有無で判別している。
pty.rsが kill されたセッションを reap の前に map から外すため、こちらから止めた終了はコードを伴わずに着く——これは行の❌・トピック削除・アプリ終了を除外するための、正しい守りである。問題は、アプリが自死を観測しないために、自死が人の kill に化けることである。
❌を押すしかない。❌が唯一の終了イベントになり、コード無しで着く。守りが外れているのではない。守りが正しいまま、入力のほうが化けている。 #127 の条件を緩めても直らない(緩めれば今度は本物の kill で記録を落とす)。直すべきは 4 である。
前提
pty.rs:191はpty.child.wait()の結果を終了コードとしてpty-exit-{id}に載せる。map から外れた(= kill された)セッションはこの経路を通らず、コード無しで着く。conhost.exeだけが残っていた。ConPTY 側が擬似コンソールのハンドルを保持し続けているために reader が EOF を見ず、wait()に到達していない、という筋が考えられる。これは推測であり、実機で切り分けていない。判断が要る点
docs/0-requirements.mdは bug(session): a session id recorded on spawn poisons every later resume when the CLI never created the conversation #127 の経路を「実機未確認」として記録している。実機で確認した結果、発火しないことが分かったため、記述を更新する必要がある。target files
src-tauri/src/pty.rssrc-tauri/src/session.rssrc/main.tsdocs/0-requirements.md関連