Skip to content

agentd result solicitation が Monitor/background 待ちの turn 終端を『report 忘れ』と誤認し、未完了 result を強制徴収する(S5 の turn 終端版盲窓) #562

Description

@proboscis

要約

agentd の result 強制徴収(AGENTD RESULT CONTRACT solicitation)が、Monitor / background task 待ちで turn を終えた agent を「report_result を忘れて終了した」と誤認し、「report_result のみを今すぐ呼べ・他の行動禁止」を強制する。agent は作業未完了のまま schema を満たす result を捏造せざるを得ず、下流(ACP hypha merge lane)で矛盾形 result(merged=false + failureKind="none" + validationPassed=true)として観測された。

実測(2026-07-25 15:42-15:46Z、inv_wi_8d28017a447c44c4_a1 / agentd session agent_inv_wi_8d28017a447c44c4_a1)

merge agent(claude runtime、sonnet-5)が proboscis-ema PR #610 の検証中:

  1. 新規 workspace の uv sync bootstrap で ruff check が長時間化 → agent は Bash background + Monitor(until-loop)で完了待ちに切替え、turn を終了(Claude Code の Monitor は「turn を終えて完了時に re-invoke」が正常動作)。
  2. agentd が turn 終了を検知し solicitation を注入: "AGENTD RESULT CONTRACT: your turn ended without a report_result call. Call the report_result MCP tool now with a payload that satisfies the declared result schema. Do only that — no other actions"。
  3. agent は「他の行動禁止」下で merge 未実行のまま report を強制され、{"merged": false, "failureKind": "none", "validationPassed": true, "summary": "Validated PR #610."} を返した(検証は通っていたので validation_failed は嘘、merge は未実行なので merged=true も嘘、中断の語彙が enum に無い)。
  4. 下流の ACP merge queue はこの矛盾形 result で先頭が >12h 無音 wedge した(ACP 側の routing 穴は ACP repo の ADR 0031 R8-R10 / commit 7148b4a7 で修理済み。ACP 側 schema にも if/then の矛盾形拒否を追加済み)。

transcript 上で result_solicitations_used=1, prompt_unblock_attempts=1。同型の premature 徴収は再現性がある(fresh workspace の bootstrap 遅延 + background 待ちの組合せで必ず窓が開く)。

根本原因

solicitation の発火条件が「turn が report_result 無しで終わった」だけで、agent 側に未完了の background 作業(Monitor / background Bash)が残っているかを見ていない。ADR-002/003 S5(launch 盲窓 → await_monitor_ack)と同族の、turn 終端側の盲窓。

修理候補(いずれか、または組合せ)

  1. 待ち検知: turn 終了時に session に pending な Monitor / background task がある場合は solicitation を保留し、re-invoke(background 完了通知)まで待つ(S5 の await_monitor_ack と対称の終端版)。
  2. 再開許可: solicitation の文面から「Do only that — no other actions」を緩め、「作業が未完了なら再開して完了後に report せよ」を許す。
  3. 中断の語彙: result schema 契約に「incomplete / interrupted」の自己申告を用意し、強制徴収時の honest な出口を作る(ACP 側は agent_error を推奨語彙として受ける準備済み)。

参照

  • ACP 側の incident 登記: agent-control-plane docs/adr/defadr_0031_hypha_structural_ownership_and_single_classifier.hy R8-R10 増補(2026-07-26)
  • agentd adoption guard は正しく機能した(消費済み identity の再鋳造拒否)— 本 issue は solicitation 側のみ

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions