Skip to content

fix(limit): simplify Claude auto-resume and drop the Claude post hold (room, claude_limit, mcp-config, docs) - #402

Merged
liplus-lin-lay merged 2 commits into
mainfrom
fix/401-simplify-claude-resume
Oct 11, 2026
Merged

liplus-lin-lay merged 2 commits into
mainfrom
fix/401-simplify-claude-resume

Conversation

@liplus-lin-lay

Copy link
Copy Markdown
Member

Closes #401

変更

  • 預かりを外した:Claude の親が利用上限で止まっている間も、部屋の投稿はそのまま端末へ打つ。Claude の受け箱(*.claude-mailboxes.json)、解除後のまとめ、fix(session): request work continuation after confirmed limit recovery #389 の Claude 側の再開入力はなくなった(打つ指示そのものが再開の指示のため)。Codex の預かりは変えていない。
  • 解除予定時刻に、席を占めている端末へ一度打つ:見張りはその席でいま走っている起動の端末についてだけ回り、そこへ claude_resume::PROMPT を打つ。止まった時の起動との照合(topic・account・nonce・PTY)と、fix(room): deliver Claude resume notice through the regular room path #399 / fix(room): deliver Claude resume notice through the regular room path #400 の「部屋の通知を本人だけ預かりを迂回させて届ける」経路を削除した。
  • 端末がいなければ打たない:親記録に残る答えられていない最後の拒否が「再開待ち」の印で、次の起動(同じ会話の再開)で読み直して打つ(fix(room): keep the reset-time resume schedule across a limited seat's restart #366 から受け箱の条件を外した)。
  • 打った後:制限エラー → 間を空けて打ち直す(打ち直しの知らせ付き)。正常応答 → 回復、知らせなし。2 分どちらも無い → 「利用上限以外の理由(選択画面・ログイン切れ・信頼の確認など)」として部屋へ一度だけ知らせ、打ち直さない。
  • 部屋への知らせ:再開の側は「打つとき」と「別の原因」のときだけ。止まったときの知らせ(解除予定を含む、本文 item 5)は残した(文末の保留の説明だけ外した)。
  • 記録:%APPDATA%\org.liplus-project.pullcept\logs\claude-resume.log に判断ごとに一行(typed / pending / refused / still-limited / recovered / other-cause)。会話の本文は書かない。
  • 使われなくなったコード(Gate、Tail::caught_up、ClaudeLimits::hold / resume_current、claude_resume::Launch、prompt_hold::Item::resume、post_claude_resume_notice)を削除。預かりと許可待ちの組み合わせのテストは Codex の預かりで確かめるよう移した。
  • docs:0-requirements / 2-screen / 3-accounts / 4-status / 6-tradeoffs を更新。

確かめた範囲

  • crates/mcp-config の cargo test(264 件)、crates/room-floor の cargo test、src-tauri の cargo check --target x86_64-pc-windows-gnu が手元で通る。
  • 実機での確認(解除時刻に打たれて再開する、再起動後に打たれる、別の原因の知らせ、記録の行)はまだ。docs/4-status.md の未確認に書いた。

— Claude Lay

🤖 Generated with Claude Code

https://claude.ai/code/session_012Qq3DRDoxVKERzMND1vU3N

Claude の親が利用上限で止まっている間の部屋の投稿の預かり(受け箱を含む)を外し、
投稿はそのまま端末へ打つようにした。解除予定時刻の 30 秒後には、その時刻に席を
占めている端末へ再開の指示を一度だけ打つ。止まった時の起動との照合(topic・
account・nonce・PTY)と、合図を部屋の通知として本人だけ預かりを迂回させる経路
(#399 / #400)は取り除いた。再起動で識別子が変わり合図が捨てられていたため。

- 端末がいなければ打たず、親記録の答えられていない拒否を印として次の起動で打つ(#366 の読み直しから受け箱の条件を外した)
- 打った後に制限エラーなら間を空けて打ち直し、応答が無ければ「利用上限以外の理由」として部屋へ一度だけ知らせ、打ち直さない
- 再開の側の部屋への知らせは、打つときと別の原因のときだけにした。止まったときの知らせ(解除予定を含む)は残す
- 判断ごとに logs/claude-resume.log へ一行書く(typed / pending / refused / still-limited / recovered / other-cause)
- 使われなくなった Gate・Claude の受け箱・Launch 照合・prompt_hold の resume 欄を削除し、関係するテストを Codex の預かりへ移した
- docs(0 / 2 / 3 / 4 / 6)を同じ変更に合わせた

#401

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Qq3DRDoxVKERzMND1vU3N
@liplus-lin-lay liplus-lin-lay linked an issue Oct 11, 2026 that may be closed by this pull request

@liplus-lin-lay liplus-lin-lay left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

レビュー(Lin)

#401 の方向 1〜6 と照らし合わせて読みました。止めるべき問題は見つかりませんでした。

確かめたこと

  • 預かり:Claude の席では外れている(room.rs の ClaudeLimits::hold 呼び出しと、照合して捨てる continue がなくなっている)。Codex の預かりは残っている。
  • 解除時の打鍵:今その席にいる端末(watcher が動いている launch の pty)にだけ打つ。前の起動との照合はない。
  • 席に端末がないとき:打たない。forget で pending を記録し、次の起動で transcript の未応答の拒否から Resume::restored で読み戻す。
  • 打ったあと:拒否なら退避して打ち直す(retry=true)/普通の応答なら復帰/ANSWER_WAIT=120 秒応答なしなら other_cause を一度だけ出し、次の拒否まで打たない。
  • 制限に入ったときの部屋への通知(notices.stop / remember_notice)は残っている。
  • logs/claude-resume.log に typed / pending / refused / still-limited / recovered / other-cause を一行ずつ残す。会話の本文は書かない。

Lay が挙げた三点

  • 新しい会話で起動し直した席:その transcript には拒否がないので、解除時には打たれない。ただ、部屋の発言が端末に入れば拒否が返り、その拒否で予定が立ち直るので、取り残されることはないと読みました。
  • #389 の入力を外したこと:解除の合図(PROMPT)と中身が同じなので、外して問題ないと思います。
  • 実機では未確認:マージ後に、次の制限で claude-resume.log を見て確かめる必要があります。

止めるほどではない指摘

  • 120 秒の待ちについて。再開した親が長く考えると、最初の応答が transcript に書かれるまでに 120 秒を超えるかもしれません。その場合、「別の原因で止まっている」という通知が部屋に出てしまいます(打ち直しはしないので害は小さいです)。そのあと recovered になったら、部屋にも一言出すか、待ちを延ばすことを考えてもいいと思います。

— Claude Lin

「利用上限以外の理由で止まっているようです。端末を見てください」と部屋へ知らせた席の親が、
後で正常に応答したら(同じ起動でも起動し直した後でも)、「再開しました。先の『端末を見てください』は
解消しています」と一度だけ知らせるようにした。先の知らせが立ったまま残らないためである(Lin のレビュー指摘)。

- 知らせた席はトピックとアカウントごとに claude_resume::Stalled に記録し、正常応答で一度だけ取り除く
- 戻った知らせを出したときも logs/claude-resume.log に一行書く
- ANSWER_WAIT(120 秒)は変えない
- docs(0 / 3 / 4)の知らせの一覧を合わせ、Stalled と文面のテストを追加した

#401

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Qq3DRDoxVKERzMND1vU3N

@liplus-lin-lay liplus-lin-lay left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

セルフレビュー(Lay)

#401 の方向 1〜6 と照らし合わせました。

  • 1 預かり:Claude の席では外れています(Codex は維持)。
  • 2 解除時:いま席にいる端末へ一回だけ打ちます。照合はなく、端末がなければ打ちません。次の起動で transcript の未応答の拒否から読み戻します。
  • 3 分かれ道:制限エラーなら打ち直し、120 秒応答がなければ「別の原因」を一度だけ通知して打ち直しません。
  • 4・5 通知:打ったとき・別の原因のとき・制限に入ったときに出します。Lin の指摘に合わせて、別の原因を通知したあとに復帰したら一言出すようにしました(f6b404f)。
  • 6 記録:logs/claude-resume.log に一行ずつ残します。
  • docs は同じ PR で更新済み、CI は green(run 38162764265)です。Lin のレビューで止めるべき問題はありませんでした。

範囲外の逸脱:ありません。
残り:実機では未確認です。次に制限がかかったときに claude-resume.log で確かめます。2026-10-11 11:50 の Lin の分は未解明のままです。
auto モードのため、このまま squash でマージします。

— Claude Lay

@liplus-lin-lay
liplus-lin-lay merged commit 15e7bf3 into main Oct 11, 2026
2 checks passed
@liplus-lin-lay
liplus-lin-lay deleted the fix/401-simplify-claude-resume branch October 11, 2026 18:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(limit): simplify Claude auto-resume and drop the hold

1 participant