Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2b25e58
Fix: 誤りを示されていない重大な指摘を未反証として数え、反証が揃わないラウンドの印を外す(#732 #624 #706)
takemi-ohama Sep 19, 2026
c70ef28
Docs: 反証のプロンプトと規約・確定仕様を 6 区分に揃え、実装計画を置く(#732 #624 #706)
takemi-ohama Sep 19, 2026
37dec90
Test: cross-review の現状固定テストを追加
takemi-ohama Sep 19, 2026
e772af3
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
47384be
Test: 現状固定テスト追加 — critique-round / rotate-pr (squash)
takemi-ohama Sep 19, 2026
c76ae19
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
b02b30d
Test: 現状固定テストを追加 — cross-review の未固定分岐 3 件
takemi-ohama Sep 19, 2026
678f61f
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
4cd469b
Test: 現状固定テストを追加 — rotate-pr.sh#execute_light の前提ファイル検証 4 分岐
takemi-ohama Sep 19, 2026
b9026de
Revert "Test: 現状固定テストを追加 — rotate-pr.sh#execute_light の前提ファイル検証 4 分岐"
takemi-ohama Sep 19, 2026
532d935
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
39fb6e0
Test: rotate-pr の state 不在経路を固定
takemi-ohama Sep 19, 2026
bab284e
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
5cfb48f
Refactor: extract_method — plugins/ndf/skills/cross-review/scripts/st…
takemi-ohama Sep 19, 2026
9e73ace
Refactor: centralize_configuration — plugins/ndf/skills/cross-review/…
takemi-ohama Sep 19, 2026
8f8d7d1
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
0f6fd03
Refactor: split_into_pipeline — plugins/ndf/skills/cross-review/scrip…
takemi-ohama Sep 19, 2026
4214114
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
77d9383
Refactor: extract_method — plugins/ndf/skills/cross-review/scripts/st…
takemi-ohama Sep 19, 2026
f682913
Revert "Refactor: extract_method — plugins/ndf/skills/cross-review/sc…
takemi-ohama Sep 19, 2026
cef8f36
Docs: 改修計画を記録する(cross-refactoring 進行側)
takemi-ohama Sep 19, 2026
cca67a1
Merge: origin/develop を取り込む(#791 との競合を解消)
takemi-ohama Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 30 additions & 23 deletions docs/specifications/cross-review-evidence-based.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
**進行側は、担当の再評価より先に検証手順を実行する。** 機械が再現した事実は、担当の支持
より確かである。

**指摘は 5 つの区分へ分かれ、収束の判定は担当の判定(`event`)ではなく区分を見る。**
数えるのは `verified_blocking` と `needs_human_judgment` の 2 つだけである。
**指摘は 6 つの区分へ分かれ、収束の判定は担当の判定(`event`)ではなく区分を見る。**
数えるのは `verified_blocking` と `needs_human_judgment` と `unrefuted` の 3 つである。数えない
のは、誤りだと示された棄却と、承認を妨げない `minor` 以下の指摘だけである。

**却下した指摘は、位置・重要度・理由とともにラウンドをまたいで残る。** 次のラウンドの
レビュープロンプトへ渡り、同じ論点が戻ることを止める。
Expand All @@ -37,7 +38,7 @@
| 反証条件 | 何が成り立てば棄却できるか(`falsification`) |
| 検証手順 | 実行できる形で書いた確かめ方(`suggested_check`) |
| 反証 | 提案者以外の担当が、各指摘へ返す 1 つの値 |
| 区分 | 1 件の指摘を分ける 5 つの分類(`classification`) |
| 区分 | 1 件の指摘を分ける 6 つの分類(`classification`) |
| 方式 | 効果の測定で指摘を採る規則。`single` / `majority` / `proposed` / `oracle` の 4 つ |
| 代表 | 統合した組で、判定が読む 1 件。束ねられた側は `merged_into` を持つ |
| 印 | そのラウンドが統合・実行検証・反証を通ったこと(`evidence_rounds`) |
Expand Down Expand Up @@ -82,9 +83,9 @@
| 反証は新しいラウンドを足さず、同じラウンドの中で回す | ラウンド数が 2 倍になり、収束の上限(12)の意味が変わる |
| 申告による統合(2 段目)は次のラウンドへ回さない | 回すと、同じ主張を 2 者が別の本文で出した組が、統合される前に `insufficient_evidence` へ落ちて収束する |
| 反証の値は担当ごとに置き換え、積み増さない | 取り直したときに古い値が残る。`refute` を `support` へ訂正しても両方が並び、区分の順で `refute` が先に当たって指摘が `rejected` のままになる |
| 収束の判定が数えるのは 2 区分だけである | 棄却した指摘と `minor` の指摘を数えると、そのぶんラウンドが増える(#69 の 5 ラウンド) |
| 数えないのは棄却した指摘と `minor` の指摘だけである(誤りを示されていない `major` は `unrefuted` として数える) | 棄却した指摘と `minor` の指摘を数えると、そのぶんラウンドが増える(#69 の 5 ラウンド)。誤りを示されていない `major` を数えないと、未解決の `major` を残して承認で収束する(#624 #706) |
| 測れたかどうかは、区分で絞る**前**に決める | 絞った後の集合へ「空なら測れない」を適用すると、全件を棄却したラウンドが「測れなかった」ことになり、元の判定のままループが終わらない |
| 印(`evidence_rounds`)で母集合を決め、`review_findings` の有無では判定しない | 取り込みはこの変更より前から要素を積む。存在で判定すると、区分も検証結果も持たない旧いラウンドが絞り込みに掛かり、修正必須の `major` が落ちて収束する |
| 印(`evidence_rounds`)で母集合を決め、`review_findings` の有無では判定しない | 印の役割は、取り込みだけを済ませた旧いラウンドと反証が届いていないラウンドを、棄却と `minor` も含めて全件を数える側に置くことである。存在で判定すると、区分も検証結果も持たない旧いラウンドが絞り込みに掛かる。反証が揃わないときは印を付けず、先に付いていた印も外す |
| 印を付けるのは経路の最後で、対象ごとに有効な反証が揃ったときだけである | 途中で付けると反証を結ぶ前の値で数える。結果ファイルの欠落でも付けると、未検証のまま収束する |
| `needs_human_judgment` を人へのエスカレーションにしない | 収束のループはこの工程の中で回っており、止めて人を待つと自動で進まなくなる。決めるのは修正の担当で、その判断は却下の記録へ残る |
| 振動の検知(一致の判定・閾値 0.5)は変えない | 母集合は指摘の構造化で既に広がっている。判定式まで同時に変えると、ラウンド数が動いたときにどちらが原因かを切り分けられない |
Expand All @@ -106,7 +107,7 @@
- **束ねられた側は消さない。** `merged_into` を書いて残す。消すと、反証の結果がその指摘を
指したときに結び先を失う。判定・区分・測定はいずれも代表だけを数える
- **実行できなかったこと(`not_run`)と、再現しなかったこと(`not_reproduced`)を同じに
しない。** 前者は区分の順 3 の前半に当たらず、区分は反証と根拠で決まる
しない。** 前者は区分の順 3 の前半に当たらず、区分は重大度と反証で決まる
- **`ran_at` は実行した記録にだけ入る。** 実行しなかった記録では `exit_code` とともに
`null` である。時刻が残ると、実行済みと見分けられない
- **1 つの(ラウンド, 指摘, 担当)が持つ反証は 1 つである**
Expand Down Expand Up @@ -189,7 +190,7 @@
### 実行検証

**実行してよいのは、起動した側が渡したコマンドだけである。** 渡されなければ実行検証を
行わず、区分は根拠と反証で決まる。**新しい実行系は導入しない。**
行わず、区分は重大度と反証で決まる。**新しい実行系は導入しない。**

| 守ること | なぜ |
| --- | --- |
Expand Down Expand Up @@ -231,31 +232,37 @@

**上から順に見て、最初に当たった区分を採る。**

| 順 | 区分 | 条件 |
| --- | --- | --- |
| 1 | `verified_blocking` | 再現した、かつ `major` 以上 |
| 2 | `verified_non_blocking` | 再現した、かつ `minor` 以下 |
| 3 | `rejected` | 再現しなかった、または `refute` が 1 件以上 |
| 4 | `needs_human_judgment` | 根拠を持ち、`major` 以上で、`support` が 1 件以上**または** `origin_runtimes` が 2 者以上 |
| 5 | `insufficient_evidence` | 上のいずれにも当たらない |
| 順 | 区分 | 条件 | 数える | 理由の項目 |
| --- | --- | --- | --- | --- |
| 1 | `verified_blocking` | 再現した、かつ `major` 以上 | はい | — |
| 2 | `verified_non_blocking` | 再現した、かつ `minor` 以下 | いいえ | — |
| 3 | `rejected` | 再現しなかった、または `refute` が 1 件以上 | いいえ | `rejection_reason` |
| 4 | `needs_human_judgment` | `major` 以上で、`support` が 1 件以上**または** `origin_runtimes` が 2 者以上 | はい | — |
| 5 | `unrefuted` | `major` 以上(上のいずれにも当たらない) | はい | `unrefuted_reason`(`no_critique` / `not_supported`) |
| 6 | `insufficient_evidence` | 上のいずれにも当たらない(`minor` 以下) | いいえ | — |

**順 3 を順 1・2 より先に置かない。** 置くと、機械が再現した事実を担当の再評価が覆す。

**独立に到達した担当の数を、支持と並べて数える。** 担当は 2 者であるため、2 者が同じ指摘を
独立に出すと提案者以外が 1 人も残らず、支持は必ず 0 件になる。支持の数だけを見ると、最も
強い一致である全員一致が `insufficient_evidence` へ落ちて収束する。
強い一致である全員一致が、誰も確かめていない指摘と同じ `unrefuted` になり、独立に到達した
事実が記録に残らない。

**順 4 の分岐は、ラウンドの担当が 2 者であることに支えられている。** 担当を 3 者以上へ
広げると、単一の `refute` が順 3 で全員一致を覆す。広げるときに順 3 と順 4 の順序を決め直す。

**棄却には理由を残す**(実行の結果か、`refute` の理由)。
**棄却と未反証には理由を残す。** 棄却は実行の結果か `refute` の理由、未反証はなぜ独立に
確かめられていないか(反証を返した担当が 0 者なら `no_critique`、反証はあるが支持も否定も
無ければ `not_supported`)である。「立証できない」「範囲外」は誤りだという主張ではないため、
その反証を受けた `major` は数から落とさない。

### 区分ごとの行き先

| 区分 | 当ラウンドの修正の工程 | 行き先 |
| --- | --- | --- |
| `verified_blocking` | 渡す | 直す。機械が再現しているため判断の余地は無い |
| `needs_human_judgment` | 渡す | **修正の担当が読んで決める。** 直す・却下の理由を返す・範囲外として起票する |
| `unrefuted` | 渡す | 同上。理由(`unrefuted_reason`)から、誰も見ていないのか相手が確かめられなかったのかを読める |
| `verified_non_blocking` | 渡さない | 最終スイープ。再現した事実は記録に残る |
| `insufficient_evidence` | 渡さない | 同上 |
| `rejected` | 渡さない | 棄却の理由が残り、次のラウンドのレビュープロンプトへ渡る |
Expand All @@ -270,8 +277,8 @@
| 状態 | 返る値 |
| --- | --- |
| 指摘の記録を読めない | `(0, 測れない)`。従来の判定(全員が pass か)へ落ちる |
| 記録はあるが、数える 2 区分が 0 件 | **`(0, 測れた)`。収束させる** |
| 記録があり、数える 2 区分に一致しない指摘がある | `(件数, 測れた)` |
| 記録はあるが、数える 3 区分が 0 件 | **`(0, 測れた)`。収束させる** |
| 記録があり、数える 3 区分に一致しない指摘がある | `(件数, 測れた)` |

**記録が読めることと、数える対象があることは別である。** 全件を棄却したラウンドは「新しい
修正必須の指摘が 0 件」であって、測れなかったラウンドではない。
Expand All @@ -288,7 +295,7 @@
| --- | --- |
| `single` | 1 者だけの結果。担当ごとに 1 通り出す |
| `majority` | `origin_runtimes` が 2 者以上の指摘 |
| `proposed` | 区分が `verified_blocking` または `needs_human_judgment` の指摘 |
| `proposed` | 区分が `verified_blocking` / `needs_human_judgment` / `unrefuted` の指摘。状態の管理スクリプトが数える集合と同じで、一致をテストで固定する |
| `oracle` | いずれかの担当が出した指摘のうち、**修正された**もの |

**`origin_runtimes` を持たない指摘は、取り込み時の担当 1 者として読む。** この値は統合の
Expand Down Expand Up @@ -347,7 +354,7 @@
| `origin_runtimes` / `merged_from` / `merged_into` / `evidence_from` / `duplicate_candidates` | 統合 |
| `verification` | 実行検証。`command` / `exit_code` / `result` / `finding_id` / `ran_at` |
| `critiques` | 反証。要素は `agent` / `verdict` / `reason`(`duplicate` のときは `duplicate_of`) |
| `classification` / `rejection_reason` | 区分 |
| `classification` / `rejection_reason` / `unrefuted_reason` | 区分。理由の 2 つはその区分のときだけ持つ |

**識別子は取り込みの時点で採番する。** 形は `<担当>-r<ラウンド>-<索引>` で、索引はその担当の
`payload.json` の並びである。同じ組の取り込みは入れ替えであるため、再実行しても同じ指摘へ
Expand Down Expand Up @@ -413,10 +420,10 @@ measure.py <状態ファイルのパス> [--output <パス>]
| 提案者以外だけが賛否を返し、5 つの値が記録されること | 同 `tests/test_critiques.py` |
| 結び先の無い反証が残ること | 同上 |
| 反証が揃わないラウンドに印が付かず、1 度だけ取り直すこと | 同上 |
| 5 つの区分へ分かれ、棄却に理由が残ること | 同 `tests/test_classify_findings.py` |
| 6 つの区分へ分かれ、棄却と未反証に理由が残ること | 同 `tests/test_classify_findings.py` |
| 再現した指摘が反証があっても棄却されず、再現しない指摘が支持が多くても棄却されること | 同上 |
| 全員一致の指摘が収束しないこと | 同上 |
| 新規性が 2 区分だけを数え、全件を棄却したラウンドが収束すること | 同上 |
| 新規性が 3 区分を数え、全件を棄却したラウンドが収束すること | 同上 |
| 走らせる順序が手順と実装で揃っていること | 同 `tests/test_findings_pipeline_wiring.py` |
| 4 つの方式が同じ記録から出て、統合された指摘を 2 回数えないこと | 同 `tests/test_measure.py` |
| `origin_runtimes` を持たない記録でも担当別の件数が残ること | 同上 |
Expand All @@ -431,7 +438,7 @@ measure.py <状態ファイルのパス> [--output <パス>]
## 運用

**実行検証を使うかは、起動する側が決める。** 引数を渡さないリポジトリでは実行検証が走らず、
区分は根拠と反証で決まる。既定の一覧は持たない(リポジトリによってテストの起動が違う)。
区分は重大度と反証で決まる。既定の一覧は持たない(リポジトリによってテストの起動が違う)。

**印を持たない記録では `proposed` を計算できず、位置の記録を持たない記録では `oracle` と
再現率を計算できない。** この変更より前に回した Pull Request が該当する。変更の前後を
Expand Down
6 changes: 3 additions & 3 deletions issues/issue-732-624-706-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -331,16 +331,16 @@ graph TD

## 未確認のまま残ること

6 件である。実装で決めるもの 2 件(テストの置き場所、プロンプトの文言)と、配布後の運用か別の課題で決まるもの 4 件に分かれる。
6 件である。実装で決めたもの 2 件(テストの置き場所、プロンプトの文言)と、配布後の運用か別の課題で決まるもの 4 件に分かれる。

| 項目 | 内容 | いつ決まるか |
| --- | --- | --- |
| 収束までのラウンド数の増え方 | 実測の D・E(相手が「立証できない」を返した重大な指摘)を数えることで、2 者のループのラウンド数がどれだけ増えるかは測っていない | 配布後の運用で測定スクリプトの出力を見る |
| 未反証が多いときの修正の担当の負荷 | 誰も確かめていない重大な指摘が修正の工程へ渡る件数が増える。却下の理由を書く回数が増える | 同上 |
| 担当を 3 者以上へ広げたときの順 3 と順 4 | 確定仕様が「広げるときに決め直す」としている。この変更は 2 者のまま | #478 の後 |
| 立証不足の区分の改名 | 決定 6 で残す。意味が狭まった名前をいつ付け替えるかは未決 | 要求が出たとき |
| テストの置き場所 | テスト設計の表の置き場所は既存ファイルに合わせた目安である | **実装で決める** |
| プロンプトの文言 | 決定 9 の段落は、含める 2 つの内容だけを決めた | **実装で決める** |
| テストの置き場所 | テスト設計の表のとおりに置いた。区分の単体と AC1〜AC4・AC10 は `test_classify_findings.py`、AC11・AC12 は `test_measure.py`、AC13 は `test_critiques.py`、AC18〜AC20 は `test_skill_layout.py` | 実装で決めた(実装 Pull Request) |
| プロンプトの文言 | 「返す値」の表の下に 3 文を置いた。「立証できない」を返しても指摘は数から落ちず未反証として修正の工程へ渡ること、誤りを示せるなら何がそう言えるかを理由へ書いて否定を返すこと、指摘を数から落とす手段は否定だけであること | 実装で決めた(実装 Pull Request) |

## 申し送り(並行する設計との境界)

Expand Down
Loading
Loading