---
generated_at: 2026-03-01 10:00:00
metrics:
  claims_total: 18
  claims_with_evidence: 17
  claims_without_evidence: 1
confidence_derived: 0.94
---

# 根拠レポート：61-SignalSelectionChanged

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：17 / 18、根拠なし：1
- 優先レビュー（高）
  1. **レンダラー側の差分チェック仕様**：InvalidateSelection が呼ばれる条件の詳細がコメントのみで、レンダラー本体のコードは未確認

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `src/types/IUiaEventDispatcher.h` - IUiaEventDispatcher インターフェース定義（24行目）
- E-02: `src/renderer/uia/UiaRenderer.cpp` - UiaEngine 実装（112-118行目: InvalidateSelection, 219-268行目: Present）
- E-03: `src/renderer/uia/UiaRenderer.hpp` - UiaEngine クラス定義（67-77行目: メンバ変数）
- E-04: `src/cascadia/TerminalControl/InteractivityAutomationPeer.cpp` - InteractivityAutomationPeer 実装（65-68行目）
- E-05: `src/cascadia/TerminalControl/InteractivityAutomationPeer.h` - InteractivityAutomationPeer 定義（49行目, 73行目）
- E-06: `src/cascadia/TerminalControl/TermControlAutomationPeer.cpp` - TermControlAutomationPeer 実装（81行目, 132-150行目）
- E-07: `src/cascadia/TerminalControl/TermControlAutomationPeer.h` - TermControlAutomationPeer 定義（67行目）
- E-08: `src/cascadia/TerminalControl/HwndTerminalAutomationPeer.cpp` - HwndTerminalAutomationPeer 実装（104-108行目）
- E-09: `src/cascadia/TerminalControl/HwndTerminalAutomationPeer.hpp` - HwndTerminalAutomationPeer 定義（35行目）
- E-10: `src/types/UiaTracing.cpp` - UiaTracing 実装（720-731行目）
- E-11: `src/types/UiaTracing.h` - UiaTracing クラス定義（86行目）
- E-12: `docs/code-to-docs/通知一覧/通知一覧.csv` - 通知一覧（61行目）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | SignalSelectionChanged は IUiaEventDispatcher.h で定義される純粋仮想関数である | E-01 (24行目) | ○ |
| C-02 | InvalidateSelection() で _selectionChanged フラグが true に設定される | E-02 (112-117行目) | ○ |
| C-03 | Present() メソッド内で _selectionChanged が true の場合に SignalSelectionChanged() が呼ばれる | E-02 (224-231行目) | ○ |
| C-04 | Present() 後に _selectionChanged は false にリセットされる | E-02 (262行目) | ○ |
| C-05 | UiaEngine が無効（_isEnabled == false）の場合、Present は S_FALSE を返しイベントは発火されない | E-02 (221行目) | ○ |
| C-06 | InteractivityAutomationPeer は SelectionChanged.raise() でイベントを中継する | E-04 (67行目), E-05 (73行目) | ○ |
| C-07 | TermControlAutomationPeer はコンストラクタで SelectionChanged イベントハンドラを登録する | E-06 (81行目) | ○ |
| C-08 | TermControlAutomationPeer は Dispatcher.RunAsync で UIスレッドに非同期ディスパッチする | E-06 (140行目) | ○ |
| C-09 | XAML版では RaiseAutomationEvent(TextPatternOnTextSelectionChanged) が呼ばれる | E-06 (146行目) | ○ |
| C-10 | _termControl が null の場合はイベント発火がスキップされる | E-06 (143-144行目) | ○ |
| C-11 | Dispatcher が null の場合は早期リターンする | E-06 (136-139行目) | ○ |
| C-12 | HWND版では UiaRaiseAutomationEvent(UIA_Text_TextSelectionChangedEventId) が呼ばれる | E-08 (107行目) | ○ |
| C-13 | UiaTracing::Signal::SelectionChanged() で ETW トレースが記録される | E-10 (720-731行目) | ○ |
| C-14 | トレースレベルは WINEVENT_LEVEL_VERBOSE である | E-10 (728行目) | ○ |
| C-15 | CoreDispatcherPriority は Normal である | E-06 (140行目) | ○ |
| C-16 | 複数 TermControl 存在時、フォーカスを持つコントロールのみが Enable 状態となる | E-03 (コメント 30-32行目) | ○ |
| C-17 | HWND版は Dispatcher を介さず同期的に処理される | E-08 (104-108行目) | ○ |
| C-18 | InvalidateSelection はレンダラー側で選択範囲の差分チェック後に呼ばれる | E-02 (114-115行目 コメント) | △ |

## 4) 不足情報（Unknown / Missing）
- C-18: InvalidateSelection のコメント（"INVARIANT: Renderer checks the incoming selection spans and only calls InvalidateSelection if they have actually changed."）に基づく主張だが、実際にレンダラー本体（Renderer.cpp等）でどのように差分チェックが行われるかのコードは未確認
  - 候補：`src/renderer/base/renderer.cpp` / レンダラーの選択管理コード

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 主要な処理フローはソースコードで完全に確認済み
- 0: 低リスク - データフローの記述はソースコードと一致
- 1: 中リスク - レンダラー本体からの InvalidateSelection 呼び出し条件は、UiaRenderer.cpp のコメントのみが根拠

## 6) レビュアーチェックリスト（最小）
- [ ] UiaRenderer.cpp の Present() メソッドにおける SignalSelectionChanged() 呼び出し条件が正確か確認
- [ ] TermControlAutomationPeer のコンストラクタでのイベントハンドラ登録が正しいか確認
- [ ] HWND版の UiaRaiseAutomationEvent のイベントIDが正しいか確認
- [ ] レンダラー本体（Renderer.cpp）での InvalidateSelection 呼び出し条件を確認
