Unknown Coverage Review(残存 Unknown のメタ観点)
由来 / Inspired by: Thariq「A Field Guide to Finding Your Unknowns」(The map is not the territory: Plan やプロンプトは現実のコードベースを圧縮した地図であり、地図と土地の差分に Unknown が潜む)と Matt Pocock「
/grill-me」(実装前に質問を重ね共有理解を作る)から着想した概念の再実装。原著者を名指しする nominative fair use に留め、endorsement は主張しない。
通常のレビューは「壊れている箇所(defect)」を指す。 本観点は 「そのリスク種別を調査した証拠が残っているか(evidence-sufficiency)」 を、完成した差分を横断して合成する。問いが直交するため、defect 検出とは混載しない。
背景 / Background
AI coding agent の実行能力が上がるほど、見逃しは単純なコード品質から 要件・暗黙知・影響範囲・運用条件・移行条件などの「未確認の未知(Unknown)」 へ移る。 チェックリストを満たしても、レビュー対象外の前提や未確認領域が残れば誤ったマージ判断につながる。 本観点は大量の質問を生成しない。差分・PR 本文・Plan・テスト・設定・履歴を調査し、以下を構造化して出力する。
- 何が未確認か
- なぜ危険か
- どの証拠が不足しているか
- 何を確認すれば解消できるか
- マージを止めるべきか(既存 verdict 語彙への写像で表現)
Pre-execution Gate / 発火条件
最初に判定する。満たさない場合は以降の観点を実行せず NO_REVIEW を返す。
- finding verification 後の 合成ステップとして呼ばれている(orchestrator の Execution Flow から。keyword routing では呼ばない)。
- 入力に少なくとも
diffがあり、差分が リポジトリ内で実行されるコード・migration・schema・公開 API・設定のいずれかに触れる。docs・コメントのみの差分は対象外とする。 - ビルド成果物・生成物(
dist/**・*.map・lockfile・自動生成 manifest)は Gate 判定からもレビュー対象からも除外する。 - PlanGate 非依存:
plan/review-selfなどの artifact が欠損しても動作する。欠損した観点は finding を出さずskippedSkillsに記録してデグレードする(artifact-input-contract の既定挙動)。plan/test-casesartifact は schema のinputContextenum・実行側availableContextsに供給元が存在しない optional evidence のため、frontmatterinputContextには宣言せず本 Gate の記述で扱う(宣言すると deterministic 経路で常に skipped になる)。 - 観点6 の plan 代替 evidence: 観点6(Plan / Assumption)は
planartifact 欠損時、PR 本文へ前提・open question が inline 列挙されていれば列挙分のみ部分評価する(外部 issue は取得・推測しない)。計画 issue の bare 参照(#NNNN)のみなら skip しskippedSkillsに記録する。この分岐は registry skillassumption-resolution-traceと同一ルールに揃える。 - PlanGate #810 ledger: PlanGate #810 が assumption/unknown ledger を出力する場合も、専用 artifact を新設しない。
planartifact 経由で受け取る同一の artifact-driven パターンに従う(artifact-input-contract.md)。欠損時は上記と同じデグレード(skippedSkills)を適用する。PlanGate への依存は必須にしない。
6 Unknown 観点 / Perspectives
Issue #1470 の 6 カテゴリを、defect ではなく evidence-sufficiency の meta 質問として扱う。各観点の defect 検出は既存 skill へ委譲する(DELEGATION.md)。本観点は委譲先が扱わない 残余(証拠が足りているかの合成)のみを検出する。
| # | 観点 | 核心の meta 問い |
|---|---|---|
| 1 | Requirement / Intent Unknowns | 「曖昧な仕様を推測で実装した箇所に、確認した証拠があるか」 |
| 2 | Repository / Impact Unknowns | 「影響範囲を repo 全体で検索・確認した証拠があるか」 |
| 3 | Runtime / Operational Unknowns | 「migration・再実行・外部依存・監視を検証した証拠があるか」 |
| 4 | Security / Data Unknowns | 「認証境界・入力検証・不可逆変更を確認した証拠があるか」 |
| 5 | Validation Unknowns | 「失敗系・境界・実利用経路を観測した証拠があるか」 |
| 6 | Plan / Assumption Traceability | 「Plan の Assumption が解消され、新規 Unknown が記録された証拠があるか」 |
観点 3〜5 は既存の運用・影響・検証系 skill の多くが applyTo: docs/**(upstream 設計文書向け)で、コードのみの diff では空振りする。本観点はその空白を「証拠の有無」の meta として拾う(設計 §1 の Partial / Gap)。
追加類型(#1517 由来)
「AIコードレビューの「見逃し」を3か月ログしたら、5つの盲点タイプに全部収まった」(井本 賢 / 2026-07-06)が報告した5盲点タイプのうち、境界条件・契約違反・意味的矛盾は既存の registry skill でカバー済み(対応先は DELEGATION.md の「追加 Unknown 種別」節を参照)。**状態遷移(不正な遷移)・副作用(隠れた副作用)**の2類型は専用 defect 検出 skill が未整備のため、DELEGATION.md「追加 Unknown 種別(#1517 由来)」節に暫定的な evidence-sufficiency の meta 問いとして記録する。中期の軽量 detector 化は issue #1517 を参照。
委譲 / Delegation
重複指摘を避けるため、個別 defect の検出は既存 registry skill に委譲し、本観点は 証拠充足の meta 評価のみを行う。委譲表・証拠要件・分界は DELEGATION.md を SSoT とする。委譲先が finding を出す領域を本観点は重複指摘しない。
Output / 出力
report-only 契約に従う。本観点はマージを止めない。判定素材を返すだけで、反復・停止・エスカレは caller の責務である。
- 残存 Unknown は output-format.md §4「Unverified / Residual Risk」の Unknown Coverage(残存 Unknown / evidence_missing / resolution) 下位構造へ出力する。各 Unknown は category・severity・blocking・evidence_missing・resolution を持つ。
- 解消済み Unknown は Good Points 節に根拠(リンク済み受入条件・テスト等)を添えて記録する。分量目安は観点ごとに代表 1 件・1 行に要約する(低リスク PR では解消済み記録が出力の大半を占めやすいため)。
- verdict は新語彙を作らず既存
gate.decisionへ写像する(loop-convergence-contract.md「Unknown Coverage verdict の写像」表が SSoT)。
| verdict | 既存語彙 | 条件 |
|---|---|---|
pass |
GO / GO_WITH_OBSERVATION |
Blocking Unknown なし・必要証拠あり。resolution が merge 後の観測で足りる非 Blocking Unknown のみ残る場合は GO_WITH_OBSERVATION |
needs_review |
ESCALATE(要人間) |
merge 前に解消すべき非 Blocking Unknown / 証拠不足 → severity: major + §4 残リスク |
fail |
NO_GO(要修正) |
セキュリティ / データ損失 / 互換性 / 不可逆の重大 Blocking Unknown → severity: critical |
判別軸は resolution の実行タイミング(merge 前 / merge 後) に置く。非 Blocking Unknown が残ること自体は needs_review を意味しない。その resolution が merge 後の観測(次回 eval run・運用レビュー等)で足りるなら pass(GO_WITH_OBSERVATION)に倒し、merge 前に解消すべきものだけを needs_review(ESCALATE)に倒す。
判定原則: Unknown の存在だけで自動的に
failにはしない。severity・blocking・根拠・復旧可能性で判断し、未確認と「確認済みでリスク受容」を区別する。fail-safe(判定不能 → NO_GO / ESCALATE)はsrc/lib/gate-decision.mjsの決定論純関数が担う。resolution が merge 後の観測で足りる非 Blocking Unknown を finding として出す場合、severity はminor/infoに制限する(major以上を出しながらverdict: passに写像すると矛盾するため)。resolution の追跡先明示:
GO_WITH_OBSERVATIONへ写像する残存 Unknown の resolution には、追跡可能な観測先(次回 eval run / follow-up issue / 運用レビュー等)を明示する。追跡先の無い resolution は放置されると観測ではなく単なる未解消に陥るため、その場合はneeds_review(ESCALATE)へ倒す。skippedSkillsの出力例:plan/review-self欠損時は該当観点をskippedSkillsに記録し、finding は出さずデグレードする(artifact-input-contract.md と同じ語彙・review-artifact.mdのid/reasonsスキーマに整合)。例:"skippedSkills": [ { "id": "unknown-coverage-review#6", "reasons": ["plan artifact missing"] } ]
False-positive guards
- 指摘の
file:lineは差分内にあること(VERIFICATION の evidence 規則)。差分外の推測に基づく Unknown は finding にせず question として返す。 - 委譲表に該当する defect は出さない(委譲先 skill の実行に委ねる)。
- 「証拠が repo 内・別ファイル・PR 本文に存在する可能性」を Grep / artifact 参照で棄却できない場合は、finding ではなく question にする。
- 低リスク PR(小さな明確なバグ修正・既存パターン踏襲)では過剰な Unknown を出さない。観点ごとに finding と question の合算で 最大 5 件とする。question は severity を持たないため
info相当として扱い、保持の優先順は findings(severity 降順)→ questions とし、上限超過分は優先度の低い側(questions → 低 severity findings)から切り捨てる。 - correctness bug・セキュリティ欠陥そのものは対象外(defect 系観点の責務)。
References
- DELEGATION.md — 既存 skill への委譲表・証拠要件・分界
Source: hashgraph-online/awesome-codex-plugins → plugins/s977043/river-review/skills/agent-skills/unknown-coverage-review/SKILL.md