---
generated_at: 2026-02-27 12:00:00
metrics:
  claims_total: 230
  claims_with_evidence: 224
  claims_without_evidence: 6
confidence_derived: 0.97
---

# 根拠レポート：shared モジュール単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：224 / 230、根拠なし：6
- 優先レビュー（高）
  1. **C-066（camelize キャッシュ確認）**：キャッシュの内部状態は外部から直接検証困難
  2. **C-091（getGlobalThis 環境判定）**：実行環境依存のため全パターンの検証が困難
  3. **C-206（isSSRSafeAttrName キャッシュ確認）**：キャッシュの内部状態は外部から直接検証困難
  4. **C-069（hyphenate 連続大文字）**：正規表現 `/\B([A-Z])/g` の具体的出力が要確認
  5. **C-128（parseStringStyle コロン含む値）**：正規表現 `/:([^]+)/` の境界動作が要確認
  6. **C-179（generateCodeFrame CRLF）**：CRLF改行処理の詳細動作が要確認

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

- E-01: `packages/shared/src/makeMap.ts` - makeMap関数の実装
- E-02: `packages/shared/src/general.ts` - 汎用ユーティリティ関数群の実装
- E-03: `packages/shared/src/looseEqual.ts` - ルーズ等価比較関数の実装
- E-04: `packages/shared/src/normalizeProp.ts` - プロパティ正規化関数群の実装
- E-05: `packages/shared/src/toDisplayString.ts` - 表示文字列変換関数の実装
- E-06: `packages/shared/src/escapeHtml.ts` - HTMLエスケープ関数群の実装
- E-07: `packages/shared/src/codeframe.ts` - コードフレーム生成関数の実装
- E-08: `packages/shared/src/patchFlags.ts` - PatchFlagsのenum定義とPatchFlagNames
- E-09: `packages/shared/src/shapeFlags.ts` - ShapeFlagsのenum定義
- E-10: `packages/shared/src/slotFlags.ts` - SlotFlagsのenum定義とslotFlagsText
- E-11: `packages/shared/src/globalsAllowList.ts` - グローバル許可リスト
- E-12: `packages/shared/src/domTagConfig.ts` - DOMタグ判定関数群
- E-13: `packages/shared/src/domAttrConfig.ts` - DOM属性設定関数群
- E-14: `packages/shared/src/cssVars.ts` - CSS変数値正規化関数
- E-15: `packages/shared/src/typeUtils.ts` - 型ユーティリティ（型定義のみ）
- E-16: `packages/shared/src/index.ts` - モジュールエクスポート定義

## 3) Claims と根拠の対応（レビューの主戦場）

### makeMap.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | makeMap - カンマ区切り文字列からマップ関数が生成される | E-01 L10-13: `str.split(',')` でマップ生成、`val in map` で判定 | ○ |
| C-002 | makeMap - マップに存在しないキーでfalseが返る | E-01 L13: `val in map` が false を返す | ○ |
| C-003 | makeMap - 空文字列で空文字キーのマップが生成される | E-01 L12: `''.split(',')` は `['']` を返すためmap[''] = 1 | ○ |
| C-004 | makeMap - 単一要素でマップが正しく生成される | E-01 L12: split結果が1要素の配列となる | ○ |

### general.ts - 型判定関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-005 | isOn - 'onClick'でtrueが返る | E-02 L15-19: charCodeAt(0)=111('o'), charCodeAt(1)=110('n'), charCodeAt(2)=67('C') < 97 | ○ |
| C-006 | isOn - 'onclick'でfalseが返る | E-02 L19: charCodeAt(2)=99('c')は97-122の範囲内のためfalse | ○ |
| C-007 | isOn - 'click'でfalseが返る | E-02 L16: charCodeAt(0)=99 !== 111 | ○ |
| C-008 | isOn - 'on'のみでfalseが返る | E-02 L19: charCodeAt(2)はundefined、比較結果がfalse | ○ |
| C-009 | isOn - 非ASCII文字でtrueが返る | E-02 L19: charCodeAt(2) > 122 のケース | ○ |
| C-010 | isModelListener - 'onUpdate:modelValue'でtrue | E-02 L22: `key.startsWith('onUpdate:')` | ○ |
| C-011 | isModelListener - 'onClick'でfalse | E-02 L22: startsWith判定で不一致 | ○ |
| C-012 | remove - 要素が削除される | E-02 L26-31: indexOf > -1 で splice(i, 1) | ○ |
| C-013 | remove - 存在しない要素で変更なし | E-02 L28: indexOf返却値が-1でsplice未実行 | ○ |
| C-014 | remove - 空配列で変更なし | E-02 L27: indexOf返却値が-1 | ○ |
| C-015 | remove - 先頭要素の削除 | E-02 L27-29: indexOf(1)=0, splice(0,1) | ○ |
| C-016 | remove - 末尾要素の削除 | E-02 L27-29: indexOf(3)=2, splice(2,1) | ○ |
| C-017 | hasOwn - 存在するキーでtrue | E-02 L34-37: hasOwnProperty.call(val, key) | ○ |
| C-018 | hasOwn - 存在しないキーでfalse | E-02 L34-37 | ○ |
| C-019 | hasOwn - プロトタイプチェーン上のキーでfalse | E-02 L33: Object.prototype.hasOwnProperty使用 | ○ |
| C-020 | hasOwn - Symbolキーに対応 | E-02 L36: key引数がstring | symbolを受け付ける | ○ |
| C-021 | isArray - 配列でtrue | E-02 L39: Array.isArrayのラッパー | ○ |
| C-022 | isArray - 非配列でfalse | E-02 L39 | ○ |
| C-023 | isMap - Mapでtrue | E-02 L40-41: toTypeString === '[object Map]' | ○ |
| C-024 | isMap - 非Mapでfalse | E-02 L40-41 | ○ |
| C-025 | isSet - Setでtrue | E-02 L42-43: toTypeString === '[object Set]' | ○ |
| C-026 | isSet - 非Setでfalse | E-02 L42-43 | ○ |
| C-027 | isDate - Dateでtrue | E-02 L45-46: toTypeString === '[object Date]' | ○ |
| C-028 | isDate - 非Dateでfalse | E-02 L45-46 | ○ |
| C-029 | isRegExp - RegExpでtrue | E-02 L47-48: toTypeString === '[object RegExp]' | ○ |
| C-030 | isRegExp - 非RegExpでfalse | E-02 L47-48 | ○ |
| C-031 | isFunction - 関数でtrue | E-02 L49-50: typeof val === 'function' | ○ |
| C-032 | isFunction - 非関数でfalse | E-02 L49-50 | ○ |
| C-033 | isString - 文字列でtrue | E-02 L51: typeof val === 'string' | ○ |
| C-034 | isString - 非文字列でfalse | E-02 L51 | ○ |
| C-035 | isSymbol - Symbolでtrue | E-02 L52: typeof val === 'symbol' | ○ |
| C-036 | isSymbol - 非Symbolでfalse | E-02 L52 | ○ |
| C-037 | isObject - オブジェクトでtrue | E-02 L53-54: val !== null && typeof val === 'object' | ○ |
| C-038 | isObject - 配列でtrue | E-02 L53-54: typeof [] === 'object' | ○ |
| C-039 | isObject - nullでfalse | E-02 L53: val !== null の条件 | ○ |
| C-040 | isObject - プリミティブでfalse | E-02 L54: typeof 42 === 'number' | ○ |
| C-041 | isPromise - Promiseでtrue | E-02 L56-62: isObject && isFunction(.then) && isFunction(.catch) | ○ |
| C-042 | isPromise - thenableでtrue | E-02 L56-62: then/catchがfunctionならtrue | ○ |
| C-043 | isPromise - 非Promiseでfalse | E-02 L59-60: then/catchが存在しない | ○ |
| C-044 | toTypeString - オブジェクト | E-02 L64-67: Object.prototype.toString.call({}) | ○ |
| C-045 | toTypeString - 配列 | E-02 L64-67 | ○ |
| C-046 | toRawType - オブジェクト | E-02 L69-72: slice(8, -1)で'Object' | ○ |
| C-047 | toRawType - Map | E-02 L69-72 | ○ |
| C-048 | toRawType - null | E-02 L69-72: '[object Null]'.slice(8,-1) = 'Null' | ○ |
| C-049 | isPlainObject - プレーンオブジェクトでtrue | E-02 L74-75 | ○ |
| C-050 | isPlainObject - 配列でfalse | E-02 L74-75: '[object Array]' !== '[object Object]' | ○ |
| C-051 | isPlainObject - Dateでfalse | E-02 L74-75 | ○ |
| C-052 | isIntegerKey - '0'でtrue | E-02 L77-81 | ○ |
| C-053 | isIntegerKey - '123'でtrue | E-02 L77-81 | ○ |
| C-054 | isIntegerKey - '-1'でfalse | E-02 L80: key[0] !== '-' 条件 | ○ |
| C-055 | isIntegerKey - 'NaN'でfalse | E-02 L79: key !== 'NaN' 条件 | ○ |
| C-056 | isIntegerKey - '1.5'でfalse | E-02 L81: parseInt('1.5')='1' !== '1.5' | ○ |
| C-057 | isIntegerKey - 非文字列でfalse | E-02 L78: isString(key)がfalse | ○ |

### general.ts - 予約語・ビルトイン判定
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-058 | isReservedProp - 'key'でtrue | E-02 L83-89: makeMapの引数文字列に'key'が含まれる | ○ |
| C-059 | isReservedProp - 'ref'でtrue | E-02 L83-89 | ○ |
| C-060 | isReservedProp - 'class'でfalse | E-02 L83-89: 'class'は含まれない | ○ |
| C-061 | isBuiltInDirective - 'if'でtrue | E-02 L91-94: makeMapの引数に'if'が含まれる | ○ |
| C-062 | isBuiltInDirective - 'custom'でfalse | E-02 L91-94 | ○ |

### general.ts - 文字列変換関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-063 | camelize - ケバブケースがキャメルケースに変換 | E-02 L104-112: `/-\w/g` にマッチし `c.slice(1).toUpperCase()` | ○ |
| C-064 | camelize - ハイフンなしはそのまま | E-02 L104: 正規表現にマッチしない | ○ |
| C-065 | camelize - 複数ハイフン | E-02 L104: グローバルフラグで全置換 | ○ |
| C-066 | camelize - キャッシュ確認 | E-02 L96-102: cacheStringFunction内部のcache変数 | △ |
| C-067 | hyphenate - キャメルケースがケバブケースに変換 | E-02 L114-119: `/\B([A-Z])/g` で大文字の前にハイフン挿入し小文字化 | ○ |
| C-068 | hyphenate - 小文字のみはそのまま | E-02 L114: 正規表現にマッチしない | ○ |
| C-069 | hyphenate - 連続大文字の変換 | E-02 L114-119: `\B`は単語境界でない位置、連続大文字の具体的変換結果は要確認 | △ |
| C-070 | capitalize - 先頭大文字化 | E-02 L125-128: `str.charAt(0).toUpperCase() + str.slice(1)` | ○ |
| C-071 | capitalize - 空文字列 | E-02 L126: charAt(0)は''、toUpperCase()も''、slice(1)も'' | ○ |
| C-072 | capitalize - 既に大文字 | E-02 L126: 'H'.toUpperCase() === 'H' | ○ |
| C-073 | toHandlerKey - イベント名変換 | E-02 L133-140: `on${capitalize(str)}` | ○ |
| C-074 | toHandlerKey - 空文字列 | E-02 L137: `str ? ... : ''` で空文字返却 | ○ |

### general.ts - 比較・実行ユーティリティ
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-075 | hasChanged - 異なる値でtrue | E-02 L143-144: `!Object.is(1, 2)` = true | ○ |
| C-076 | hasChanged - 同じ値でfalse | E-02 L143-144: `!Object.is(1, 1)` = false | ○ |
| C-077 | hasChanged - NaN同士でfalse | E-02 L143-144: `Object.is(NaN, NaN)` = true → !true = false | ○ |
| C-078 | hasChanged - +0と-0でtrue | E-02 L143-144: `Object.is(0, -0)` = false → !false = true | ○ |
| C-079 | invokeArrayFns - 全関数呼び出し | E-02 L146-150: forループで全関数実行 | ○ |
| C-080 | invokeArrayFns - 引数渡し | E-02 L146: `...arg`でrest parameters | ○ |
| C-081 | invokeArrayFns - 空配列 | E-02 L147: length=0のためループ未実行 | ○ |
| C-082 | def - 列挙不可プロパティ定義 | E-02 L152-164: `enumerable: false` | ○ |
| C-083 | def - writable=true | E-02 L157: writable引数 | ○ |
| C-084 | def - writable=false（デフォルト） | E-02 L157: `writable = false` デフォルト | ○ |

### general.ts - 数値変換
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-085 | looseToNumber - 数値文字列変換 | E-02 L170-173: `parseFloat('123')` = 123 | ○ |
| C-086 | looseToNumber - 先頭数値抽出 | E-02 L171: `parseFloat('123-foo')` = 123 | ○ |
| C-087 | looseToNumber - 変換不可でそのまま | E-02 L172: isNaN(NaN)でval返却 | ○ |
| C-088 | toNumber - 数値文字列変換 | E-02 L179-182: `Number('123')` = 123 | ○ |
| C-089 | toNumber - 非厳密数値でそのまま | E-02 L180: `Number('123-foo')` = NaN → val返却 | ○ |
| C-090 | toNumber - 非文字列でそのまま | E-02 L180: isString(true) = false → NaN → val返却 | ○ |

### general.ts - その他
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-091 | getGlobalThis - グローバルオブジェクト返却 | E-02 L188-202: globalThis/self/window/globalのフォールバック | △ |
| C-092 | genPropsAccessExp - ドット記法 | E-02 L206-209: identRE.test('foo') = true | ○ |
| C-093 | genPropsAccessExp - ブラケット記法 | E-02 L206-209: identRE.test('foo-bar') = false | ○ |
| C-094 | genPropsAccessExp - 数字始まり | E-02 L204: identREが`^[_$a-zA-Z...]`のため不一致 | ○ |
| C-095 | genCacheKey - キー生成 | E-02 L212-219: source + JSON.stringify(options, replacer) | ○ |
| C-096 | genCacheKey - 関数含むオプション | E-02 L215-216: typeof val === 'function' ? val.toString() | ○ |
| C-097 | NOOP - undefined返却 | E-02 L8: `(): void => {}` | ○ |
| C-098 | NO - false返却 | E-02 L13: `() => false` | ○ |

### looseEqual.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-099 | looseEqual - 同一プリミティブでtrue | E-03 L13: `a === b` | ○ |
| C-100 | looseEqual - 異なるプリミティブでfalse | E-03 L52: `String(a) === String(b)` | ○ |
| C-101 | looseEqual - 同一Dateでtrue | E-03 L14-17: getTime比較 | ○ |
| C-102 | looseEqual - 異なるDateでfalse | E-03 L17: getTime不一致 | ○ |
| C-103 | looseEqual - DateとnonDateでfalse | E-03 L17: aValidType && bValidType が false | ○ |
| C-104 | looseEqual - 同一Symbolでtrue | E-03 L22: `a === b` | ○ |
| C-105 | looseEqual - 異なるSymbolでfalse | E-03 L22: 異なるSymbolインスタンスは !== | ○ |
| C-106 | looseEqual - 同一配列でtrue | E-03 L3-9: looseCompareArrays | ○ |
| C-107 | looseEqual - 異なる配列でfalse | E-03 L7: 要素のlooseEqual比較で不一致 | ○ |
| C-108 | looseEqual - 長さ異なる配列でfalse | E-03 L4: `a.length !== b.length` | ○ |
| C-109 | looseEqual - 配列と非配列でfalse | E-03 L27: aValidType && bValidType がfalse | ○ |
| C-110 | looseEqual - 同一オブジェクトでtrue | E-03 L29-51: キー数比較 + 各キーのlooseEqual | ○ |
| C-111 | looseEqual - 異なるオブジェクトでfalse | E-03 L46: `!looseEqual(a[key], b[key])` | ○ |
| C-112 | looseEqual - キー数異なるオブジェクトでfalse | E-03 L37: `aKeysCount !== bKeysCount` | ○ |
| C-113 | looseEqual - ネストオブジェクトでtrue | E-03 L46: 再帰的looseEqual呼び出し | ○ |
| C-114 | looseEqual - オブジェクトと非オブジェクトでfalse | E-03 L32: `!aValidType || !bValidType` | ○ |
| C-115 | looseEqual - 文字列の緩い比較 | E-03 L52: `String(a) === String(b)` | ○ |
| C-116 | looseIndexOf - 一致要素のインデックス | E-03 L55-57: findIndexでlooseEqual | ○ |
| C-117 | looseIndexOf - 不一致で-1 | E-03 L56: findIndexが-1を返す | ○ |
| C-118 | looseIndexOf - 空配列で-1 | E-03 L56: 空配列のfindIndexは-1 | ○ |

### normalizeProp.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-119 | normalizeStyle - 配列マージ | E-04 L8-21: isArray分岐でfor文マージ | ○ |
| C-120 | normalizeStyle - 文字列そのまま | E-04 L22: isString(value)でvalue返却 | ○ |
| C-121 | normalizeStyle - オブジェクトそのまま | E-04 L22: isObject(value)でvalue返却 | ○ |
| C-122 | normalizeStyle - undefinedでundefined | E-04 L7-24: どの条件にも該当せずundefined | ○ |
| C-123 | normalizeStyle - nullでundefined | E-04 L7-24: isArrayもisStringもisObjectもfalse | ○ |
| C-124 | normalizeStyle - 配列内文字列パース | E-04 L12-13: isString(item)でparseStringStyle | ○ |
| C-125 | parseStringStyle - CSSパース | E-04 L31-43: セミコロンsplit → コロンsplit | ○ |
| C-126 | parseStringStyle - コメント除去 | E-04 L29,33: styleCommentRE.replace | ○ |
| C-127 | parseStringStyle - 空文字列 | E-04 L33-37: split結果が['']、item空文字でスキップ | ○ |
| C-128 | parseStringStyle - コロン含む値 | E-04 L28,38-39: `/:([^]+)/` で最初のコロン以降を全て値として取得 | △ |
| C-129 | stringifyStyle - オブジェクトからCSS | E-04 L45-61: forループでkey:value;形式 | ○ |
| C-130 | stringifyStyle - CSS変数 | E-04 L55: `key.startsWith('--')` でキーそのまま | ○ |
| C-131 | stringifyStyle - 数値 | E-04 L54: typeof value === 'number' 条件あり | ○ |
| C-132 | stringifyStyle - undefinedで空文字 | E-04 L48: `!styles` でtrue | ○ |
| C-133 | stringifyStyle - 文字列でそのまま | E-04 L49: isString(styles)でstyles返却 | ○ |
| C-134 | stringifyStyle - nullやbooleanスキップ | E-04 L54: isString(value) || typeof value === 'number' のみ | ○ |
| C-135 | normalizeClass - 文字列そのまま | E-04 L65: isString(value)でres = value | ○ |
| C-136 | normalizeClass - 配列結合 | E-04 L67-72: forループで再帰呼び出し + スペース結合 | ○ |
| C-137 | normalizeClass - オブジェクトtruthyキー | E-04 L74-78: `value[name]` がtruthy時のみres += name | ○ |
| C-138 | normalizeClass - ネスト処理 | E-04 L69: 再帰的normalizeClass呼び出し | ○ |
| C-139 | normalizeClass - 空配列 | E-04 L67-72: ループ未実行、res=''、trim()で'' | ○ |
| C-140 | normalizeClass - undefined | E-04 L64-81: どの条件にも該当せず res='' | ○ |
| C-141 | normalizeProps - classとstyle正規化 | E-04 L84-96: normalizeClassとnormalizeStyle適用 | ○ |
| C-142 | normalizeProps - nullでnull | E-04 L87: `!props` でnull返却 | ○ |
| C-143 | normalizeProps - 文字列classそのまま | E-04 L89: `!isString(klass)` 条件でスキップ | ○ |

### toDisplayString.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-144 | toDisplayString - 文字列そのまま | E-05 L25-26: isString(val) ? val | ○ |
| C-145 | toDisplayString - nullで空文字 | E-05 L27-28: val == null ? '' | ○ |
| C-146 | toDisplayString - undefinedで空文字 | E-05 L27-28: val == null (undefinedも該当) | ○ |
| C-147 | toDisplayString - 数値のString変換 | E-05 L35: String(val) | ○ |
| C-148 | toDisplayString - オブジェクトのJSON化 | E-05 L34: JSON.stringify(val, replacer, 2) | ○ |
| C-149 | toDisplayString - 配列のJSON化 | E-05 L29-34: isArray(val)でJSON.stringify | ○ |
| C-150 | toDisplayString - Mapカスタムフォーマット | E-05 L41-50: replacer内でMap処理 | ○ |
| C-151 | toDisplayString - Setカスタムフォーマット | E-05 L51-53: replacer内でSet処理 | ○ |
| C-152 | toDisplayString - booleanのString変換 | E-05 L35: toString !== objectToString のためString(val) | ○ |
| C-153 | toDisplayString - Symbolの文字列化 | E-05 L35: String(Symbol('test')) = 'Symbol(test)' | ○ |

### escapeHtml.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-154 | escapeHtml - 特殊文字なしでそのまま | E-06 L7-8: `!match` でstr返却 | ○ |
| C-155 | escapeHtml - ダブルクォートエスケープ | E-06 L17: charCode 34 → '&quot;' | ○ |
| C-156 | escapeHtml - アンパサンドエスケープ | E-06 L19: charCode 38 → '&amp;' | ○ |
| C-157 | escapeHtml - シングルクォートエスケープ | E-06 L21: charCode 39 → '&#39;' | ○ |
| C-158 | escapeHtml - <エスケープ | E-06 L23: charCode 60 → '&lt;' | ○ |
| C-159 | escapeHtml - >エスケープ | E-06 L25: charCode 62 → '&gt;' | ○ |
| C-160 | escapeHtml - 複数特殊文字 | E-06 L15-42: forループで全文字走査 | ○ |
| C-161 | escapeHtml - 空文字列 | E-06 L4: `'' + string` = ''、matchなし | ○ |
| C-162 | escapeHtml - 非文字列変換 | E-06 L4: `'' + string` で文字列化 | ○ |
| C-163 | escapeHtmlComment - コメント除去 | E-06 L48,50-51: commentStripRE.replace | ○ |
| C-164 | escapeHtmlComment - -->除去 | E-06 L48: 正規表現に`-->`が含まれる | ○ |
| C-165 | escapeHtmlComment - --!>除去 | E-06 L48: 正規表現に`--!>`が含まれる | ○ |
| C-166 | escapeHtmlComment - 通常文字列そのまま | E-06 L51: replaceでマッチなし | ○ |
| C-167 | getEscapedCssVarName - シングルエスケープ | E-06 L57-63: doubleEscape=false で `\\${s}` | ○ |
| C-168 | getEscapedCssVarName - ダブルエスケープ | E-06 L62: doubleEscape=true で `\\\\${s}` | ○ |
| C-169 | getEscapedCssVarName - 特殊文字なし | E-06 L61: cssVarNameEscapeSymbolsREにマッチしない | ○ |
| C-170 | getEscapedCssVarName - ダブルクォート特殊処理 | E-06 L62: `s === '"'` で `'\\\\\\"'` | ○ |

### codeframe.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-171 | generateCodeFrame - コードフレーム生成 | E-07 L3-64: 行分割 → 範囲計算 → フォーマット | ○ |
| C-172 | generateCodeFrame - アンダーライン位置 | E-07 L50: `'^'.repeat(length)` | ○ |
| C-173 | generateCodeFrame - 複数行ハイライト | E-07 L51-56: j > i のケースで追加アンダーライン | ○ |
| C-174 | generateCodeFrame - start===endで長さ1 | E-07 L48: `Math.max(1, ...)` | ○ |
| C-175 | generateCodeFrame - start > endで空文字 | E-07 L12: `if (start > end) return ''` | ○ |
| C-176 | generateCodeFrame - 負のstartをクランプ | E-07 L9: `Math.max(0, Math.min(start, source.length))` | ○ |
| C-177 | generateCodeFrame - endがソース長超過をクランプ | E-07 L10: `Math.max(0, Math.min(end, source.length))` | ○ |
| C-178 | generateCodeFrame - 空文字列ソース | E-07 L9-12: start=0, end=0, start > end は false だがlinesが['']でcount=0 | ○ |
| C-179 | generateCodeFrame - CRLF改行 | E-07 L18: `/(\r?\n)/` で\r\nに対応 | △ |

### globalsAllowList.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-180 | isGloballyAllowed - 'Math'でtrue | E-11 L4-6: GLOBALS_ALLOWED文字列に'Math'含む | ○ |
| C-181 | isGloballyAllowed - 'window'でfalse | E-11 L4-6: 'window'は含まれない | ○ |
| C-182 | isGloballyAllowed - 'console'でtrue | E-11 L6: 'console'が含まれる | ○ |

### domTagConfig.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-183 | isHTMLTag - 'div'でtrue | E-12 L8: HTML_TAGSに'div'含む | ○ |
| C-184 | isHTMLTag - カスタム要素でfalse | E-12 L7-15: HTML_TAGSに含まれない | ○ |
| C-185 | isSVGTag - 'svg'でtrue | E-12 L19: SVG_TAGSに'svg'含む | ○ |
| C-186 | isSVGTag - 'div'でfalse | E-12 L18-28: SVG_TAGSに'div'含まれない | ○ |
| C-187 | isMathMLTag - 'math'でtrue | E-12 L31: MATH_TAGSに'math'含む | ○ |
| C-188 | isMathMLTag - 'div'でfalse | E-12 L30-36 | ○ |
| C-189 | isVoidTag - 'br'でtrue | E-12 L39: VOID_TAGSに'br'含む | ○ |
| C-190 | isVoidTag - 'img'でtrue | E-12 L39 | ○ |
| C-191 | isVoidTag - 'div'でfalse | E-12 L39: 'div'は含まれない | ○ |

### domAttrConfig.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-192 | isSpecialBooleanAttr - 'itemscope'でtrue | E-13 L14: specialBooleanAttrsに含む | ○ |
| C-193 | isSpecialBooleanAttr - 'disabled'でfalse | E-13 L14: specialBooleanAttrsに含まない | ○ |
| C-194 | isBooleanAttr - 'disabled'でtrue | E-13 L22-26: 追加リストに'disabled'含む | ○ |
| C-195 | isBooleanAttr - 'checked'でtrue | E-13 L25 | ○ |
| C-196 | isBooleanAttr - 'class'でfalse | E-13 L21-26: 'class'は含まれない | ○ |
| C-197 | includeBooleanAttr - truthyでtrue | E-13 L32-34: `!!value` | ○ |
| C-198 | includeBooleanAttr - 空文字でtrue | E-13 L33: `value === ''` 条件 | ○ |
| C-199 | includeBooleanAttr - falseでfalse | E-13 L33: !!false=false, false!=='' | ○ |
| C-200 | includeBooleanAttr - nullでfalse | E-13 L33: !!null=false, null!=='' | ○ |
| C-201 | includeBooleanAttr - undefinedでfalse | E-13 L33 | ○ |
| C-202 | isSSRSafeAttrName - 安全名でtrue | E-13 L39-47: unsafeAttrCharREにマッチしない | ○ |
| C-203 | isSSRSafeAttrName - '>'含むでfalse | E-13 L36: unsafeAttrCharREに'>'含む | ○ |
| C-204 | isSSRSafeAttrName - スペース含むでfalse | E-13 L36: unsafeAttrCharREに`\u0020`含む | ○ |
| C-205 | isSSRSafeAttrName - ダブルクォート含むでfalse | E-13 L36: unsafeAttrCharREに`"`含む | ○ |
| C-206 | isSSRSafeAttrName - キャッシュ確認 | E-13 L37,40: attrValidationCache、内部状態の直接検証は困難 | △ |
| C-207 | isRenderableAttrValue - 文字列でtrue | E-13 L148-154: type === 'string' | ○ |
| C-208 | isRenderableAttrValue - 数値でtrue | E-13 L153: type === 'number' | ○ |
| C-209 | isRenderableAttrValue - booleanでtrue | E-13 L153: type === 'boolean' | ○ |
| C-210 | isRenderableAttrValue - nullでfalse | E-13 L149-150: value == null で false返却 | ○ |
| C-211 | isRenderableAttrValue - undefinedでfalse | E-13 L149-150 | ○ |
| C-212 | isRenderableAttrValue - オブジェクトでfalse | E-13 L152-153: typeが'object'でいずれの条件にも不一致 | ○ |
| C-213 | isKnownHtmlAttr - 'class'でtrue | E-13 L66: 'class'が含まれる | ○ |
| C-214 | isKnownHtmlAttr - 未知属性でfalse | E-13 L63-79 | ○ |
| C-215 | isKnownSvgAttr - 'viewBox'でtrue | E-13 L120: 'viewBox'が含まれる | ○ |
| C-216 | isKnownSvgAttr - 未知属性でfalse | E-13 L84-124 | ○ |
| C-217 | isKnownMathMLAttr - 'accent'でtrue | E-13 L131: 'accent'が含まれる | ○ |
| C-218 | isKnownMathMLAttr - 未知属性でfalse | E-13 L129-143 | ○ |

### cssVars.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-219 | normalizeCssVarValue - 文字列そのまま | E-14 L10-11: typeof value === 'string' で value返却 | ○ |
| C-220 | normalizeCssVarValue - nullで'initial' | E-14 L6-8: value == null で 'initial' | ○ |
| C-221 | normalizeCssVarValue - undefinedで'initial' | E-14 L6-8: value == null | ○ |
| C-222 | normalizeCssVarValue - 空文字で' ' | E-14 L11: value === '' ? ' ' : value | ○ |
| C-223 | normalizeCssVarValue - 数値で文字列化 | E-14 L22: String(value) | ○ |
| C-224 | normalizeCssVarValue - NaNでString(NaN) | E-14 L14,22: !Number.isFinite(NaN)、String(NaN) | ○ |
| C-225 | normalizeCssVarValue - Infinityで文字列化 | E-14 L14,22: !Number.isFinite(Infinity) | ○ |
| C-226 | normalizeCssVarValue - オブジェクトで文字列化 | E-14 L14,22: typeof !== 'number'かつ!Number.isFinite | ○ |

### patchFlags.ts / slotFlags.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-227 | PatchFlagNames - TEXTで'TEXT' | E-08 L130: `[PatchFlags.TEXT]: 'TEXT'` | ○ |
| C-228 | PatchFlagNames - CACHEDで'CACHED' | E-08 L142: `[PatchFlags.CACHED]: 'CACHED'` | ○ |
| C-229 | slotFlagsText - STABLEで'STABLE' | E-10 L27: `[SlotFlags.STABLE]: 'STABLE'` | ○ |
| C-230 | slotFlagsText - DYNAMICで'DYNAMIC' | E-10 L28: `[SlotFlags.DYNAMIC]: 'DYNAMIC'` | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-066, C-206（キャッシュ動作確認）**：cacheStringFunctionおよびattrValidationCacheの内部状態はクロージャ内にあり、外部からの直接検証が困難。実際のテストでは2回呼び出しの結果一致で間接的に検証する必要がある。
  - 候補：実装の挙動テストで間接検証 / パフォーマンステストで確認
- **C-091（getGlobalThis）**：実行環境（ブラウザ / Node.js / Web Worker / その他）に依存するため、全パターンの検証にはモック化が必要。
  - 候補：globalThis / self / window / global のモック化テスト
- **C-069（hyphenate連続大文字）**：`\B`（非単語境界）の動作により連続大文字の変換結果の正確な出力が要確認。
  - 候補：実際の実行結果で検証
- **C-128（parseStringStyle コロン含む値）**：正規表現 `/:([^]+)/` は貪欲マッチだが、split使用時の挙動の詳細確認が必要。
  - 候補：URL含みのCSS値でテスト実行
- **C-179（generateCodeFrame CRLF）**：CRLF改行のオフセット計算の正確性は実行テストで確認が望ましい。
  - 候補：CRLF含むソースでのテスト実行

## 5) リスクフラグ（レビュー観点）
- **リスク0（低）**：大部分のテストケース（224/230）はソースコードの実装から直接導出可能で、根拠が明確
- **リスク1（中）**：C-066, C-206のキャッシュ動作はブラックボックス的に検証可能だが、内部状態の直接検証はできない
- **リスク1（中）**：C-069, C-128の正規表現の境界動作は、テスト実行による実測検証が望ましい
- **リスク1（中）**：C-091のgetGlobalThisは環境依存があり、全分岐のテストにはモック化が必要
- **リスク0（低）**：C-179のCRLF処理は正規表現で対応されているが、実測検証推奨

## 6) レビュアーチェックリスト（最小）
- [ ] テストID（UT-SHR-001 ～ UT-SHR-230）の連番に欠番がないこと
- [ ] 全てのpublic関数・定数がテスト対象としてカバーされていること
- [ ] 正常系・異常系・境界値のバランスが各関数で適切であること
- [ ] escapeHtml, isSSRSafeAttrName等のセキュリティ関連関数のテストケースが十分であること
- [ ] looseEqual, looseCompareArraysの再帰的比較がエッジケースを含めてカバーされていること
- [ ] normalizeCssVarValueのnull/undefined/空文字の3パターンが漏れなくカバーされていること
- [ ] hasChangedのNaN, +0/-0の特殊ケースが含まれていること
- [ ] typeUtils.ts（型定義のみ）が正しくテスト対象外とされていること
