Skip to content

Fix brake-1 nested-agent stuck-panel issue via parent completion nudge#1523

Merged
liplus-lin-lay merged 2 commits into
mainfrom
1522-brake1-foreground-spawn
Jul 3, 2026
Merged

Fix brake-1 nested-agent stuck-panel issue via parent completion nudge#1523
liplus-lin-lay merged 2 commits into
mainfrom
1522-brake1-foreground-spawn

Conversation

@liplus-lin-lay

Copy link
Copy Markdown
Member

概要

skills/evolution-parallel-agent-eval/SKILL.md の Implementation Note 節に、brake-1 の N=3 並列評価spawn時、明示的に run_in_background: false(前景/同期実行)を指定する規範を追加。

背景

#1519#1521 の両方で brake-1 評価(N=3並列評価)実行後、評価エージェント3体が毎回 Desktop パネルに長時間「実行中」のまま張り付く現象が再現した(memory/reference_stuck_nested_subagent_panel_workaround.md、workspace-local、で調査済み)。

  • 各エージェントの transcript は stop_reason: end_turn で正常終了しており、判定内容も親に正しく使われている
  • spawnDepth: 2(孫エージェント、brake-1が既に委譲済みの実装subagent内で走るケース)でのみ発生し、depth 1 の親は正常完了扱いになる
  • 根本原因はホスト(Claude Code/Desktop)側のネストしたバックグラウンドエージェントの完了シグナル伝播不具合と推定されるが、当リポジトリの管轄外でパッチ不可

Agent ツールは明示指定しない限りデフォルトでバックグラウンド実行になる。しかし brake-1 の並列実行に背景実行を採用する必然性はなく、同一メッセージ内の複数 Agent 呼び出し(既存の "Parallel execution" 記述どおり)だけで並列性は確保できる。したがって発生条件そのものを避ける方向で対処した。

変更内容

skills/evolution-parallel-agent-eval/SKILL.md の Implementation Note 節のみに、上記背景 + run_in_background: false 明示指定の規範を追記。他の節・他ファイルには触れていない。

Closes #1522

Adds explicit background-execution-disabled guidance to the
Implementation Note of skills/evolution-parallel-agent-eval/SKILL.md,
alongside the existing model-floor explicitness requirement. Nested
brake-1 spawns (spawnDepth >= 2, when brake 1 runs inside an
already-delegated implementation subagent) running in background mode
have been observed twice (PR #1519, PR #1521) getting stuck showing
"running" indefinitely in the Desktop agent panel after actually
completing (verified via transcript stop_reason: end_turn). The
host-side completion-signal-propagation gap for nested background
agents is out of this repo's control, so this fix avoids the trigger
condition (foreground/synchronous spawn) rather than patching the host.

孫(depth 2)エージェントがDesktopパネルに「実行中」のまま張り付く既知症状の発生条件自体を、
brake-1のspawnを常にrun_in_background:falseで実行することにより回避する。

Closes #1522

@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.

AI self-review (semi_auto / patch)

  • スコープ確認: 変更は skills/evolution-parallel-agent-eval/SKILL.md の Implementation Note 節のみ。他の節・他ファイル・L1 Model Layer(rules/model/*)には無変更。issue #1522 の対象ファイル制約と一致。
  • 内容確認: 既存の model-floor 明示指定パラグラフと並ぶ形で、run_in_background: false 明示指定の規範を追加。背景説明(spawnDepth>=2 のネストspawnで観測された stuck-panel 症状、host側 completion-signal-propagation gap、発生条件回避というアプローチ)を簡潔に記載し、既存の "Parallel execution" 文と整合(前景並列でも並列性は損なわれない旨を明記)。
  • 文体確認: 既存ファイルの dense technical prose register に合わせた。push-surplus 的な文言("just in case" 等)は含まれていない。impression-literal detection axis 的に見ても、削除すると規範(明示指定の義務)が失われるため behavior literal として保護対象。
  • CI: governance check green (2 runs, both pass)。
  • リリース分類: patch(governance/skill文言追加、user/system observable impact なし)。

Brake 1 (N=3 parallel eval) はこの後 dogfooding 対象として run_in_background: false を明示指定して実行する。

@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.

Brake 1 (N=3 parallel eval) — verdict: consistent (3/3)

skills/evolution-parallel-agent-eval の brake 1 手続きに従い、N=3, M=all axes(behavior consistency / impression-literal detection(fixed axis) / maintainer readability・coverage gap), P=1 で並列評価を実行。

Dogfooding: 各評価者spawnは本PRで追加する規範を先取り適用し、model: opus に加えて run_in_background: false を明示指定(Claude CodeのAgentツール呼び出しパラメータとして)。3体とも同一メッセージ内での foreground/synchronous 並列呼び出し。

  • Evaluator 1: Axis A=consistent / Axis B=consistent(no impression literal)/ Axis C=consistent → OVERALL: consistent
  • Evaluator 2: Axis A=consistent / Axis B=consistent(no impression literal)/ Axis C=consistent → OVERALL: consistent
  • Evaluator 3: Axis A=consistent / Axis B=consistent(no impression literal)/ Axis C=consistent → OVERALL: consistent

3体とも全軸 consistent で一致。impression-literal axis で "costs nothing on the concurrency axis" 節を3体全員が精査対象として言及したが、いずれも「prohibition の cost-justification として load-bearing、除去すると revision-by-impression を招く」と判断し保護対象(non-flag)とした — aggregation rule(2/3以上一致でrefineが必要)には未達。Safer-side OR aggregation: DEVIATION なし。

Brake 1 pass。semi_auto + patch につき、この後 direct merge に進む。

…eground-only

The prior commit on this branch disabled background execution
(run_in_background: false) for brake-1 evaluator spawns to route around
grandchild agents getting stuck showing "running" in the host panel after
completing. Master corrected the approach: background execution was never
the thing to remove, since the concurrency/non-blocking benefit is
intentional, not incidental.

指示の意図を取り違えていた。バックグラウンド実行は維持したまま、
評価エージェントを実際に呼び出す親エージェント自身が、各子の完了直後に
完了確認のフォローアップを送ってから次に進むよう明記する形に訂正した。

Issue #1522
@liplus-lin-lay liplus-lin-lay changed the title Pin brake-1 parallel-agent-eval spawns to run_in_background:false Fix brake-1 nested-agent stuck-panel issue via parent completion nudge Jul 3, 2026

@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.

AI self-review (semi_auto / patch) — correction commit 3684bf2

前コミット(4d2545d, run_in_background: false foreground強制)は方向誤り。Master訂正を受け、3684bf2 で以下に置換。

  • スコープ確認: 変更は skills/evolution-parallel-agent-eval/SKILL.md Implementation Note 節の1段落のみ(1 insertion, 1 deletion)。他ファイル・L1 Model Layer(rules/model/*)には無変更。issue #1522 改訂後の対象ファイル制約と一致。
  • 内容確認: background実行の無効化を撤回し、「background実行は host default のまま維持(並列性・非ブロッキング性は意図的、偶発的でない)」を明記。代わりに、評価エージェントを実際に呼び出す親エージェント自身が、各評価者の完了報告直後にその評価者へ完了確認フォローアップ(SendMessage等)を送ってから次の評価者に進む、という規範に置換。バッチ化せず per-evaluator immediate に行うことも明記。
  • 旧コミットの誤り根拠(「foreground/synchronous 並列呼び出しでも並列性は損なわれない」)は事実誤認だった — Agent tool の並列呼び出しは同一メッセージ内の複数 tool call であり、background flag とは独立軸。訂正版はこの誤認を含まない。
  • 文体確認: 既存 dense technical prose register を維持。push-surplus的文言なし。impression-literal detection axis的に見ても、"do not disable background execution" は具体的な禁止規範(behavior literal)であり除去不可。
  • CI: governance check green (latest commit 3684bf2 でも re-verify 済み、SUCCESS)。
  • リリース分類: patch(governance/skill文言の訂正、user/system observable impact なし)。旧コミットの self-review コメントは誤方向の内容を評価したものであり本コミットには適用されないため、本コメントで上書きする。

Brake 1 (N=3 parallel eval) はこの後、訂正後の規範(background維持 + per-evaluator immediate nudge)を dogfooding 適用して実行する。

@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.

Brake 1 (N=3 parallel eval) — verdict for correction commit 3684bf2

skills/evolution-parallel-agent-eval brake 1 procedure。N=3, M=all axes (behavior consistency / impression-literal detection(fixed axis) / maintainer readability・coverage gap), P=1、対象は本PRの最新差分(3684bf2)。

Dogfooding: 本PRが訂正する規範そのものを生きた形で先取り適用した — 3体の評価者は background 実行(host default, run_in_background維持)のまま並列 spawn し、各評価者が verdict を報告した直後に、次へ進む前にその評価者へ完了確認フォローアップ(SendMessage)を個別に即時送信した(バッチ化せず)。

  • Evaluator 1: Axis A=consistent / Axis B=1候補検出したが explanatory rationale として protected(non-flag) / Axis C=partial(親がbackground spawnの完了をどう検知するかが未記載という gap) → OVERALL: consistent
  • Evaluator 2: Axis A=consistent / Axis B=no impression-literal / Axis C=partial(同様の gap) → OVERALL: partial
  • Evaluator 3: Axis A=consistent / Axis B=no impression-literal / Axis C=partial(同様の gap) → OVERALL: consistent

Aggregation (safer-side OR): 3体とも Axis A は consistent で一致。Axis B は impression-literal detection の refine 閾値(2/3以上一致)に未達(1体が protected 判断で候補提示、2体は candidate なし)。Axis C は3体とも同一の gap を独立検出——「親エージェント自身も background spawn の場合、evaluator の完了を『即座に』検知できる保証がこの段落だけでは明示されていない」——が、いずれも negative ではなく partial 止まりで、safer-side OR 判定でも DEVIATION には至らない。3/3 が同一 gap を独立検出した点は post-merge observation 対象として記録に値する。

Brake 1 pass (DEVIATION なし)。Axis C の gap は post-merge 短期観察 (memory/self-evolution-observation.md) に回し、merge をブロックしない。semi_auto + patch につきこの後 direct merge に進む。

Dogfooding所感: per-evaluator immediate nudge パターンは実行上、摩擦なく回った。各評価者の完了通知が来るたびにその場でSendMessageを1回送るだけで、次の評価者を待つ間の待機と自然に組み合わさった(通知駆動なので "immediate" の意味も自然と満たされた)。ただし2/3の評価者は「宛先(agentId)を持たないため確認への返信ができない」と報告した——nudgeは届いたが、評価者側からの明示的な"confirmed"応答は返せない非対称構造だった。それでも host パネル上の停止状態解消という当初の目的(孫エージェントの stuck "running" 表示解消)には親→子の一方向送信で十分と判断する。

@liplus-lin-lay liplus-lin-lay merged commit b91e1b6 into main Jul 3, 2026
2 checks passed
@liplus-lin-lay liplus-lin-lay deleted the 1522-brake1-foreground-spawn branch July 3, 2026 16:07
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.

Pin brake-1 parallel-agent-eval spawns to run_in_background:false to avoid stuck grandchild-agent panel entries

1 participant