Skip to content

[Fix] convert_codex_findings.py の抽出品質不具合を修正 (#203)#221

Merged
BlueEventHorizon merged 2 commits into
developfrom
fix/203-convert-codex-findings-extraction-quality
Jul 17, 2026
Merged

[Fix] convert_codex_findings.py の抽出品質不具合を修正 (#203)#221
BlueEventHorizon merged 2 commits into
developfrom
fix/203-convert-codex-findings-extraction-quality

Conversation

@BlueEventHorizon

Copy link
Copy Markdown
Owner

概要

  • findings_parser.py(Codex 応答を findings_<種別>.json に構造化変換する縮退経路の実装)に存在した抽出品質バグ 2 件を修正

Closes #203

背景

/forge:review code --auto(engine=codex)の AI レビュー実行中に、findingの検出自体は成功するが抽出フィールドの内容にノイズが混入する不具合を2件確認した(Issue #201 とは異なる症状)。

やったこと

  • 症状1: extract_findings() のセクション境界検出で、#### P1/P2/P3 サブセクション見出し(h4 以深)を跨いでも直前 finding の body が閉じられず、後続の空セクションプレースホルダー((なし)等)が body/target_snippet に混入していた問題を修正。サブセクション見出しも finding の body 境界として扱うようにした
  • 症状2: FINDING_PATTERN**[label] title** 形式(severity ラベルが title の前・太字内に埋め込まれる形式)に対応しておらず、title 抽出時にラベル断片(例: critical])が残っていた問題を修正。severity ラベル専用の分岐を追加し、ラベル全体([]含む)を除去するようにした
  • 症状1の修正後、実装後レビュー(/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 に上記すべてのケースの回帰テストを追加

やらないこと(このプルリクエストのスコープ外とすること)

レビュー観点

  • extract_findings() の見出し処理変更(h4+ 見出しを body 境界として扱う条件を _SUBSECTION_HEADING_PATTERN に限定した部分)が、既存の h3 見出し処理・severity セクション継続ロジックと整合しているか
  • FINDING_PATTERN の group 番号変更に伴う参照箇所(extract_findings 内 2 箇所、_strip_leading_finding_marker)に取りこぼしがないか

レビューレベル

  • Lv0: まったく見ないでAcceptする
  • Lv1: ぱっとみて違和感がないかチェックしてAcceptする
  • Lv2: 仕様レベルまで理解して、仕様通りに動くかある程度検証してAcceptする
  • Lv3: 実際に環境で動作確認したうえでAcceptする

備考

  • /forge:review code --diff --interactive --codex で実装後レビューを 2 巡実施し、いずれも指摘を修正・回帰テスト追加済み
  • python3 -m unittest discover -s tests -p 'test_*.py' で全 1465 件パス(リグレッションなし)

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 BlueEventHorizon self-assigned this Jul 17, 2026
@BlueEventHorizon
BlueEventHorizon marked this pull request as ready for review July 17, 2026 14:55
@BlueEventHorizon
BlueEventHorizon merged commit 1ff0406 into develop Jul 17, 2026
1 check passed
@BlueEventHorizon
BlueEventHorizon deleted the fix/203-convert-codex-findings-extraction-quality branch July 17, 2026 14:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant