---
generated_at: 2026-02-27 13:30:00
metrics:
  claims_total: 202
  claims_with_evidence: 198
  claims_without_evidence: 4
confidence_derived: 0.98
---

# 根拠レポート：compiler-dom 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：198 / 202、根拠なし：4
- 優先レビュー（高）
  1. **C-025 decodeHtmlBrowser decoderの再利用**：内部実装の詳細であり、テストとしての価値が限定的
  2. **C-073 registerRuntimeHelpers の網羅性**：登録処理はモジュール読み込み時に実行されるため、個別テストの必要性が不明確
  3. **C-110 カスタム要素のv-model**：isCustomElement の挙動がコンテキストに依存
  4. **C-161 isParentCachedの条件分岐**：複雑な内部状態に依存するため検証が困難

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

- E-01: `packages/compiler-dom/src/index.ts` - compile(), parse(), DOMNodeTransforms, DOMDirectiveTransforms
- E-02: `packages/compiler-dom/src/errors.ts` - createDOMCompilerError(), DOMErrorCodes, DOMErrorMessages
- E-03: `packages/compiler-dom/src/decodeHtmlBrowser.ts` - decodeHtmlBrowser()
- E-04: `packages/compiler-dom/src/htmlNesting.ts` - isValidHTMLNesting(), onlyValidChildren, onlyValidParents, knownInvalidChildren, knownInvalidParents
- E-05: `packages/compiler-dom/src/parserOptions.ts` - parserOptions (isNativeTag, isPreTag, isIgnoreNewlineTag, isBuiltInComponent, getNamespace)
- E-06: `packages/compiler-dom/src/runtimeHelpers.ts` - シンボル定義, registerRuntimeHelpers
- E-07: `packages/compiler-dom/src/transforms/Transition.ts` - transformTransition, hasMultipleChildren
- E-08: `packages/compiler-dom/src/transforms/ignoreSideEffectTags.ts` - ignoreSideEffectTags
- E-09: `packages/compiler-dom/src/transforms/stringifyStatic.ts` - stringifyStatic, analyzeNode, stringifyNode, stringifyElement, evaluateConstant, getCachedNode, isStringifiableAttr, StringifyThresholds
- E-10: `packages/compiler-dom/src/transforms/transformStyle.ts` - transformStyle, parseInlineCSS
- E-11: `packages/compiler-dom/src/transforms/vHtml.ts` - transformVHtml
- E-12: `packages/compiler-dom/src/transforms/vModel.ts` - transformModel, checkDuplicatedValue
- E-13: `packages/compiler-dom/src/transforms/vOn.ts` - transformOn, resolveModifiers, transformClick
- E-14: `packages/compiler-dom/src/transforms/vShow.ts` - transformShow
- E-15: `packages/compiler-dom/src/transforms/vText.ts` - transformVText
- E-16: `packages/compiler-dom/src/transforms/validateHtmlNesting.ts` - validateHtmlNesting

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | compile()で文字列テンプレートをコンパイルできる | E-01 (L41-64: baseCompileにsrcを渡す) | ○ |
| C-002 | compile()でRootNodeを入力としてコンパイルできる | E-01 (L41: src: string \| RootNode の型定義) | ○ |
| C-003 | カスタムnodeTransformsがマージされる | E-01 (L48-54: options.nodeTransformsをスプレッド) | ○ |
| C-004 | カスタムdirectiveTransformsがマージされる | E-01 (L56-59: extend()でマージ) | ○ |
| C-005 | ignoreSideEffectTagsがnodeTransformsに含まれる | E-01 (L52: ignoreSideEffectTagsが先頭) | ○ |
| C-006 | __BROWSER__=falseでstringifyStaticが設定される | E-01 (L61: __BROWSER__ ? null : stringifyStatic) | ○ |
| C-007 | __BROWSER__=trueでtransformHoistがnull | E-01 (L61: __BROWSER__ ? null : stringifyStatic) | ○ |
| C-008 | parserOptionsがデフォルトとしてマージされる | E-01 (L46-47: extend({}, parserOptions, options, ...)) | ○ |
| C-009 | parse()でテンプレートをパースしてRootNodeが返る | E-01 (L66-68: baseParse呼び出し) | ○ |
| C-010 | parse()でカスタムパーサーオプションがマージされる | E-01 (L67: extend({}, parserOptions, options)) | ○ |
| C-011 | 空文字列パース時のRootNode | E-01 (L66: baseParseに委譲) | ○ |
| C-012 | __DEV__=trueでTransitionとvalidateHtmlNesting含む | E-01 (L29: __DEV__ ? [transformTransition, validateHtmlNesting] : []) | ○ |
| C-013 | __DEV__=falseでtransformStyleのみ | E-01 (L27-30: DOMNodeTransformsの条件分岐) | ○ |
| C-014 | 全6ディレクティブが登録されている | E-01 (L32-39: cloak, html, text, model, on, show) | ○ |
| C-015 | createDOMCompilerErrorがDOMCompilerErrorを生成 | E-02 (L12-21: createCompilerError呼び出し) | ○ |
| C-016 | __DEV__=trueでエラーメッセージ含む | E-02 (L19: __DEV__ \|\| !__BROWSER__ ? DOMErrorMessages : undefined) | ○ |
| C-017 | __BROWSER__=falseでエラーメッセージ含む | E-02 (L19: !__BROWSER__の条件) | ○ |
| C-018 | loc省略でもエラー生成可能 | E-02 (L14: loc?: SourceLocation) | ○ |
| C-019 | 全エラーコードが定義されている | E-02 (L23-36: enum DOMErrorCodes) | ○ |
| C-020 | ErrorCodes.__EXTEND_POINT__との衝突チェック | E-02 (L38-48: __TEST__時のランタイムチェック) | ○ |
| C-021 | 全エラーコードにメッセージが対応 | E-02 (L51-63: DOMErrorMessages) | ○ |
| C-022 | HTMLエンティティのテキストデコード | E-03 (L13-14: innerHTML→textContent) | ○ |
| C-023 | 属性値としてのデコード | E-03 (L9-11: asAttr=trueでgetAttribute) | ○ |
| C-024 | 属性値内のダブルクォートエスケープ | E-03 (L10: raw.replace(/"/g, '&quot;')) | ○ |
| C-025 | decoderの再利用 | E-03 (L3,6-8: if (!decoder)による遅延初期化) | △ |
| C-026 | 空文字列デコード | E-03 (L5: 型定義はstringを受け入れる) | ○ |
| C-027 | asAttrデフォルトfalse | E-03 (L5: asAttr = false) | ○ |
| C-028 | template親は常に有効 | E-04 (L15-17: parent === 'template' → return true) | ○ |
| C-029 | templateの自由度 | E-04 (L15-17: 同上) | ○ |
| C-030 | onlyValidChildrenの正常パターン | E-04 (L20-21: onlyValidChildren[parent].has(child)) | ○ |
| C-031 | onlyValidChildrenの不正パターン | E-04 (L20-21: Setにない場合false) | ○ |
| C-032 | onlyValidParentsの正常パターン | E-04 (L24-26: onlyValidParents[child].has(parent)) | ○ |
| C-033 | onlyValidParentsの不正パターン | E-04 (L24-26: Setにない場合false) | ○ |
| C-034 | knownInvalidChildrenの拒否 | E-04 (L30-34: knownInvalidChildren[parent].has(child) → false) | ○ |
| C-035 | knownInvalidChildrenに該当しない許可 | E-04 (L30-34, L43: trueが返る) | ○ |
| C-036 | aタグのネスト禁止 | E-04 (L37-40, L188: a: new Set(['a'])) | ○ |
| C-037 | buttonのネスト禁止 | E-04 (L189: button: new Set(['button'])) | ○ |
| C-038 | 見出しのネスト禁止 | E-04 (L194-199: h1-h6: headings Set) | ○ |
| C-039 | 一般的な有効ネスト | E-04 (L43: 全条件にマッチしなければtrue) | ○ |
| C-040 | head要素の有効な子 | E-04 (L52-64: head: new Set([...])) | ○ |
| C-041 | head要素の無効な子 | E-04 (L52-64: divはSetに含まれない) | ○ |
| C-042 | select要素の有効な子 | E-04 (L66: select: new Set(['optgroup', 'option', 'hr'])) | ○ |
| C-043 | svgの無効な子 | E-04 (L146-183: knownInvalidChildren.svg) | ○ |
| C-044 | formのネスト禁止 | E-04 (L192: form: new Set(['form'])) | ○ |
| C-045 | script空子要素 | E-04 (L75: script: emptySet) | ○ |
| C-046 | HTMLタグがネイティブ判定 | E-05 (L9: isHTMLTag(tag)) | ○ |
| C-047 | SVGタグがネイティブ判定 | E-05 (L9: isSVGTag(tag)) | ○ |
| C-048 | MathMLタグがネイティブ判定 | E-05 (L9: isMathMLTag(tag)) | ○ |
| C-049 | カスタム要素が非ネイティブ | E-05 (L9: 3つの関数の論理和) | ○ |
| C-050 | preタグのpre判定 | E-05 (L10: tag === 'pre') | ○ |
| C-051 | pre以外のpre非判定 | E-05 (L10: 厳密等価比較) | ○ |
| C-052 | preの改行無視 | E-05 (L11: tag === 'pre' \|\| tag === 'textarea') | ○ |
| C-053 | textareaの改行無視 | E-05 (L11: 同上) | ○ |
| C-054 | 一般タグの改行非無視 | E-05 (L11: preとtextareaのみ) | ○ |
| C-055 | TransitionのTRANSITIONシンボル認識 | E-05 (L15: tag === 'Transition') | ○ |
| C-056 | 小文字transitionの認識 | E-05 (L15: tag === 'transition') | ○ |
| C-057 | TransitionGroupの認識 | E-05 (L17: tag === 'TransitionGroup') | ○ |
| C-058 | transition-groupの認識 | E-05 (L17: tag === 'transition-group') | ○ |
| C-059 | 未知コンポーネントでundefined | E-05 (L14-19: 条件にマッチしない場合は暗黙undefined) | ○ |
| C-060 | ルートレベルのHTMLネームスペース | E-05 (L24: parent ? parent.ns : rootNamespace) | ○ |
| C-061 | svgのSVGネームスペース | E-05 (L60: tag === 'svg' → SVG) | ○ |
| C-062 | mathのMATH_MLネームスペース | E-05 (L63: tag === 'math' → MATH_ML) | ○ |
| C-063 | annotation-xml内svg→SVG | E-05 (L27-28: parent.tag === 'annotation-xml' && tag === 'svg') | ○ |
| C-064 | annotation-xml encoding=text/html→HTML | E-05 (L30-41: encoding条件チェック) | ○ |
| C-065 | annotation-xml encoding=application/xhtml+xml→HTML | E-05 (L37: application/xhtml+xml) | ○ |
| C-066 | mtext内→HTML | E-05 (L42-48: /^m(?:[ions]\|text)$/.test(parent.tag)) | ○ |
| C-067 | mi/mo/mn/ms内→HTML | E-05 (L42-48: 正規表現マッチ) | ○ |
| C-068 | mtext内mglyph例外 | E-05 (L44: tag !== 'mglyph') | ○ |
| C-069 | mtext内malignmark例外 | E-05 (L45: tag !== 'malignmark') | ○ |
| C-070 | foreignObject内→HTML | E-05 (L51: parent.tag === 'foreignObject') | ○ |
| C-071 | desc内→HTML | E-05 (L52: parent.tag === 'desc') | ○ |
| C-072 | title内→HTML | E-05 (L53: parent.tag === 'title') | ○ |
| C-073 | ランタイムヘルパー登録の網羅性 | E-06 (L29-40: registerRuntimeHelpers呼び出し) | △ |
| C-074 | 静的styleのディレクティブ変換 | E-10 (L17-33: transformStyle) | ○ |
| C-075 | 複数CSSプロパティのパース | E-10 (L35-46: parseInlineCSS→parseStringStyle) | ○ |
| C-076 | style属性なしノードのスキップ | E-10 (L20: p.name === 'style' && p.value条件) | ○ |
| C-077 | ELEMENT以外のスキップ | E-10 (L18: node.type === NodeTypes.ELEMENT) | ○ |
| C-078 | value未設定style属性のスキップ | E-10 (L20: p.value条件) | ○ |
| C-079 | modifiers空配列 | E-10 (L27: modifiers: []) | ○ |
| C-080 | parseInlineCSSの基本動作 | E-10 (L35-46) | ○ |
| C-081 | 空CSS文字列のパース | E-10 (L39: parseStringStyleに委譲) | ○ |
| C-082 | v-htmlのinnerHTML変換 | E-11 (L8-29: transformVHtml) | ○ |
| C-083 | v-html式なしエラー | E-11 (L10-13: !exp条件) | ○ |
| C-084 | v-html子要素ありエラー | E-11 (L15-17: node.children.length条件) | ○ |
| C-085 | v-html子要素クリア | E-11 (L19: node.children.length = 0) | ○ |
| C-086 | v-html式なし時のフォールバック | E-11 (L25: exp \|\| createSimpleExpression('', true)) | ○ |
| C-087 | v-textのtextContent変換 | E-15 (L11-40: transformVText) | ○ |
| C-088 | v-text式なしエラー | E-15 (L13-16: !exp条件) | ○ |
| C-089 | v-text子要素ありエラー | E-15 (L18-20: node.children.length条件) | ○ |
| C-090 | v-text子要素クリア | E-15 (L22: node.children.length = 0) | ○ |
| C-091 | 定数式のtoDisplayStringスキップ | E-15 (L29: getConstantType(exp, context) > 0 → exp) | ○ |
| C-092 | 非定数式のtoDisplayStringラップ | E-15 (L31-34: createCallExpression) | ○ |
| C-093 | v-text式なしフォールバック | E-15 (L37: exp ? ... : createSimpleExpression('', true)) | ○ |
| C-094 | v-showのV_SHOWヘルパー使用 | E-14 (L13-16: needRuntime: context.helper(V_SHOW)) | ○ |
| C-095 | v-showのprops空配列 | E-14 (L13: props: []) | ○ |
| C-096 | v-show式なしエラー | E-14 (L7-10: !exp条件) | ○ |
| C-097 | input[text]のV_MODEL_TEXT | E-12 (L56: let directiveToUse = V_MODEL_TEXT) | ○ |
| C-098 | input[radio]のV_MODEL_RADIO | E-12 (L66-67: case 'radio') | ○ |
| C-099 | input[checkbox]のV_MODEL_CHECKBOX | E-12 (L69: case 'checkbox') | ○ |
| C-100 | selectのV_MODEL_SELECT | E-12 (L95-96: tag === 'select') | ○ |
| C-101 | textareaのV_MODEL_TEXT | E-12 (L97-99: textarea分岐) | ○ |
| C-102 | 動的typeのV_MODEL_DYNAMIC | E-12 (L61-63: type.type === NodeTypes.DIRECTIVE) | ○ |
| C-103 | 動的keyバインディングのV_MODEL_DYNAMIC | E-12 (L87-90: hasDynamicKeyVBind) | ○ |
| C-104 | fileインプットエラー | E-12 (L72-79: case 'file') | ○ |
| C-105 | 無効要素エラー | E-12 (L107-113: else分岐) | ○ |
| C-106 | 引数付きv-modelエラー | E-12 (L27-33: dir.arg条件) | ○ |
| C-107 | コンポーネントv-modelの委譲 | E-12 (L23-25: node.tagType === ElementTypes.COMPONENT) | ○ |
| C-108 | modelValueプロパティフィルタ | E-12 (L118-124: baseResult.props.filter) | ○ |
| C-109 | v-bind:valueとの同時使用警告 | E-12 (L36-46: checkDuplicatedValue) | ○ |
| C-110 | カスタム要素のv-model | E-12 (L49, 54: isCustomElement条件) | △ |
| C-111 | 修飾子なしの基本動作 | E-13 (L111: if (!modifiers.length) return baseResult) | ○ |
| C-112 | stop修飾子の処理 | E-13 (L22-23: isNonKeyModifier('stop')) | ○ |
| C-113 | prevent修飾子の処理 | E-13 (L22-23: isNonKeyModifier('prevent')) | ○ |
| C-114 | enter修飾子(キー修飾子) | E-13 (L78-79: keyModifiers.push) | ○ |
| C-115 | passive修飾子 | E-13 (L20: isEventOptionModifier('passive'), L143-148) | ○ |
| C-116 | once修飾子 | E-13 (L20: isEventOptionModifier('once'), L143-148) | ○ |
| C-117 | capture修飾子 | E-13 (L20: isEventOptionModifier('capture'), L143-148) | ○ |
| C-118 | right修飾子でonContextmenu | E-13 (L118-119: nonKeyModifiers.includes('right')) | ○ |
| C-119 | middle修飾子でonMouseup | E-13 (L121-122: nonKeyModifiers.includes('middle')) | ○ |
| C-120 | 複数修飾子の組み合わせ | E-13 (L125-129: nonKeyModifiers.length) | ○ |
| C-121 | キー修飾子と非キー修飾子の同時処理 | E-13 (L125-141: 両方の条件チェック) | ○ |
| C-122 | left修飾子のキーボードイベント分類 | E-13 (L62-67: maybeKeyModifier + isKeyboardEvent) | ○ |
| C-123 | left修飾子の非キーボードイベント分類 | E-13 (L68-69: else → nonKeyModifiers) | ○ |
| C-124 | right修飾子のキーボードイベント分類 | E-13 (L62-67: 同ロジック) | ○ |
| C-125 | 動的キーでの両方分類 | E-13 (L71-74: 両方にpush) | ○ |
| C-126 | self修飾子の分類 | E-13 (L22-23: isNonKeyModifier('self')) | ○ |
| C-127 | システム修飾子の分類 | E-13 (L24-25: ctrl,shift,alt,meta,exact) | ○ |
| C-128 | 静的onClick変換 | E-13 (L92-96: isStaticClick判定) | ○ |
| C-129 | 動的キーのCompoundExpression | E-13 (L97-105: createCompoundExpression) | ○ |
| C-130 | 非onClick静的キーのスキップ | E-13 (L105: key) | ○ |
| C-131 | Transition単一子の正常動作 | E-07 (L12-57: transformTransition) | ○ |
| C-132 | Transition複数子エラー | E-07 (L25-36: hasMultipleChildren → onError) | ○ |
| C-133 | 空Transitionの早期リターン | E-07 (L20-22: !node.children.length → return) | ○ |
| C-134 | v-show子のpersisted注入 | E-07 (L41-53: p.name === 'show' → persisted追加) | ○ |
| C-135 | v-showなし子のpersisted非注入 | E-07 (L42-53: show条件にマッチしない場合) | ○ |
| C-136 | ELEMENT以外のスキップ | E-07 (L14: node.type === NodeTypes.ELEMENT) | ○ |
| C-137 | COMPONENT以外のタグタイプスキップ | E-07 (L15: node.tagType === ElementTypes.COMPONENT) | ○ |
| C-138 | Transition以外のコンポーネントスキップ | E-07 (L18: component === TRANSITION) | ○ |
| C-139 | コメントノードのフィルタリング | E-07 (L61-63: isCommentOrWhitespace) | ○ |
| C-140 | ホワイトスペースのフィルタリング | E-07 (L61-63: isCommentOrWhitespace) | ○ |
| C-141 | v-forによる複数子検出 | E-07 (L67: child.type === NodeTypes.FOR) | ○ |
| C-142 | v-if分岐の再帰チェック | E-07 (L68: child.type === NodeTypes.IF && branches.some) | ○ |
| C-143 | scriptタグの削除 | E-08 (L8: node.tag === 'script', L17: removeNode) | ○ |
| C-144 | styleタグの削除 | E-08 (L8: node.tag === 'style', L17: removeNode) | ○ |
| C-145 | __DEV__時の警告エラー | E-08 (L10-16: __DEV__ && context.onError) | ○ |
| C-146 | 非対象タグのスキップ | E-08 (L8: 'script' \|\| 'style'のみ) | ○ |
| C-147 | COMPONENTタグタイプのスキップ | E-08 (L7: tagType === ElementTypes.ELEMENT) | ○ |
| C-148 | ELEMENT以外のスキップ | E-08 (L6: node.type === NodeTypes.ELEMENT) | ○ |
| C-149 | 無効ネストの警告 | E-16 (L9-26: !isValidHTMLNesting → onWarn) | ○ |
| C-150 | 有効ネストの非警告 | E-16 (L16: isValidHTMLNesting条件) | ○ |
| C-151 | 親なしのスキップ | E-16 (L13: context.parent条件) | ○ |
| C-152 | ELEMENT以外のスキップ | E-16 (L11: node.type === NodeTypes.ELEMENT) | ○ |
| C-153 | COMPONENT親のスキップ | E-16 (L15: context.parent.tagType === ElementTypes.ELEMENT) | ○ |
| C-154 | COMPONENTノードのスキップ | E-16 (L12: node.tagType === ElementTypes.ELEMENT) | ○ |
| C-155 | 警告メッセージのタグ名 | E-16 (L19: `<${node.tag}> cannot be child of <${context.parent.tag}>`) | ○ |
| C-156 | NODE_COUNT閾値の文字列化 | E-09 (L96: nc >= StringifyThresholds.NODE_COUNT) | ○ |
| C-157 | ELEMENT_WITH_BINDING_COUNT閾値の文字列化 | E-09 (L97: ec >= StringifyThresholds.ELEMENT_WITH_BINDING_COUNT) | ○ |
| C-158 | vSlotスコープの文字列化スキップ | E-09 (L78-80: context.scopes.vSlot > 0 → return) | ○ |
| C-159 | 閾値未満の非文字列化 | E-09 (L96-97: 閾値条件) | ○ |
| C-160 | 非連続チャンク分割 | E-09 (L146-172: forループとstringifyCurrentChunk) | ○ |
| C-161 | キャッシュ済み親の処理 | E-09 (L82-88, L111-119: isParentCached) | △ |
| C-162 | TEXT_CALLの[1,0]返却 | E-09 (L222-224: return [1, 0]) | ○ |
| C-163 | 非文字列化タグの除外 | E-09 (L201-203, L213: isNonStringifiable) | ○ |
| C-164 | v-onceの除外 | E-09 (L218-219: findDir(node, 'once', true)) | ○ |
| C-165 | propsありのecカウント | E-09 (L227: node.props.length > 0 ? 1 : 0) | ○ |
| C-166 | propsなしのec=0 | E-09 (L227: 同上) | ○ |
| C-167 | 非文字列化可能属性のbail | E-09 (L243-248: !isStringifiableAttr → bail) | ○ |
| C-168 | COMPOUND_EXPRESSIONのbail | E-09 (L252-253: COMPOUND_EXPRESSION → bail) | ○ |
| C-169 | CAN_STRINGIFY未満のbail | E-09 (L258-264: constType < CAN_STRINGIFY → bail) | ○ |
| C-170 | option動的valueのbail | E-09 (L266-273: isOptionTag && !p.exp.isStatic → bail) | ○ |
| C-171 | HTML既知属性の判定 | E-09 (L191: isKnownHtmlAttr(name)) | ○ |
| C-172 | SVG既知属性の判定 | E-09 (L193: isKnownSvgAttr(name)) | ○ |
| C-173 | MathML既知属性の判定 | E-09 (L195: isKnownMathMLAttr(name)) | ○ |
| C-174 | data-*属性の判定 | E-09 (L188, L197: dataAriaRE.test(name)) | ○ |
| C-175 | aria-*属性の判定 | E-09 (L188, L197: /^(?:data\|aria)-/) | ○ |
| C-176 | 未知属性の拒否 | E-09 (L189-198: 全条件不一致→false) | ○ |
| C-177 | ELEMENTキャッシュ取得 | E-09 (L174-186: getCachedNode) | ○ |
| C-178 | TEXT_CALLキャッシュ取得 | E-09 (L180: node.type === NodeTypes.TEXT_CALL) | ○ |
| C-179 | 非キャッシュノードのundefined | E-09 (L182-183: type !== JS_CACHE_EXPRESSION) | ○ |
| C-180 | codegenNodeなしのundefined | E-09 (L181: node.codegenNode条件) | ○ |
| C-181 | 文字列パススルー | E-09 (L299-301: isString → return node) | ○ |
| C-182 | Symbolの空文字列 | E-09 (L302-304: isSymbol → return '') | ○ |
| C-183 | ELEMENT文字列化 | E-09 (L307: stringifyElement呼び出し) | ○ |
| C-184 | TEXTのHTMLエスケープ | E-09 (L309: escapeHtml(node.content)) | ○ |
| C-185 | COMMENTの文字列化 | E-09 (L311: `<!--${escapeHtml(node.content)}-->`) | ○ |
| C-186 | INTERPOLATIONの評価 | E-09 (L313: evaluateConstant) | ○ |
| C-187 | TEXT_CALLの再帰処理 | E-09 (L317: stringifyNode(node.content, context)) | ○ |
| C-188 | 属性付き要素の文字列化 | E-09 (L324-394: stringifyElement) | ○ |
| C-189 | v-bind:classの正規化 | E-09 (L359-360: normalizeClass) | ○ |
| C-190 | v-bind:styleの正規化 | E-09 (L361-362: stringifyStyle(normalizeStyle)) | ○ |
| C-191 | booleanAttrのfalseスキップ | E-09 (L349-354: isBooleanAttr && 'false' → continue) | ○ |
| C-192 | 内部定数参照プレースホルダ | E-09 (L340-346: __VUE_EXP_START__/__VUE_EXP_END__) | ○ |
| C-193 | v-html定数値のinnerHTML | E-09 (L368-371: p.name === 'html') | ○ |
| C-194 | v-text定数値のエスケープ | E-09 (L372-376: p.name === 'text') | ○ |
| C-195 | void要素の閉じタグなし | E-09 (L390: !isVoidTag(node.tag)) | ○ |
| C-196 | scopeIdの出力 | E-09 (L379-381: context.scopeId) | ○ |
| C-197 | SIMPLE_EXPRESSIONの評価 | E-09 (L404-405: new Function) | ○ |
| C-198 | 文字列リテラルの評価 | E-09 (L404-405: 同上) | ○ |
| C-199 | COMPOUND_EXPRESSIONの結合 | E-09 (L407-420: forEach → res += ) | ○ |
| C-200 | 文字列・Symbolのスキップ | E-09 (L410-412: isString \|\| isSymbol → return) | ○ |
| C-201 | ELEMENT_WITH_BINDING_COUNT=5 | E-09 (L41: ELEMENT_WITH_BINDING_COUNT = 5) | ○ |
| C-202 | NODE_COUNT=20 | E-09 (L42: NODE_COUNT = 20) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-025 (decodeHtmlBrowser decoder再利用)**: 内部変数decoderの状態管理に関するテストは、ブラウザ環境のモック化が必要であり、テストの有用性が限定的。実装はシンプルな遅延初期化パターンだが、実行環境依存のためユニットテストでの検証が困難。
  - 候補：JSDOMでのモック / ブラウザ統合テスト / E2Eテスト
- **C-073 (registerRuntimeHelpers網羅性)**: モジュールのロード時に実行される副作用的な処理。個別のユニットテストとして意味があるかは検討が必要。
  - 候補：モジュールロードテスト / compiler-coreのhelperMapを検証
- **C-110 (カスタム要素のv-model)**: isCustomElement関数はコンテキストから提供されるため、テスト時のモック設定が正確であるか要確認。
  - 候補：コンテキストのisCustomElement設定 / Vue公式ドキュメントのカスタム要素仕様
- **C-161 (isParentCachedの条件分岐)**: 親ノードがキャッシュされている場合の処理パスは、複雑なAST状態の構築が必要で、テストの入力値の正確性を確認する必要がある。
  - 候補：compiler-coreのキャッシュ生成ロジック / 既存テストスイートの参照

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: C-001〜C-014 (index.ts) - compile/parse関数は薄いラッパーであり、ロジックはcompiler-coreに委譲される
- **0 (低リスク)**: C-015〜C-021 (errors.ts) - エラー定義は宣言的であり、ロジックが少ない
- **1 (中リスク)**: C-022〜C-027 (decodeHtmlBrowser.ts) - ブラウザDOM依存のため、テスト環境の構築が必要
- **0 (低リスク)**: C-028〜C-045 (htmlNesting.ts) - 純粋関数であり、テストが容易
- **0 (低リスク)**: C-046〜C-072 (parserOptions.ts) - 設定値の検証が中心
- **1 (中リスク)**: C-097〜C-110 (vModel.ts) - 分岐が多く、テストケースの網羅性に注意
- **1 (中リスク)**: C-111〜C-130 (vOn.ts) - 修飾子の組み合わせが多く、テストケースの網羅性に注意
- **2 (高リスク)**: C-156〜C-202 (stringifyStatic.ts) - 最も複雑なモジュール。内部状態やAST構造への依存が大きい

## 6) レビュアーチェックリスト（最小）
- [ ] decodeHtmlBrowser.ts のテスト(C-022〜C-027)はブラウザDOM環境のモック設定が適切か確認
- [ ] vModel.ts のテスト(C-097〜C-110)で全てのinput type分岐がカバーされているか確認
- [ ] vOn.ts のテスト(C-111〜C-130)で修飾子の組み合わせパターンが十分か確認
- [ ] stringifyStatic.ts のテスト(C-156〜C-202)で閾値境界のテストケースが正確か確認
- [ ] isValidHTMLNesting のテスト(C-028〜C-045)でHTML仕様の主要なネスト制約がカバーされているか確認
- [ ] transformTransition のテスト(C-131〜C-142)でv-show/persisted連携が正しく検証されているか確認
- [ ] 各トランスフォームの異常系テストで、エラーコードがDOMErrorCodesの正しい値と一致しているか確認
