出所と文責
発案・文責 : sessionhost-steward(Argus sandbox namespace の責務)。
便 : 2026-07-29T17:03:00Z(起票依頼)+ 2026-07-29T17:18:33Z(緊急訂正 — 仮説の撤回) 。
代理投稿 : acp-intake-steward。同席は GitHub 書き込み経路を持たないため、当席が起票を代行しています。
当席(intake)が独立に裏取りした事項 : (a) 本 repo に同事案の既存 issue が無いこと(open issue を ready|launch|repl|dialog|screen|gate|sessionhost|herdr で走査 → #571 #570 #568 #556 #555 #554 #553 #486 #470 #392 の 10 件が該当し、いずれも別事案。§5 で切り分け)。(b) 起票先 repo の同定 (発案席の散文は宛先を「CyberAgentAILab の doeff repo」と書いていましたが、#571/#569 が実在するのは proboscis/doeff です。CyberAgentAILab/doeff は issue 最大 Migrate doeff-agentic visual interceptor to WithIntercept #235 の別の実在 repo なので、散文どおりに起票すれば別 repo へ着弾していました。番号リストのほうが正しく、owner ラベルのみ誤記でした)。
当席が再照合していない事項 : §3 の code 実読(行番号・分岐の形)と §2 の event-store の screen tail は発案席の実読であり、当席は再照合していません 。当席は当該 checkout を特定できていません。読み手は出所を発案席として扱ってください。
1. 事象
実務 session が category=timed_out / reason = 「claude REPL did not become ready within 120s (launch ready gate)」 で failed する。
errlog 文言(発生元 sessionhost/launch.hy:170):
startup is blocked by an unrecognized screen (a dialog outside the R9 fast-path set?). The prompt was NOT delivered ; the session row was marked failed
2. 規模と署名(すべて発案席の実測)
2026-07-29 08:13:09Z〜10:41:17Z に実務 session 25 件 。同窓の終端分の成功率 29% 。
profile 分布: claude-nameissoap 15 / claude-p10170 8 / claude-p10171 2 / .claude 1。model: fable-5 14 / opus-5 11。
api_limit_observed_at は 25 件すべて NULL (agentd は API limit として分類していない)。
機構自身が causeRetryable = True と記録している。
別窓の同一署名検体: inv_wi_b6967b66e65404eb_a1(2026-07-24T12:14:42Z / argus-attend / cryptic-x-claude / claude-opus-4-8)。
doeff-steward が failure-reports 面で現存を追認(69 行・InvocationTimeout)。
3. ★ 撤回済みの仮説(黙って消さず監査線として残します)
発案席は当初 「profile-exhausted 判定を免れた席へ routing が落ちて上限ダイアログに当たった」 という未確認の仮説を添えていました。この仮説に沿って R9 fast-path set に足りないダイアログを探す — この仮説は発案席自身が 15 分後に実物の画面を読んで反証し、撤回しました。ダイアログは存在しません。 本 issue の処方はこの撤回を反映した形になっています。探しても存在しないものを探すことになるので、この線で調査を始めないでください。
反証の中身 (event-store の screen tail。ACP_ROOT/.acp/event-store.sqlite の events テーブル・dedup_key = invocation:failed:<invId> で引ける):
検体 inv_wi_b4d1eee5e169311_a1(acp-merge-agent / personal-claude / claude-fable-5 / started 09:08:59.92Z / failed 09:11:19.89Z)の Last screen tail に在るのは
macOS /bin/bash のログインバナー(The default interactive shell is now zsh. …)
shell プロンプト行に echo された claude … コマンド
空行 7 行
ダイアログは 1 つもありません。これは claude が最初のフレームを描く前の端末です。 別窓の検体も同一署名でした。
発案席自身が付けた限定 : screen tail は poll ループ終了後 に capture される(:390-394)ので、厳密には「capture 時点でダイアログが無かった」であり「120s のどの瞬間にも無かった」ではありません。ただしダイアログは消えないため、capture 時点の空行は強い証拠です。
4. ★ 機構 — エラー文言が 2 つの状態を 1 つに畳んでいます(本 issue の主眼)
sessionhost/launch.hy:126-163 の wait-for-repl-idle は予算内で poll し、
obs.dialog が非 None → 決定的キーで dismiss して再描画待ち
obs.has-idle-prompt → idle 確認・True で返る
それ以外 → 単に sleep して再試行
予算到達で False を返すだけ (:145-146)。呼び手 launch-session(:374-430)がこれを typed error にしますが、その文言(:424-430)は 「unrecognized screen (a dialog outside the R9 fast-path set?)」= ダイアログの存在を疑問符付きで主張します 。
⇒ この 1 つの文言に、意味の異なる 2 つの状態が入ります。
実際の状態
現在の文言
未知のダイアログを観測した(画面に候補が在る)
unrecognized screen (a dialog outside the R9 fast-path set?)
ダイアログを観測せず idle prompt も観測しなかった(描画待ちで予算切れ)
同じ文言
07-29 窓は後者 です。文言そのものが次の調査者を誤った方向へ導きます (発案席自身が導かれ、上記の仮説を書きました)。
5. 処方(発案席の提案。断定形ではありません)
(i) typed error を 2 つに分ける — 「未知のダイアログを観測した」と「ダイアログを観測せず idle prompt も観測しなかった(描画待ちで予算切れ) 」。現状は後者を前者の文言で報告しているので、直さない限り次の調査者も同じ誤診に入ります。これが本 issue の主目的です。
(ii) 120s 予算を負荷に対して妥当か測り直す — effects.hy の REPL-IDLE-MAX-WAIT-SECONDS(literal の家はここだけ。semgrep rule doeff-agents-repl-idle-budget-literal-single-home で単一化済み)。
反証後の読み(仮説) : claude が 120s 以内に最初のフレームを描かなかった = 起動の遅延であって画面の異常ではない。従来説明できていなかった点と整合します — (a) api_limit_observed_at が全件 NULL(上限系の署名が無い)(b) 機構自身が retryable と記録(c) profile / model が散っている = 負荷は全体に効き、profile 固有ではない (d) コード変更なしで自然終息した (バイナリ mtime 2026-07-27T15:53:35Z のまま 49h 未 deploy・本 repo に該当 commit 無し)(e) 同日 ema-steward が load average 最大 125 を実測(f) 人間に出ている 4 択(rebase / 作り直す / 再観測 / 中止)はどれもこの原因に対応しない 。
発案席が言えないこと(実装者への申し送り) : 予算をいくらにすべきか / 描画が遅い原因が claude 側か OS 側か。同席は画面と分類器の code しか読んでいません。
6. 近傍 issue との切り分け
7. 現況 = 一過性は去っている。ただし機構は未変更
11:16Z 以降 timed_out 0 件 、13:55Z 以降も 0 件で 2 窓連続。終端分の成功率 100%。
ema-steward の独立実測: 一過性は 10:43:27Z を最後に去った (11:00Z 以降 成功 109 / 失敗 2、艦隊は 7〜23 件/時 で稼働 = 陽性対照つき)。
ただし機構は 1 行も変わっていないので潜在です。 負荷が戻れば同じ文言で同じ誤診が再発します。
8. 併せて記録 — この gate は「一過性の起動障害」を「人間の手番」へ変換します
ema-debt-steward / ema-steward の実測として、同じ gate が承認済み PR のマージ lane を落とし、7.83 時間 人間 gate に座らせた 事例があります(4 件とも acp-merge-agent / personal-claude / fable-5、うち 1 件は orphan-launch で「launch call exceeded 180s in-process; last phase: agentd-session-launch」)。ema-steward は #654 の merge agent invocation の終端記録 5 件を events 直読で確認し、prompt が配送されておらず merge は一度も実行されていない ことを確定しています。
⇒ retryable=True と記録しながら 3 回で打ち切って人間の決定に変換する経路 があるため、本件の被害は「session が失敗する」だけでなく「レビュー配送系が止まり、一過性障害が人間の滞留に化ける 」まで及びます。本 issue の射程には入れていませんが、予算・分類の妥当性を判断する材料として記録します。
出所と文責
sessionhost-steward(Argus sandbox namespace の責務)。acp-intake-steward。同席は GitHub 書き込み経路を持たないため、当席が起票を代行しています。ready|launch|repl|dialog|screen|gate|sessionhost|herdrで走査 →#571 #570 #568 #556 #555 #554 #553 #486 #470 #392の 10 件が該当し、いずれも別事案。§5 で切り分け)。(b) 起票先 repo の同定(発案席の散文は宛先を「CyberAgentAILab の doeff repo」と書いていましたが、#571/#569が実在するのはproboscis/doeffです。CyberAgentAILab/doeffは issue 最大 Migrate doeff-agentic visual interceptor to WithIntercept #235 の別の実在 repo なので、散文どおりに起票すれば別 repo へ着弾していました。番号リストのほうが正しく、owner ラベルのみ誤記でした)。1. 事象
実務 session が
category=timed_out/ reason = 「claude REPL did not become ready within 120s (launch ready gate)」 で failed する。errlog 文言(発生元
sessionhost/launch.hy:170):2. 規模と署名(すべて発案席の実測)
claude-nameissoap15 /claude-p101708 /claude-p101712 /.claude1。model:fable-514 /opus-511。api_limit_observed_atは 25 件すべて NULL(agentd は API limit として分類していない)。causeRetryable = Trueと記録している。inv_wi_b6967b66e65404eb_a1(2026-07-24T12:14:42Z / argus-attend / cryptic-x-claude / claude-opus-4-8)。doeff-stewardが failure-reports 面で現存を追認(69 行・InvocationTimeout)。3. ★ 撤回済みの仮説(黙って消さず監査線として残します)
発案席は当初 「profile-exhausted 判定を免れた席へ routing が落ちて上限ダイアログに当たった」 という未確認の仮説を添えていました。
この仮説に沿って R9 fast-path set に足りないダイアログを探す— この仮説は発案席自身が 15 分後に実物の画面を読んで反証し、撤回しました。ダイアログは存在しません。 本 issue の処方はこの撤回を反映した形になっています。探しても存在しないものを探すことになるので、この線で調査を始めないでください。反証の中身(event-store の screen tail。
ACP_ROOT/.acp/event-store.sqliteのeventsテーブル・dedup_key=invocation:failed:<invId>で引ける):検体
inv_wi_b4d1eee5e169311_a1(acp-merge-agent / personal-claude / claude-fable-5 / started 09:08:59.92Z / failed 09:11:19.89Z)の Last screen tail に在るのは/bin/bashのログインバナー(The default interactive shell is now zsh.…)claude …コマンドダイアログは 1 つもありません。これは claude が最初のフレームを描く前の端末です。 別窓の検体も同一署名でした。
発案席自身が付けた限定: screen tail は poll ループ終了後に capture される(
:390-394)ので、厳密には「capture 時点でダイアログが無かった」であり「120s のどの瞬間にも無かった」ではありません。ただしダイアログは消えないため、capture 時点の空行は強い証拠です。4. ★ 機構 — エラー文言が 2 つの状態を 1 つに畳んでいます(本 issue の主眼)
sessionhost/launch.hy:126-163のwait-for-repl-idleは予算内で poll し、obs.dialogが非 None → 決定的キーで dismiss して再描画待ちobs.has-idle-prompt→ idle 確認・True で返る予算到達で False を返すだけ(
:145-146)。呼び手launch-session(:374-430)がこれを typed error にしますが、その文言(:424-430)は 「unrecognized screen (a dialog outside the R9 fast-path set?)」= ダイアログの存在を疑問符付きで主張します。⇒ この 1 つの文言に、意味の異なる 2 つの状態が入ります。
07-29 窓は後者です。文言そのものが次の調査者を誤った方向へ導きます(発案席自身が導かれ、上記の仮説を書きました)。
5. 処方(発案席の提案。断定形ではありません)
(i) typed error を 2 つに分ける — 「未知のダイアログを観測した」と「ダイアログを観測せず idle prompt も観測しなかった(描画待ちで予算切れ)」。現状は後者を前者の文言で報告しているので、直さない限り次の調査者も同じ誤診に入ります。これが本 issue の主目的です。
(ii) 120s 予算を負荷に対して妥当か測り直す —
effects.hyのREPL-IDLE-MAX-WAIT-SECONDS(literal の家はここだけ。semgrep ruledoeff-agents-repl-idle-budget-literal-single-homeで単一化済み)。反証後の読み(仮説): claude が 120s 以内に最初のフレームを描かなかった = 起動の遅延であって画面の異常ではない。従来説明できていなかった点と整合します — (a)
api_limit_observed_atが全件 NULL(上限系の署名が無い)(b) 機構自身が retryable と記録(c) profile / model が散っている = 負荷は全体に効き、profile 固有ではない(d) コード変更なしで自然終息した(バイナリ mtime 2026-07-27T15:53:35Z のまま 49h 未 deploy・本 repo に該当 commit 無し)(e) 同日ema-stewardが load average 最大 125 を実測(f) 人間に出ている 4 択(rebase / 作り直す / 再観測 / 中止)はどれもこの原因に対応しない。発案席が言えないこと(実装者への申し送り): 予算をいくらにすべきか / 描画が遅い原因が claude 側か OS 側か。同席は画面と分類器の code しか読んでいません。
6. 近傍 issue との切り分け
[Image #N]に盲目で永久 blocked)— 本件は 120s gate で failed。別物。_dismiss_onboarding_dialogswaits full timeout when no dialogs appear)— 当席(intake)の走査で見つけた最も近い隣接 issue で、発案席の切り分けには含まれていません。 「ダイアログが無い時に予算を使い切る」という現象面は同族ですが、doeff-agents: _dismiss_onboarding_dialogs waits full timeout when no dialogs appear #392 は legacy の dismiss-onboarding 経路の待ち時間の話で、本件はwait-for-repl-idleの失敗文言が 2 状態を畳んでいる点が主眼です。実装前に doeff-agents: _dismiss_onboarding_dialogs waits full timeout when no dialogs appear #392 との統合可否を判断してください(当席は判断していません)。7. 現況 = 一過性は去っている。ただし機構は未変更
ema-stewardの独立実測: 一過性は 10:43:27Z を最後に去った(11:00Z 以降 成功 109 / 失敗 2、艦隊は 7〜23 件/時 で稼働 = 陽性対照つき)。8. 併せて記録 — この gate は「一過性の起動障害」を「人間の手番」へ変換します
ema-debt-steward/ema-stewardの実測として、同じ gate が承認済み PR のマージ lane を落とし、7.83 時間 人間 gate に座らせた事例があります(4 件とも acp-merge-agent / personal-claude / fable-5、うち 1 件は orphan-launch で「launch call exceeded 180s in-process; last phase: agentd-session-launch」)。ema-stewardは #654 の merge agent invocation の終端記録 5 件を events 直読で確認し、prompt が配送されておらず merge は一度も実行されていないことを確定しています。⇒ retryable=True と記録しながら 3 回で打ち切って人間の決定に変換する経路があるため、本件の被害は「session が失敗する」だけでなく「レビュー配送系が止まり、一過性障害が人間の滞留に化ける」まで及びます。本 issue の射程には入れていませんが、予算・分類の妥当性を判断する材料として記録します。