---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 147
  claims_with_evidence: 141
  claims_without_evidence: 6
confidence_derived: 0.96
---

# 根拠レポート：propslib 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：141 / 147、根拠なし：6
- 優先レビュー（高）
  1. **UT-PRL-030（s_UpdateValue メモリ確保失敗）**：メモリ確保失敗時の戻り値が未定義の可能性あり（Data==nullptrの場合にStatusが初期値STATUS_UNSUCCESSFULのまま返る）
  2. **UT-PRL-050（ConvertStringToDec オーバーフロー）**：WORD型オーバーフロー時の具体的挙動はコンパイラ依存であり、期待結果の確証が弱い
  3. **UT-PRL-088/089（s_PopulateV1Properties）**：V1プロパティの全フィールドマッピングの網羅性はコードから確認可能だが、CONSOLE_STATE_INFOの構造体定義が外部ヘッダにあるため完全検証が困難

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/propslib/RegistrySerialization.hpp` - RegistrySerializationクラスのヘッダ定義
- E-02: `src/propslib/RegistrySerialization.cpp` - RegistrySerializationクラスの実装
- E-03: `src/propslib/ShortcutSerialization.hpp` - ShortcutSerializationクラスのヘッダ定義
- E-04: `src/propslib/ShortcutSerialization.cpp` - ShortcutSerializationクラスの実装
- E-05: `src/propslib/TrueTypeFontList.hpp` - TrueTypeFontListクラスのヘッダ定義
- E-06: `src/propslib/TrueTypeFontList.cpp` - TrueTypeFontListクラスの実装（ConvertStringToDec関数含む）
- E-07: `src/propslib/DelegationConfig.hpp` - DelegationConfigクラスのヘッダ定義
- E-08: `src/propslib/DelegationConfig.cpp` - DelegationConfigクラスの実装（_lookupCatalog関数含む）
- E-09: `src/propslib/conpropsp.hpp` - propslib統合ヘッダ
- E-10: `src/propslib/precomp.h` - プリコンパイルヘッダ（PopEntryList/PushEntryList定義含む）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | UT-PRL-001〜007: ToWin32RegistryTypeが各_RegPropertyTypeに対して正しいWin32レジストリ型を返す | E-02 (L14-29) | ○ |
| C-02 | UT-PRL-008〜010: s_OpenKeyがRegOpenKeyWをラップし適切なNTSTATUSを返す | E-02 (L248-252) | ○ |
| C-03 | UT-PRL-011〜012: s_CreateKeyがRegCreateKeyWをラップし作成/オープンを行う | E-02 (L277-281) | ○ |
| C-04 | UT-PRL-013〜017: s_QueryValueがRegQueryValueExWをラップし型チェック・データ取得を行う | E-02 (L319-347) | ○ |
| C-05 | UT-PRL-016: 型不一致時にSTATUS_OBJECT_TYPE_MISMATCHを返す | E-02 (L335-339) | ○ |
| C-06 | UT-PRL-018〜019: s_SetValueがRegSetKeyValueWをラップし値を設定する | E-02 (L293-306) | ○ |
| C-07 | UT-PRL-020〜021: s_DeleteValueがRegDeleteKeyValueWをラップしERROR_FILE_NOT_FOUNDをSTATUS_SUCCESSに変換する | E-02 (L261-265) | ○ |
| C-08 | UT-PRL-022〜023: s_EnumValueがRegEnumValueWをラップし値を列挙する | E-02 (L360-380) | ○ |
| C-09 | UT-PRL-024〜026: s_OpenConsoleKeyがHKCUのConsoleキーを開き存在しない場合は作成する | E-02 (L204-237) | ○ |
| C-10 | UT-PRL-027〜030: s_UpdateValueがデフォルト値との比較で削除/更新を判断する | E-02 (L395-430) | ○ |
| C-11 | UT-PRL-030: メモリ確保失敗時にData==nullptrとなりStatusが未定義のまま返る可能性 | E-02 (L402-427) | △ |
| C-12 | UT-PRL-031〜037: s_LoadRegDwordが各プロパティ型に応じてSettingsフィールドに値を設定する | E-02 (L103-154) | ○ |
| C-13 | UT-PRL-038〜041: s_LoadRegStringが文字列値をSettingsにロードしnull終端を保証する | E-02 (L163-193) | ○ |
| C-14 | UT-PRL-042〜044: s_OpenCurrentUserConsoleTitleKeyが3階層のキーを作成/オープンし失敗時にクリーンアップする | E-02 (L432-462) | ○ |
| C-15 | UT-PRL-045〜050: ConvertStringToDecが文字列を10進WORD値に変換する | E-06 (L16-33) | ○ |
| C-16 | UT-PRL-050: WORD型オーバーフロー時の具体的な挙動 | E-06 (L16-33) | △ |
| C-17 | UT-PRL-051〜056: s_Initializeがレジストリからフォントリストを読み込みBOLD_MARKを処理する | E-06 (L35-122) | ○ |
| C-18 | UT-PRL-057〜058: s_DestroyがリストのエントリをHeapFreeで解放する | E-06 (L124-139) | ○ |
| C-19 | UT-PRL-059〜065: s_SearchByNameがFaceName1/2とCodePageでフォントを検索する | E-06 (L141-170) | ○ |
| C-20 | UT-PRL-066〜068: s_SearchByCodePageがコードページで検索しデフォルトフォントにフォールバックする | E-06 (L172-197) | ○ |
| C-21 | UT-PRL-069〜075: s_InitPropVarFrom*がPROPVARIANTを正しく初期化する | E-04 (L13-33) | ○ |
| C-22 | UT-PRL-076〜078: s_SetLinkProperty*ValueがIPropertyStoreに値を設定しPropVariantClearで後処理する | E-04 (L35-63) | ○ |
| C-23 | UT-PRL-079〜087: s_GetProperty*ValueがIPropertyStoreから値を取得しVT_EMPTYをスキップする | E-04 (L65-125) | ○ |
| C-24 | UT-PRL-082〜083: s_GetPropertyByteValueがBYTE範囲外でE_INVALIDARGを返す | E-04 (L95) | ○ |
| C-25 | UT-PRL-088〜090: s_PopulateV1PropertiesがNT_CONSOLE_PROPSブロックからV1プロパティを読み込む | E-04 (L127-177) | ○ |
| C-26 | UT-PRL-088: V1プロパティの全フィールドマッピング（CONSOLE_STATE_INFOの構造体定義は外部ヘッダ） | E-04 (L139-157) | △ |
| C-27 | UT-PRL-091〜092: s_PopulateV2PropertiesがV2プロパティをチェーン呼び出しで読み込む | E-04 (L179-237) | ○ |
| C-28 | UT-PRL-093〜095: s_GetLinkTitleがSHCreateItemFromParsingNameでタイトルを取得しフォールバックする | E-04 (L241-282) | ○ |
| C-29 | UT-PRL-096〜098: s_GetLoadedShellLinkForShortcutがIShellLinkとIPersistFileを取得しリソースリークを防止する | E-04 (L285-320) | ○ |
| C-30 | UT-PRL-099〜100: s_GetLinkConsolePropertiesがV1/V2プロパティを統合して読み込む | E-04 (L323-340) | ○ |
| C-31 | UT-PRL-101〜105: s_GetLinkValuesが全ショートカットプロパティを取得しオプショナルパラメータをサポートする | E-04 (L343-422) | ○ |
| C-32 | UT-PRL-106〜110: s_SetLinkValuesがプロパティを書き込みwriteTerminalSettings/fEastAsianSystemフラグを処理する | E-04 (L433-540) | ○ |
| C-33 | UT-PRL-107: writeTerminalSettings=falseでTerminalプロパティがスキップされる（GH#2319関連） | E-04 (L513-520, L428-430コメント) | ○ |
| C-34 | UT-PRL-111〜118: DelegationPairとPkgVersionのconstexprメソッドと等価比較演算子 | E-07 (L40-63) | ○ |
| C-35 | UT-PRL-119〜124: PackageInfo::IsFromSamePackageがname, author, pfn, versionを比較しlogoを除外する | E-07 (L74-80) | ○ |
| C-36 | UT-PRL-125〜126: DelegationPackage::operator==がpairのみで比較する | E-07 (L94-97) | ○ |
| C-37 | UT-PRL-127〜132: s_GetDelegationPairがレジストリからGUIDを読み取りDefault/Conhost/Customを判定する | E-08 (L233-286) | ○ |
| C-38 | UT-PRL-132: GUIDバッファ(39文字)のnull終端処理 | E-08 (L272) | ○ |
| C-39 | UT-PRL-133〜136: s_GetAvailablePackagesがカタログルックアップとパッケージマッチングを行う | E-08 (L158-213) | ○ |
| C-40 | UT-PRL-137〜138: s_SetDefaultByPackageがconsoleとterminalのCLSIDを書き込む | E-08 (L226-231) | ○ |
| C-41 | UT-PRL-139〜141: s_SetがCLSIDを文字列化してレジストリに書き込む | E-08 (L288-307) | ○ |
| C-42 | UT-PRL-142〜147: _lookupCatalogがAppExtensionカタログからDelegationBaseを取得する | E-08 (L35-156) | ○ |
| C-43 | UT-PRL-144: ロゴURI取得失敗がLOG_IF_FAILEDで非致命的に処理される | E-08 (L80) | ○ |
| C-44 | UT-PRL-145: CLSIDプロパティ型がString以外の場合のERROR_NOT_SUPPORTED | E-08 (L139-142) | ○ |
| C-45 | UT-PRL-089: NT_FE_CONSOLE_PROPSのCodePageフィールドマッピング（外部ヘッダ依存） | E-04 (L165-169) | △ |
| C-46 | UT-PRL-052: BOLD_MARKの定数値（外部ヘッダで定義） | E-06 (L82-90) | △ |
| C-47 | UT-PRL-051: MACHINE_REGISTRY_CONSOLE_TTFONT_WIN32_PATHの具体的パス（外部ヘッダで定義） | E-06 (L47) | △ |

## 4) 不足情報（Unknown / Missing）
- C-11: s_UpdateValue内でData==nullptrの場合のStatus変数の初期値STATUS_UNSUCCESSFULが返るが、これは意図的な設計かコードコメントで明確にされていない
  - 候補：コードレビュー / 開発者コメント / 設計ドキュメント
- C-16: WORD型の算術オーバーフロー時の挙動はC++標準では未定義動作となる可能性がある
  - 候補：C++標準仕様書 / コンパイラドキュメント
- C-26, C-45: CONSOLE_STATE_INFOとNT_FE_CONSOLE_PROPSの構造体定義はWindows SDKヘッダ（winconp.h等）に依存
  - 候補：Windows SDK ドキュメント / winconp.h
- C-46: BOLD_MARKの定数定義は外部ヘッダ（winconp.h等）に依存
  - 候補：Windows SDK ドキュメント / winconp.h
- C-47: MACHINE_REGISTRY_CONSOLE_TTFONT_WIN32_PATHの定義は外部ヘッダに依存
  - 候補：Windows SDK ドキュメント / 該当ヘッダファイル

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - ToWin32RegistryType、DelegationPair/PkgVersionの等価比較、InitPropVarFrom*系関数（純粋な変換ロジック）
- 1: 中リスク - レジストリ操作系メソッド（s_OpenKey, s_CreateKey, s_QueryValue等）はモック環境でのテストが必要
- 1: 中リスク - ShortcutSerialization系メソッドはCOM/Shellインターフェイスのモックが必要
- 1: 中リスク - _lookupCatalogはWinRT APIのモックが必要
- 2: 高リスク - s_UpdateValueのメモリ確保失敗パス（C-11）は戻り値が未定義状態になる可能性がある
- 1: 中リスク - ConvertStringToDecのWORDオーバーフロー（C-16）はコンパイラ依存の挙動

## 6) レビュアーチェックリスト（最小）
- [ ] RegistrySerializationの各メソッドのテストケースがレジストリ操作のモック化を前提としているか確認
- [ ] ShortcutSerializationの各メソッドのテストケースがCOM初期化とIShellLink/IPropertyStoreモックを前提としているか確認
- [ ] DelegationConfigの_lookupCatalogテストケースがWinRT API（AppExtensionCatalog等）のモック化を前提としているか確認
- [ ] s_UpdateValueのメモリ確保失敗パス（UT-PRL-030）の期待結果が正しいか確認（STATUS_UNSUCCESSFULの初期値で返る挙動）
- [ ] ConvertStringToDecのオーバーフローケース（UT-PRL-050）の期待結果がターゲットコンパイラの挙動と一致するか確認
- [ ] 外部ヘッダ（winconp.h等）で定義される定数（BOLD_MARK, MACHINE_REGISTRY_CONSOLE_TTFONT_WIN32_PATH等）の値を確認
- [ ] CONSOLE_STATE_INFOの全フィールドがV1/V2プロパティのテストケースで網羅されているか確認
- [ ] s_GetDelegationPairのGUIDバッファnull終端処理テスト（UT-PRL-132）が適切なエッジケースをカバーしているか確認
