sweep discards a validating result.json unread on any non-completed status; zero-hook-event runs pass run/sweep untouched
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
sweep.py のトリアージと移行の処理から始め、次に SessionResult.stop_seen、validate_triage、validate_migration、cmd_validate パスを調べます。検証用の result.json を伴う未完了セッションと、イベント数がゼロの実行を再現またはテストし、欠落している hook の接続が表面化または一時停止される一方で、結果が誤って原因と見なされないことを確認します。
索引モデルが issue の本文から書いたものです。
説明
Observed (0.10.0)
In sweep.py's triage handling:
if result.status != "completed":
plan, errors = None, [session_failure_reason("triage", result)]
else:
plan, errors = validate_triage(result.result_json, open_now)
When the session status is anything but completed, result.result_json is never read. After max_triage_attempts the run escalates with "triage output failed validation: ..." — blaming output that was never validated. The migration path has the same shape (validate_migration runs only on completed). #194's env_fault pause softens the transport-failure case only; a lost event channel is not classified as an env fault.
Incident
Run 20260816-113627-d0b2 (macOS, claude adapter). The hook relay had never been registered in that project, so every session's Stop event was lost and each session read as timeout with session_id: null. Both triage attempts wrote a result.json that passes validate_triage (strict and cache mode alike) — attempt 2 finished its actual work in 59 seconds — and both were discarded on session status alone. The escalation blamed the output; the output was fine. signals.py's own docstring predicts the failure mode: losing Stop events means every session stalls to session_timeout_min — "the loudest possible regression, delivered silently".
Proposals (either or both)
-
Validate the result artifact on non-completed status too. If it validates, either use it — a
timeoutwith a valid, complete artifact is a completed turn whose Stop event was lost — or at minimum attach "result artifact present and passes validation" to the escalation so the operator debugs the event channel rather than the agent.SessionResult.stop_seen(#261) is already the right discriminator:status == "timeout" and not stop_seenwith a validating artifact is the lost-event-channel signature. Routing it like #194's env_fault pause (pause, don't charge attempts) would fit the existing shape. -
Make run/sweep enforce the zero-hook-events condition.
cmd_validatefails on unregistered, missing, unreadable, or stale relays, but nothing stops a run whose sessions produce zero events: it burnssession_timeout_minper session and escalates with the wrong blame. Hard-failing (or pausing) after the first session that ends withstop_seen == Falseand an empty run events dir would surface the miswiring at session one instead of N timeouts later.
Happy to attach the journal/state.json from the incident run.
- 主要言語
- Python
- スター
- 146
- フォーク
- 68
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 44
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
bmad-code-org/bmad-loop のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
bmad-code-org/bmad-loop#835 ·
メンテナーはふだん 1 日以内に返信
-
area:adapters area:psmux bug P4
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
bmad-code-org/bmad-loop#673 · コメント 8 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Engine crash on fixable repair after a resolved re-drive that escalated before any spec existedオープン
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
bmad-code-org/bmad-loop#860 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 55/100
bmad-code-org/bmad-loop#859 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
bmad-code-org/bmad-loop#858 ·
メンテナーはふだん 1 日以内に返信
bmad-code-org/bmad-loop の issue をすべて見る
似ている issue
-
defect from-review v0.9.2
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
khuisman/mcp-gee-sweet#926 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1時間未満 初心者へのやさしさ 84/100
EtanHey/brainlayer#1164 ·
メンテナーはふだん 1 日以内に返信
-
bug security
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
yunaremaia/vibeguard#141 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
PrismorSec/prismor#599 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信