Skip to content

cross-review: --only で 1 者だけのとき、反証する担当がおらず REQUEST_CHANGES の新しい指摘があっても収束と判定する #624

Description

@takemi-ohama

何を見つけたか

cross-review を --only codex で 1 者だけにして回すと、codex が REQUEST_CHANGES で新しい指摘を投稿したラウンドでも、judge が収束と判定する(ndf 10.10.1、2026-09-13)。

$ state.py read-result <PR> codex
✅ codex: intent=REQUEST_CHANGES posted_as=COMMENT comments=1
$ critique-round.sh <PR> 1 codex
⏭ codex: 反証の対象がありません(すべて自分の指摘)
✅ 反証を取り込みました: 0 件
$ state.py judge <PR>; echo $?
✅ 新しい指摘が出なくなった。収束。
REVIEWER_INTENTS='codex=REQUEST_CHANGES'
NEW_FINDINGS=0
0

同じ現象を 4 ラウンドで観測した。どのラウンドの指摘も、それまでに無い箇所・観点で、修正を要する妥当なものだった(契約に TTL が無い、フラグの効果が未定義、再実行で復旧できない など)。

原因の見当

_new_finding_count(plugins/ndf/skills/cross-review/scripts/state.py:3718)は、証拠集約を通ったラウンド(_evidence_completed)では _counted_finding_keys(:3674)で数える指摘を絞る。--only で担当が 1 者だと、反証する他の担当がいないため数える区分に入る指摘が 0 件になり、_evaluate_convergence(:2848)の findings_measurable and new_findings == 0 が真になる。

証拠集約の印は反証の有無に関わらず付く。 critique-round.sh が「反証の対象がありません」になると、cmd_collect_critiques では揃っていない対象(missing)が空になり、末尾の _mark_evidence_round(:3199)がラウンドに印を付ける。

状態ファイルを最小の形で組み、関数を直接呼んだ再現(--only codex、証拠付きの major 1 件、印の付いたラウンド 1):

new_finding_count (0, True) classification insufficient_evidence
round_passes False converged True

反証する担当が構造的にいない指摘

--only に限らず、次の指摘も同じ形で数えられず、収束へ進む。

形 なぜ反証する担当がいないか
--only で担当が 1 者 反証する他の担当がいない
同じラウンドで起動し直した担当の指摘 (#583) 印は 1 回目の経路で反証を取り込んだ時点で付く。起動し直した担当の指摘はその後に取り込まれ、反証の対象にならない

担当 2 者で、相手が反証で support を返さない指摘を数えないのは #156 の設計どおりであり、この課題の対象外である。

どこで見つけたか

agy がハードタイムアウトで結果を残せず(#598)、状態ファイルを退避して --only codex で初期化し直し、1 ラウンドずつ回していたとき。

#598 は v10.13.0(2026-09-16)で解決した。 監視の上限は工程ごとの表
(plugins/ndf/scripts/lib/limits.py)が持ち、レビューの工程は 1200 秒になった。この課題の成立には
影響しない。
--only で 1 者へ絞る経路は残り、絞り込みの仕組みも変わっていない。

直さないと何が起きるか

期待する振る舞いの候補

候補 内容
反証の担当がいないラウンドは絞り込まない 反証が 0 件のときは全件を数える(_evidence_completed を偽に扱う)
--only では intent に従う 担当が 1 者なら、全員 pass(round_passes)だけを収束の条件にする
印を指摘単位で持つ 証拠集約の印をラウンド単位ではなく指摘単位(反証の対象になったか)で持ち、反証の対象にならなかった指摘は絞り込まない。#583 の起動し直しの経路もまとめて塞がる

関連

進行

モード: standard / 作業ツリー: .worktrees/feat/issue-732-uncounted-classification / 計画: issues/issue-732-624-706-plan.md

  • 要求と受け入れ条件 — 2026-09-15 12:46
  • 作業場所の用意 — 2026-09-15 12:45
  • 設計 — 2026-09-15 14:11
  • 素材の収集と出典の確定
  • ドキュメント再構成 — 2026-09-15 14:11
  • ドキュメントレビュー — 2026-09-15 14:11
  • 計画 — 2026-09-19 11:01
  • 実装 — 2026-09-19 11:04
  • 構造改善 — 2026-09-19 19:34
  • 実装レビュー — 2026-09-19 21:41
  • 完了判定 — 2026-09-19 21:52
  • Pull Request — 2026-09-19 11:23
  • 確定仕様化 — 2026-09-21 20:53
  • 後片付け — 2026-09-19 10:56
  • 配布 — 2026-09-22 14:17
  • 体裁レビュー
  • リリース後テスト — 2026-09-22 15:06
  • 振り返り — 2026-09-22 15:38

閉じた理由

PR #790 で直り、ndf 10.16.0(2026-09-22、main / タグ ndf--v10.16.0、PR #810)で配布した。リリース後テスト(#810 (comment) )でこの課題の受け入れ条件はすべて合格した。

振り返り: #810 (comment)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ndf-skillNDF の Skill 本体bugSomething isn't workingpriority: high実害・安全機構の欠落など、優先して対応する

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions