Skip to content

Single-round cap leaves no path when brake 1 is stopped by infrastructure rather than by an evaluator defect #1647

Description

@liplus-lin-lay

目的

skills/evolution-parallel-agent-eval/SKILL.md Procedure step 6 の単巡キャップが、基盤側の停止(使用量上限 / レート制限 / ホスト障害)と評価者側の欠陥(クラッシュ / 不正プロンプト / タイムアウト)を区別していない。前者で verdict ゼロになった PR は、literal どおりなら brake 1 を通せず、self-evolution PR として merge 不能のまま残る。

欠陥の芯: 基盤側の停止は 5 時間のローリング窓で自然に回復する。にもかかわらず仕様は、回復した基盤を使い直す権利を与えていない。基盤が詰まっているのではなく、仕様が詰まっている

確認済みの事実

3 日連続で同型が発生した。いずれも N=3 の 3 体すべてが途中終了し、verdict がゼロ。

日付 PR issue
2026-08-03 #1644 #1641(L1)
2026-08-04 #1650 #1636
2026-08-04 #1652 #1651

停止の実体は 5 時間ローリングの使用量上限(Master 確認)。ホストが返すエラー文字列は You've hit your monthly spend limit だが、これは表示が実態と食い違っている。本 issue の初版および #1644 / #1650 時点のコメントは、この文字列をそのまま事実として記録していた(Source check の失敗)。実態が月次の課金上限でないことは、以下 2 点に効く:

  • 復帰は待てば起きる。恒久的な詰まりではない。
  • 再実行が Master の追加支出を伴わない。サブスクリプションのレート制限であり、支出ゲートの軸に乗せる問題ではない。

step 6 の literal:

Single round: steps 2-4 produce one verdict per draft, and the revised draft ships without re-verification (see Non-scope: what the single-round cap gives up). The cap does not block step 2's rules/* retry path, and that path only: there, a refused apply leaves the round with no verdict, so re-running from a session that can apply IS the round, not a re-verification of it. Do not generalize this to any round that failed to produce a verdict — an evaluator crash, a malformed prompt, or a timeout does not earn a fresh round.

  • 再実行が許される例外は rules/* の operational copy apply 拒否 1 経路のみと明示的に限定列挙されている。
  • 「verdict を出せなかったラウンドに一般化するな」の例示は evaluator crash / malformed prompt / timeout の 3 つ。使用量上限による中断は文言上この集合に最も近い(「API エラーで途中終了」)。
  • したがって literal 適用の帰結は「当該 PR は brake 1 を通せず、再実行の権利も無い」。brake 1 は全 self-evolution PR で必須(Trigger の Self-evolution PR brake (mandatory))であるため、merge 不能が確定する

3 回とも AI 側で読み替えを自己認可せず Master へ提起し、再実行の go-sign を得て解決した。人間が居る session ではこの経路が使えるが、無人 run では窓が回復した後も復帰できない

制約

  • キャップの目的を壊さないこと。 Cap brake 1 at a single round and drop post-fix re-verification #1563 で確定した単巡キャップは「修正後の再検証ラウンドを廃止する」ためのもので、判断軸は Master literal「表面化しないバグはバグではない」。verdict が 1 つ出た後の 2 周目を防ぐ設計であり、verdict がゼロの状態を救済することとは別軸。救済経路を足すことでキャップが骨抜きになる形は採らない。
  • rules/* retry path の書き方が既に答えの形を持っている。 同経路は「apply が拒否されればラウンドに verdict が無い、よって apply できる session からの再実行は再検証ではなくそのラウンド本体である」と論じている。基盤停止も同じ構造(ラウンドが成立していない)で説明できるかを先に検討する。
  • 区別の根拠を「何が落ちたか」でなく「verdict が産出されたか」に置けるか。 「評価者が途中で落ちた」は基盤停止と表層が同じ(API エラー)ため、落ちた主体で切ると毎回判定がぶれる。産出の有無で切れば、現行が名指しで除外している 3 語(crash / malformed prompt / timeout)も同じ規則に入る。ただしその 3 語の限定列挙と正面から衝突するため、列挙を産出条件へ置き換える判断が要る。
  • N 未達の扱いが同じ軸に乗る。 N=3 のうち 1 体だけ落ちて 2 体が verdict を返した場合(spec(delegation): add subagent model policy and parallel-width cap #1533 R2 に実例)。産出条件で切るなら「N=3 の floor を満たしたか」が別途要る。
  • 再実行の待機設計。 停止が 5 時間窓であることが分かった以上、救済は「窓が回るまで待って再走」で足りる可能性が高い。無限リトライを防ぐのは回数上限より待機と上限回数の組が素直。人間ゲートは支出の軸ではなく、待機が長引いた場合の escalate として置く。

完了条件

  • 基盤停止で verdict ゼロになった brake 1 ラウンドについて、再実行が許されるか / 人間ゲートへ escalate するか / PR を保留するかが仕様上一意に決まる
  • その判断が evaluator crash と区別できる根拠を持ち、単巡キャップの目的(修正後の再検証ラウンド廃止)を損なわない
  • N=3 のうち一部のみ落ちた場合(N 未達)の扱いが同じ軸で決まっている
  • 無人 run で窓の回復後に自力復帰できる(待機と上限回数が仕様上決まっている)

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    forming本文を再構築しながら要求を整えている状態specLi+の挙動に影響する仕様・ポリシー・定義

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions