[Fix] convert_codex_findings.py の抽出品質不具合を修正 (#203)#221
Merged
BlueEventHorizon merged 2 commits intoJul 17, 2026
Conversation
Codex 出力を findings_<種別>.json に構造化変換する findings_parser.py に 2つの抽出品質バグがあった: 1. #### P1/P2/P3 サブセクション見出しを跨いでも直前 finding の body が 閉じられず、後続の空セクションプレースホルダー(「(なし)」等)が body/target_snippet に混入する 2. **[severity] title** 形式で severity ラベルがタイトル前・太字内に 埋め込まれる場合、ラベル断片(例: "critical]")が title に残る 症状1は h4 以深のサブセクション見出しも finding の body 境界として扱うよう 修正した。ただし任意の h4+ 見出し全般を境界にすると、finding 本文に Markdown 見出しが自由記述として含まれる場合(例: `#### 修正案`)に body が 途中で打ち切られる退行を招くため、templates/review_result.md の固定 3 種 サブセクション見出しの完全一致にのみ限定した(実装後レビューで2巡にわたり 検出・修正)。 症状2は FINDING_PATTERN に severity ラベル専用の分岐を追加し、title 抽出時に ラベル全体([ と ] を含む)を除去するよう修正した。 Closes #203
`#### P2 (矛盾・齟齬) ####` のように ATX 見出しの閉じ記号 (CommonMark 仕様、 空白+#の連続で行末に付与される正当な記法) が付与された見出しは、見出し テキストの完全一致判定 (_SUBSECTION_HEADING_PATTERN の $ アンカー) が 閉じ # に阻まれて一致せず、Issue #203 症状1 (空セクションプレースホルダーの body 混入) が再発していた(実装後レビュー3巡目で指摘)。 heading_text の計算時に ATX 見出しの閉じ記号を除去するよう修正し、 回帰テストを追加した。
BlueEventHorizon
marked this pull request as ready for review
July 17, 2026 14:55
BlueEventHorizon
deleted the
fix/203-convert-codex-findings-extraction-quality
branch
July 17, 2026 14:55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
findings_parser.py(Codex 応答をfindings_<種別>.jsonに構造化変換する縮退経路の実装)に存在した抽出品質バグ 2 件を修正Closes #203
背景
/forge:review code --auto(engine=codex)の AI レビュー実行中に、findingの検出自体は成功するが抽出フィールドの内容にノイズが混入する不具合を2件確認した(Issue #201 とは異なる症状)。やったこと
extract_findings()のセクション境界検出で、#### P1/P2/P3サブセクション見出し(h4 以深)を跨いでも直前 finding の body が閉じられず、後続の空セクションプレースホルダー((なし)等)が body/target_snippet に混入していた問題を修正。サブセクション見出しも finding の body 境界として扱うようにしたFINDING_PATTERNが**[label] title**形式(severity ラベルが title の前・太字内に埋め込まれる形式)に対応しておらず、title 抽出時にラベル断片(例:critical])が残っていた問題を修正。severity ラベル専用の分岐を追加し、ラベル全体([と]含む)を除去するようにした/forge:review code --diff --interactive --codex)で「任意の h4+ 見出し全般を body 境界にすると、finding 本文に Markdown 見出しが自由記述として含まれる場合(例:#### 修正案)に body が途中で打ち切られる」という退行を指摘され、templates/review_result.mdの固定 3 種サブセクション見出し(P1 (ルール合致)/P2 (矛盾・齟齬)/P3 (不要な複雑化))の完全一致にのみ限定するよう修正(2 巡目レビューで「緩い前方一致だと偶然一致するケースがある」との指摘も受け、正規表現をさらに厳密化)tests/forge/review/test_findings_parser.pyに上記すべてのケースの回帰テストを追加やらないこと(このプルリクエストのスコープ外とすること)
agents/reviewer.md/templates/review_result.mdの出力フォーマット規約変更(PR [Fix] convert_codex_findings.py が Codex 出力の severity/title 順序違いでサイレントに finding 0 件を返す (#201) #211 と同方針。プロンプト強化のみでの対症療法は行わない)convert_codex_findings.pyの変更(findings_parserの関数を呼ぶのみで内部ロジック変更は波及しない)レビュー観点
extract_findings()の見出し処理変更(h4+ 見出しを body 境界として扱う条件を_SUBSECTION_HEADING_PATTERNに限定した部分)が、既存の h3 見出し処理・severity セクション継続ロジックと整合しているかFINDING_PATTERNの group 番号変更に伴う参照箇所(extract_findings内 2 箇所、_strip_leading_finding_marker)に取りこぼしがないかレビューレベル
Lv0: まったく見ないでAcceptするLv1: ぱっとみて違和感がないかチェックしてAcceptするLv3: 実際に環境で動作確認したうえでAcceptする備考
/forge:review code --diff --interactive --codexで実装後レビューを 2 巡実施し、いずれも指摘を修正・回帰テスト追加済みpython3 -m unittest discover -s tests -p 'test_*.py'で全 1465 件パス(リグレッションなし)