proboscis / proboscis/doeff

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

Open
#562 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
2
Forks
0
Avg merge
5h 6m
Merged PRs (30d)
1

Description

要約

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 側のみ

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the agentd result-solicitation trigger and its session state for pending Monitor or background tasks, then compare it with ADR-002/003 S5 and the reported reproduction. Done means a turn waiting on unfinished background work is not forced to report prematurely, with coverage for the bootstrap-delay scenario and an honest interruption path if that is selected.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
ai-infra-agents, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.