## 何が起きたか(cruise #474 `--absent`・dev-loop 1.59.0・2026-10-27〜28) `/dev-loop:cruise 474 --absent` を 30 分おきの再開タイマー(`CronCreate`、プロンプトは `/dev-loop:cruise 474 --absent`)つきで回した。親セッションは `3505f9a0-…`(トランスクリプトは `~/.claude/projects/-Users-hdknr-Projects-hdknr-claude-code-setup--claude-worktrees-issue-465/`)。 | 時刻(UTC) | 出来事 | | --- | --- | | 09:10 | 親が `EnterWorktree(path=…/issue-440)` で 1 周目に入る | | 10:32 / 11:20 / 11:53 | `EnterWorktree(path=…/issue-375)`・`issue-376`・`issue-465` と、**前の周の worktree から次の周の worktree へ直接入る**(`ExitWorktree` は 1 度も呼んでいない) | | 12:22 | 4 周目(#465 → PR #483)を終えた時点で**親の文脈が 75%** に達し、「新しい周は始めない」と判断して止まる。台帳の「着手できる」には **#476 が残っていた** | | 12:23〜23:53 | タイマーが **23 回**発火。どの回も「文脈が残り少ないので #476 は始めない」として PR 4 本の状態を見るだけで終わる(**約 11.5 時間、周が 0 本**) | | 翌 08:56 | 利用者が `/clear` → `/dev-loop:cruise 474 --absent`。**セッションは `issue-465` の worktree に隔離されたまま**で、ガードが `git` に当たる操作を `issue-465` の外に向けると拒む。#476 の worktree を作れず、メインの作業ツリーから起動し直すよう案内して止まる | この間、PR は 4 本とも CI が緑のまま開いており、残りの 5 本は #440 のマージ待ちだった(不在の線「マージ」が効かないため。#476)。 ## 原因 1. **文脈で止まったあと、タイマーが空回りし続けた。** タイマーは同じセッションにプロンプトを注入するだけで `/clear` できない(#461 の指摘と同じ)。そのため一度「文脈が足りない」と判断すると、**以後の発火はすべて同じ判断で終わる**。止まったこと自体も通知されず、利用者は朝まで気づけなかった。 2. **`/clear` しても、親は最後の周の worktree に閉じ込められたまま。** 親が各周で `EnterWorktree(path=…)` を呼ぶため、`/clear` 後もセッションの隔離先は最後に入った worktree のままになる。#466 は「起動時に worktree の中なら点検が言う」までで、**親が周を回した結果として worktree に残る形**は扱っていない(main の cruise `SKILL.md` は「周ごとの作業はこれまでどおり各周の worktree で行う(dev-loop の手順 4)」のまま)。dev-loop `references/resume.md` は、`path` で入った worktree に `ExitWorktree` が効くかを「測っていない」としている。 3. (背景)手元の版は 1.59.0 で、#466(1.60.0)が入っていなかった。起動時の点検 `--cruise` も無い。 ## 案 - **A. 文脈の閾値で止まると判断したら、タイマーを止めて通知する。** 同じ判断を繰り返すだけの発火を残さない(`CronDelete`)。止まったことと、利用者に要る操作(`/clear` してメインの作業ツリーから起動し直す)を `PushNotification` で知らせ、台帳の `note` にも残す。 - **B. 親を周の worktree に入れない。** 各周の実装・関門は、worktree を cwd にしたサブエージェント(`isolation: "worktree"`、または既存の worktree を絶対パスで渡す)に任せ、親はメインの作業ツリーに留まって台帳だけを持つ。こうすれば #461 の「親を割らずに軽く保つ」案とも合う。 - **C. B を採らないなら、周を閉じたら `ExitWorktree(action: "keep")` で起動ディレクトリに戻る。** まず `path` で入った worktree から戻れるか、戻った後に次の worktree へ入れるかを測る(resume.md が「測っていない」としている点)。 - **D. 再開時の点検で「親が worktree の中にいる」を名指しする。** `ledger.py show` か `check-unattended-env.py --cruise` が、起動時だけでなく台帳から再開したときにも言う。 ## 決めること - B と C のどちらにするか(B は dev-loop 手順 4 の入場の規範に効く) - A の閾値(「文脈 N%」)を誰が決め、どこに書くか 関連: #461(タイマーでは `/clear` できない)・#466(親はメインの作業ツリーから起動)・#472(再開タイマーを起動時に訊く)・#476(不在のマージ)・#474(この cruise)
Activity