---
generated_at: 2026-03-01 15:00:00
metrics:
  claims_total: 173
  claims_with_evidence: 169
  claims_without_evidence: 4
confidence_derived: 0.98
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：169 / 173、根拠なし：4
- 優先レビュー（高）
  1. **C-032（var()の第二引数の処理）**：decode-arbitrary-value.tsの再帰処理による推測部分あり
  2. **C-139（nullソースの処理）**：replaceObject関数のnullに対するObject.assign動作の推測
  3. **C-048（DefaultMapのキャッシュ動作）**：dimensions.tsでnull値のキャッシュ挙動が推測
  4. **C-142（デフォルト色の処理）**：replaceShadowColorsのcurrentcolorデフォルト動作の末尾追加挙動が推測

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

- E-01: `packages/tailwindcss/src/utils/brace-expansion.ts` - expand, isSequence, expandSequence関数の実装（91行）
- E-02: `packages/tailwindcss/src/utils/compare-breakpoints.ts` - compareBreakpoints関数の実装（48行）
- E-03: `packages/tailwindcss/src/utils/compare.ts` - compare関数の実装（61行）
- E-04: `packages/tailwindcss/src/utils/decode-arbitrary-value.ts` - decodeArbitraryValue, convertUnderscoresToWhitespace, recursivelyDecodeArbitraryValues関数の実装（93行）
- E-05: `packages/tailwindcss/src/utils/default-map.ts` - DefaultMapクラスの実装（20行）
- E-06: `packages/tailwindcss/src/utils/dimensions.ts` - dimensions DefaultMapインスタンスの実装（20行）
- E-07: `packages/tailwindcss/src/utils/escape.ts` - escape, unescape関数の実装（81行）
- E-08: `packages/tailwindcss/src/utils/infer-data-type.ts` - inferDataType, isLength, isPositiveInteger等の実装（371行）
- E-09: `packages/tailwindcss/src/utils/is-color.ts` - isColor関数とNAMED_COLORSセットの実装（204行）
- E-10: `packages/tailwindcss/src/utils/is-valid-arbitrary.ts` - isValidArbitrary関数の実装（93行）
- E-11: `packages/tailwindcss/src/utils/math-operators.ts` - hasMathFn, addWhitespaceAroundMathOperators関数の実装（205行）
- E-12: `packages/tailwindcss/src/utils/replace-object.ts` - replaceObject関数の実装（7行）
- E-13: `packages/tailwindcss/src/utils/replace-shadow-colors.ts` - replaceShadowColors関数の実装（48行）
- E-14: `packages/tailwindcss/src/utils/segment.ts` - segment関数の実装（102行）
- E-15: `packages/tailwindcss/src/utils/to-key-path.ts` - toKeyPath関数の実装（54行）
- E-16: `packages/tailwindcss/src/utils/topological-sort.ts` - topologicalSort関数の実装（36行）
- E-17: `packages/tailwindcss/src/utils/variables.ts` - extractUsedVariables関数の実装（18行）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | expand: 波括弧なしの文字列がそのまま返却 | E-01 (L7: `if (index === -1) return [pattern]`) | ○ |
| C-002 | expand: カンマ区切りの波括弧展開 | E-01 (L40: `segment(inside, ',')`, L43-52) | ○ |
| C-003 | expand: ネストした波括弧展開 | E-01 (L43: `parts.flatMap((part) => expand(part))` 再帰) | ○ |
| C-004 | expand: 数値シーケンス展開 | E-01 (L37-38: `isSequence` + `expandSequence`) | ○ |
| C-005 | expand: ステップ付き数値シーケンス | E-01 (L68: ステップパラメータ処理) | ○ |
| C-006 | expand: 降順数値シーケンス | E-01 (L76: `step = startNum <= endNum ? 1 : -1`) | ○ |
| C-007 | expand: 負の数値を含むシーケンス | E-01 (L71: `/^-?\d+$/` で負の数をサポート) | ○ |
| C-008 | expand: 複数の波括弧が連続する展開 | E-01 (L45-52: expandedTailとpartsの直積) | ○ |
| C-009 | expand: 閉じ括弧がない場合にエラー | E-01 (L30: `throw new Error(...)`) | ○ |
| C-010 | expand: ステップが0の場合にエラー | E-01 (L79: `throw new Error('Step cannot be zero...')`) | ○ |
| C-011 | expand: 空文字列 | E-01 (L7: `indexOf('{') === -1`でそのまま返却) | ○ |
| C-012 | expand: 波括弧内が1要素のみ | E-01 (L40: `segment(inside, ',')`で1要素) | ○ |
| C-013 | compareBreakpoints: 同じ値で0 | E-02 (L2: `if (a === z) return 0`) | ○ |
| C-014 | compareBreakpoints: 昇順で異なる数値の同単位比較 | E-02 (L28: `parseInt(a) - parseInt(z)`) | ○ |
| C-015 | compareBreakpoints: 降順で異なる数値の同単位比較 | E-02 (L28: `parseInt(z) - parseInt(a)`) | ○ |
| C-016 | compareBreakpoints: 異なる単位のバケット比較 | E-02 (L10-22: bucket計算ロジック) | ○ |
| C-017 | compareBreakpoints: CSS関数のバケット化 | E-02 (L7-8, L14-15: `indexOf('(')`でCSS関数判定、関数名で分類) | ○ |
| C-018 | compareBreakpoints: NaN時の文字列フォールバック | E-02 (L43-44: `Number.isNaN(order)`チェック) | ○ |
| C-019 | compare: 同一文字列で0 | E-03 (L60: `return a.length - z.length` = 0) | ○ |
| C-020 | compare: アルファベット順で前の文字列に負の値 | E-03 (L54: `return aCode - zCode`) | ○ |
| C-021 | compare: アルファベット順で後の文字列に正の値 | E-03 (L54: `return aCode - zCode`) | ○ |
| C-022 | compare: 数値部分が数値として比較 | E-03 (L18-47: 数字検出・Number比較ロジック) | ○ |
| C-023 | compare: 先頭ゼロの数値フォールバック | E-03 (L40-41: 文字列比較フォールバック) | ○ |
| C-024 | compare: 数字のみ文字列の数値比較 | E-03 (L35: `Number(aNumber) - Number(zNumber)`) | ○ |
| C-025 | compare: 空文字列同士で0 | E-03 (L60: `a.length - z.length` = 0 - 0) | ○ |
| C-026 | compare: 異なる長さで短い方が先 | E-03 (L60: `a.length - z.length`で差を返す) | ○ |
| C-027 | decodeArbitraryValue: アンダースコアを空白に変換 | E-04 (L35-36: `char === '_'`で空白に) | ○ |
| C-028 | decodeArbitraryValue: エスケープアンダースコア保持 | E-04 (L29-31: `\\_`をアンダースコアに) | ○ |
| C-029 | decodeArbitraryValue: 関数内アンダースコア変換 | E-04 (L48-88: recursivelyDecodeArbitraryValues) | ○ |
| C-030 | decodeArbitraryValue: url()内変換なし | E-04 (L52-56: `node.value === 'url'`で特別処理) | ○ |
| C-031 | decodeArbitraryValue: var()第一引数変換なし | E-04 (L58-74: var/theme処理、第一引数skipUnderscoreToSpace=true) | ○ |
| C-032 | decodeArbitraryValue: var()第二引数変換あり | E-04 (L65-71: i==0のみスキップ、他は再帰処理) | △ |
| C-033 | decodeArbitraryValue: 数学演算子周りに空白挿入 | E-04 (L14: `addWhitespaceAroundMathOperators`呼び出し) | ○ |
| C-034 | decodeArbitraryValue: theme()第一引数変換なし | E-04 (L61-62: `node.value === 'theme'`チェック) | ○ |
| C-035 | decodeArbitraryValue: 関数なし値の直接変換 | E-04 (L6-8: 括弧なしで早期リターン) | ○ |
| C-036 | decodeArbitraryValue: 空文字列 | E-04 (L6: `input.indexOf('(') === -1`でconvertUnderscoresToWhitespace直接) | ○ |
| C-037 | DefaultMap: ファクトリ関数でデフォルト値生成 | E-05 (L11-15: `value = this.factory(key, this)`) | ○ |
| C-038 | DefaultMap: デフォルト値がMapに保存 | E-05 (L14: `this.set(key, value)`) | ○ |
| C-039 | DefaultMap: 既存キーにファクトリ不呼び出し | E-05 (L11: `super.get(key)`でundefinedでなければ返す) | ○ |
| C-040 | DefaultMap: Map基本操作 | E-05 (L5: `extends Map<T, V>`) | ○ |
| C-041 | dimensions: 整数+単位パース | E-06 (L6-19: DIMENSION_REGEX, value/unit抽出) | ○ |
| C-042 | dimensions: 小数+単位パース | E-06 (L3: `(?:\d*\.)?\d+`で小数マッチ) | ○ |
| C-043 | dimensions: パーセント値パース | E-06 (L3: `[a-z]+|%`で%マッチ) | ○ |
| C-044 | dimensions: 単位なし数値パース | E-06 (L17: `if (unit === undefined) return [valueAsNumber, null]`) | ○ |
| C-045 | dimensions: 負の数値パース | E-06 (L3: `[-+]?`で負の値マッチ) | ○ |
| C-046 | dimensions: 不正な文字列でnull | E-06 (L8: `if (!match) return null`) | ○ |
| C-047 | dimensions: 空文字列でnull | E-06 (L8: `DIMENSION_REGEX.exec('')`はnull) | ○ |
| C-048 | dimensions: DefaultMapキャッシュ | E-06, E-05 (DefaultMapの`set`呼び出しによるキャッシュ) | △ |
| C-049 | escape: 通常文字列がそのまま返却 | E-07 (L55-66: a-z, A-Z等はそのまま) | ○ |
| C-050 | escape: 特殊文字バックスラッシュエスケープ | E-07 (L70: `result += '\\' + string.charAt(index)`) | ○ |
| C-051 | escape: 先頭数字コードポイントエスケープ | E-07 (L40-41: `index === 0 && codeUnit >= 0x0030`) | ○ |
| C-052 | escape: NULL文字をU+FFFDに置換 | E-07 (L29-32: `codeUnit === 0x0000`) | ○ |
| C-053 | escape: 制御文字コードポイントエスケープ | E-07 (L34-48: `codeUnit >= 0x0001 && codeUnit <= 0x001f`) | ○ |
| C-054 | escape: 単独ハイフンエスケープ | E-07 (L13-20: `length === 1 && firstCodeUnit === 0x002d`) | ○ |
| C-055 | escape: ハイフン+数字エスケープ | E-07 (L44: `index === 1 && ... firstCodeUnit === 0x002d`) | ○ |
| C-056 | escape: U+0080以上の文字がそのまま | E-07 (L55: `codeUnit >= 0x0080`) | ○ |
| C-057 | escape: 引数なしでTypeError | E-07 (L3-5: `arguments.length === 0`チェック) | ○ |
| C-058 | escape: 空文字列 | E-07 (L7: `let length = string.length` = 0でループなし) | ○ |
| C-059 | unescape: コードポイント復元 | E-07 (L78: `String.fromCodePoint(Number.parseInt(..., 16))`) | ○ |
| C-060 | unescape: バックスラッシュ復元 | E-07 (L76-80: 正規表現による置換) | ○ |
| C-061 | unescape: エスケープなし文字列がそのまま | E-07 (L76: 正規表現マッチなしで変換なし) | ○ |
| C-062 | unescape: 空文字列 | E-07 (L76: replace対象なしで空文字列返却) | ○ |
| C-063 | inferDataType: 色値を'color'と判定 | E-08 (L24-25: `color: isColor`) | ○ |
| C-064 | inferDataType: 長さ値を'length'と判定 | E-08 (L26: `length: isLength`) | ○ |
| C-065 | inferDataType: パーセント値を'percentage'と判定 | E-08 (L27: `percentage: isPercentage`) | ○ |
| C-066 | inferDataType: 数値を'number'と判定 | E-08 (L29: `number: isNumber`) | ○ |
| C-067 | inferDataType: 整数を'integer'と判定 | E-08 (L30: `integer: isPositiveInteger`) | ○ |
| C-068 | inferDataType: URL値を'url'と判定 | E-08 (L31: `url: isUrl`) | ○ |
| C-069 | inferDataType: 角度値を'angle'と判定 | E-08 (L41: `angle: isAngle`) | ○ |
| C-070 | inferDataType: ベクトル値を'vector'と判定 | E-08 (L42: `vector: isVector`) | ○ |
| C-071 | inferDataType: 比率を'ratio'と判定 | E-08 (L28: `ratio: isFraction`) | ○ |
| C-072 | inferDataType: 画像値を'image'と判定 | E-08 (L35: `image: isImage`) | ○ |
| C-073 | inferDataType: グラデーションを'image'と判定 | E-08 (L83-84: IS_GRADIENT_FN正規表現) | ○ |
| C-074 | inferDataType: line-widthキーワード判定 | E-08 (L34: `'line-width': isLineWidth`, L69-78) | ○ |
| C-075 | inferDataType: line-widthに数値+長さ | E-08 (L70-77: `isLength(value) || isNumber(value)`) | ○ |
| C-076 | inferDataType: generic-name判定 | E-08 (L37: `'generic-name': isGenericName`, L114-130) | ○ |
| C-077 | inferDataType: family-name判定 | E-08 (L36: `'family-name': isFamilyName`, L132-146) | ○ |
| C-078 | inferDataType: absolute-size判定 | E-08 (L38: `'absolute-size': isAbsoluteSize`, L148-159) | ○ |
| C-079 | inferDataType: relative-size判定 | E-08 (L39: `'relative-size': isRelativeSize`, L161-163) | ○ |
| C-080 | inferDataType: position判定 | E-08 (L32: `position: isBackgroundPosition`, L242-268) | ○ |
| C-081 | inferDataType: bg-size cover判定 | E-08 (L33: `'bg-size': isBackgroundSize`, L289) | ○ |
| C-082 | inferDataType: bg-size contain判定 | E-08 (L289: `size === 'cover' || size === 'contain'`) | ○ |
| C-083 | inferDataType: var()で始まる値にnull | E-08 (L48: `if (value.startsWith('var(')) return null`) | ○ |
| C-084 | inferDataType: 型不一致時にnull | E-08 (L56: `return null`) | ○ |
| C-085 | inferDataType: 最初に一致した型が返却 | E-08 (L50-54: forループで配列順にチェック) | ○ |
| C-086 | inferDataType: 空のtypes配列でnull | E-08 (L50: forループが実行されずL56でnull) | ○ |
| C-087 | isLength: 各CSS長さ単位の認識 | E-08 (L200-234: LENGTH_UNITS配列, IS_LENGTH正規表現) | ○ |
| C-088 | isLength: calc()を含む値の判定 | E-08 (L237: `hasMathFn(value)`) | ○ |
| C-089 | isLength: 不正な単位でfalse | E-08 (L234: IS_LENGTH正規表現にマッチしない) | ○ |
| C-090 | isPositiveInteger: 正の整数でtrue | E-08 (L346-348: `Number.isInteger(num) && num >= 0`) | ○ |
| C-091 | isPositiveInteger: 0でtrue | E-08 (L348: `num >= 0`で0を含む) | ○ |
| C-092 | isPositiveInteger: 負の整数でfalse | E-08 (L348: `num >= 0`でfalse) | ○ |
| C-093 | isPositiveInteger: 小数でfalse | E-08 (L348: `Number.isInteger(num)`でfalse) | ○ |
| C-094 | isPositiveInteger: 先頭ゼロでfalse | E-08 (L348: `String(num) === String(value)`でfalse) | ○ |
| C-095 | isStrictPositiveInteger: 正の整数でtrue | E-08 (L351-353: `num > 0`) | ○ |
| C-096 | isStrictPositiveInteger: 0でfalse | E-08 (L353: `num > 0`で0を除外) | ○ |
| C-097 | isValidSpacingMultiplier: 0.25倍数でtrue | E-08 (L356-358, L368-370: `isMultipleOf(value, 0.25)`) | ○ |
| C-098 | isValidSpacingMultiplier: 非0.25倍数でfalse | E-08 (L370: `num % divisor === 0`でfalse) | ○ |
| C-099 | isValidSpacingMultiplier: 負の値でfalse | E-08 (L370: `num >= 0`でfalse) | ○ |
| C-100 | isValidOpacityValue: 0.25倍数でtrue | E-08 (L360-362: `isMultipleOf(value, 0.25)`) | ○ |
| C-101 | isValidOpacityValue: 非0.25倍数でfalse | E-08 (L370: `num % divisor === 0`でfalse) | ○ |
| C-102 | isColor: ハッシュカラーコードでtrue | E-09 (L201: `value.charCodeAt(0) === HASH`) | ○ |
| C-103 | isColor: rgb関数でtrue | E-09 (L198: `IS_COLOR_FN`正規表現にrgbマッチ) | ○ |
| C-104 | isColor: rgba関数でtrue | E-09 (L198: `IS_COLOR_FN`正規表現にrgbaマッチ) | ○ |
| C-105 | isColor: hsl関数でtrue | E-09 (L198: `IS_COLOR_FN`正規表現にhslマッチ) | ○ |
| C-106 | isColor: 名前付きカラーでtrue | E-09 (L203: `NAMED_COLORS.has(value.toLowerCase())`) | ○ |
| C-107 | isColor: transparentでtrue | E-09 (L173: `'transparent'`がNAMED_COLORSに含まれる) | ○ |
| C-108 | isColor: currentcolorでtrue | E-09 (L174: `'currentcolor'`がNAMED_COLORSに含まれる) | ○ |
| C-109 | isColor: システムカラーでtrue | E-09 (L177-195: システムカラーがNAMED_COLORSに含まれる) | ○ |
| C-110 | isColor: oklch関数でtrue | E-09 (L198: `(ok)?(lab|lch)`でoklchマッチ) | ○ |
| C-111 | isColor: light-dark関数でtrue | E-09 (L198: `light-dark`がIS_COLOR_FNに含まれる) | ○ |
| C-112 | isColor: color-mix関数でtrue | E-09 (L198: `color-mix`がIS_COLOR_FNに含まれる) | ○ |
| C-113 | isColor: 非カラー値でfalse | E-09 (L200-204: 3条件すべてfalse) | ○ |
| C-114 | isColor: 大文字名前付きカラーでtrue | E-09 (L203: `value.toLowerCase()`で比較) | ○ |
| C-115 | isValidArbitrary: バランスした括弧でtrue | E-10 (L92: `return true`) | ○ |
| C-116 | isValidArbitrary: 括弧なしの値でtrue | E-10 (L92: stackPos=0のまま`return true`) | ○ |
| C-117 | isValidArbitrary: バランスした角括弧でtrue | E-10 (L64-66: `OPEN_BRACKET`でスタック操作) | ○ |
| C-118 | isValidArbitrary: 対応しない閉じ括弧でfalse | E-10 (L75: `if (stackPos === 0) return false`) | ○ |
| C-119 | isValidArbitrary: トップレベルセミコロンでfalse | E-10 (L87: `if (stackPos === 0) return false`) | ○ |
| C-120 | isValidArbitrary: ネスト内セミコロンでtrue | E-10 (L86-88: stackPos>0なのでfalseにならない) | ○ |
| C-121 | isValidArbitrary: エスケープ文字スキップ | E-10 (L37-39: `BACKSLASH`処理) | ○ |
| C-122 | isValidArbitrary: ダブルクォート内括弧無視 | E-10 (L43-58: クォート処理ロジック) | ○ |
| C-123 | isValidArbitrary: シングルクォート内括弧無視 | E-10 (L43-58: `SINGLE_QUOTE`処理) | ○ |
| C-124 | isValidArbitrary: 空文字列でtrue | E-10 (L92: ループ実行せずtrue) | ○ |
| C-125 | isValidArbitrary: 波括弧の特別処理 | E-10 (L68-71: `OPEN_CURLY`はスタックに積まない、コメント参照) | ○ |
| C-126 | hasMathFn: calc関数検出 | E-11 (L42: `MATH_FUNCTIONS.some(...)`) | ○ |
| C-127 | hasMathFn: min関数検出 | E-11 (L19-39: MATH_FUNCTIONS配列にmin含む) | ○ |
| C-128 | hasMathFn: 数学関数なしでfalse | E-11 (L42: `input.indexOf('(') !== -1`が前提) | ○ |
| C-129 | hasMathFn: 括弧なし関数名でfalse | E-11 (L42: `input.indexOf('(') !== -1`チェック) | ○ |
| C-130 | addWhitespaceAroundMathOperators: 演算子前後に空白 | E-11 (L172-189: 空白追加ロジック) | ○ |
| C-131 | addWhitespaceAroundMathOperators: 関数なしでそのまま | E-11 (L47-49: 早期リターン) | ○ |
| C-132 | addWhitespaceAroundMathOperators: 科学的記数法 | E-11 (L148-152: eE判定) | ○ |
| C-133 | addWhitespaceAroundMathOperators: ネスト関数の空白 | E-11 (L112-116: ネストparens対応) | ○ |
| C-134 | addWhitespaceAroundMathOperators: カンマ後空白 | E-11 (L131-134: `result += ', '`) | ○ |
| C-135 | addWhitespaceAroundMathOperators: 連続空白の正規化 | E-11 (L137-139: SPACE && result末尾SPACE) | ○ |
| C-136 | addWhitespaceAroundMathOperators: 符号マイナスの保持 | E-11 (L161-163: OPEN_PAREN/COMMA後は空白なし) | ○ |
| C-137 | replaceObject: ソースで置換 | E-12 (L4-6: deleteとObject.assign) | ○ |
| C-138 | replaceObject: 元プロパティ削除 | E-12 (L4: `for (let key in target) delete target[key]`) | ○ |
| C-139 | replaceObject: nullソース | E-12 (L6: `Object.assign(target, source)` nullの場合の動作) | △ |
| C-140 | replaceObject: 空オブジェクトソース | E-12 (L4-6: 全プロパティ削除後、空オブジェクトassign) | ○ |
| C-141 | replaceShadowColors: シャドウ色置換 | E-13 (L40: `shadow.replace(color, replacementColor)`) | ○ |
| C-142 | replaceShadowColors: デフォルトcurrentcolor | E-13 (L36: `replacement(color ?? 'currentcolor')`, L44: 末尾追加) | △ |
| C-143 | replaceShadowColors: insetキーワード処理 | E-13 (L3: `KEYWORDS`に'inset'含む, L15: `continue`) | ○ |
| C-144 | replaceShadowColors: 複数シャドウ処理 | E-13 (L7: `segment(input, ',').map(...)`) | ○ |
| C-145 | replaceShadowColors: x/yオフセット未検出 | E-13 (L34: `if (offsetX === null || offsetY === null) return shadow`) | ○ |
| C-146 | segment: トップレベルカンマで分割 | E-14 (L42-45: セパレータ検出とスライス) | ○ |
| C-147 | segment: 括弧内カンマ無視 | E-14 (L72-75: `OPEN_PAREN`でスタック操作) | ○ |
| C-148 | segment: 角括弧内区切り文字無視 | E-14 (L76-78: `OPEN_BRACKET`でスタック操作) | ○ |
| C-149 | segment: 波括弧内区切り文字無視 | E-14 (L80-82: `OPEN_CURLY`でスタック操作) | ○ |
| C-150 | segment: ダブルクォート内区切り文字無視 | E-14 (L56-70: クォート処理ロジック) | ○ |
| C-151 | segment: シングルクォート内区切り文字無視 | E-14 (L55-70: `SINGLE_QUOTE`処理) | ○ |
| C-152 | segment: バックスラッシュエスケープ | E-14 (L49-52: `BACKSLASH`でidx+1スキップ) | ○ |
| C-153 | segment: 空白区切りの分割 | E-14 (L37: `separatorCode = separator.charCodeAt(0)`) | ○ |
| C-154 | segment: 深くネストされた括弧 | E-14 (L72-94: stackPosによる深さ管理) | ○ |
| C-155 | segment: 空文字列 | E-14 (L99: `parts.push(input.slice(lastPos))` = '') | ○ |
| C-156 | segment: 区切り文字なし | E-14 (L99: 全体がpushされる) | ○ |
| C-157 | toKeyPath: 単一キーパス | E-15 (L23: `keypath.push(part)`) | ○ |
| C-158 | toKeyPath: ドット区切りパス分割 | E-15 (L21: `segment(path, '.')`) | ○ |
| C-159 | toKeyPath: 角括弧表記パース | E-15 (L22-25: `part.includes('[')`チェック) | ○ |
| C-160 | toKeyPath: 角括弧内ドットエスケープ | E-15 (L21: segmentでドット分割、L22-25: 括弧内は別処理) | ○ |
| C-161 | toKeyPath: 連続角括弧パース | E-15 (L29-45: whileループで連続処理) | ○ |
| C-162 | toKeyPath: 空文字列 | E-15 (L21: `segment('', '.')`で`['']`が返る) | ○ |
| C-163 | topologicalSort: 依存関係なしのソート | E-16 (L10-29: visit関数の動作) | ○ |
| C-164 | topologicalSort: 線形依存のソート | E-16 (L19-23: 依存先を先に訪問) | ○ |
| C-165 | topologicalSort: ダイヤモンド依存のソート | E-16 (L12: `seen.has(node)`で重複訪問防止) | ○ |
| C-166 | topologicalSort: 循環依存の検出 | E-16 (L15: `wip.has(node)`チェック) | ○ |
| C-167 | topologicalSort: 空グラフ | E-16 (L31-33: `graph.keys()`が空) | ○ |
| C-168 | topologicalSort: 1ノード | E-16 (L28: `sorted.push(node)`) | ○ |
| C-169 | extractUsedVariables: CSS変数名抽出 | E-17 (L4-18: walk/var検出ロジック) | ○ |
| C-170 | extractUsedVariables: 複数変数抽出 | E-17 (L5-17: variables配列へのpush) | ○ |
| C-171 | extractUsedVariables: ネストvar()抽出 | E-17 (L9-13: 内側walkで--プレフィックス検出) | ○ |
| C-172 | extractUsedVariables: var()なしで空配列 | E-17 (L5: 空の`variables`配列が返る) | ○ |
| C-173 | extractUsedVariables: 空文字列で空配列 | E-17 (L6: ValueParser.parseが空ASTを返す) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-032**: `decodeArbitraryValue`のvar()第二引数の処理について、再帰呼び出し`recursivelyDecodeArbitraryValues([node.nodes[i]])`が第二引数以降に適用されることはコードから読み取れるが、実際のValueParser.parseのAST構造により結果が変わる可能性がある
  - 候補：`packages/tailwindcss/src/value-parser.ts` のparse/toCss実装の確認
- **C-048**: DefaultMapのキャッシュ動作はDefaultMapクラスの`set`呼び出しから推測しているが、dimensions.tsのファクトリがnullを返す場合にundefinedチェックが`value === undefined`であるため、nullが正しくキャッシュされるか要確認
  - 候補：DefaultMap.get の `value === undefined` チェック挙動の実行確認
- **C-139**: `replaceObject`でsourceにnullが渡された場合の`Object.assign(target, null)`の動作はJavaScript仕様上は問題ないが、TypeScript型定義上の意図と実行結果の整合性を確認すべき
  - 候補：TypeScript型定義 / Object.assign仕様（ECMAScript）
- **C-142**: `replaceShadowColors`でcolorがnullの場合に`currentcolor`がデフォルトとして使われることは、コードのnullish coalescing（`??`）から明確だが、結果文字列のフォーマット（末尾に追加）の具体的な表現は実行時の入力に依存する
  - 候補：実際のテスト実行結果の確認

## 5) リスクフラグ（レビュー観点）
- 0: `brace-expansion.ts` - 波括弧展開のロジック。再帰処理だがテスト容易。リスク低い
- 0: `compare.ts` - 基本的な文字列比較関数。ロジックが明確でリスク低い
- 0: `compare-breakpoints.ts` - ブレークポイント比較。バケット化ロジックが明確でリスク低い
- 1: `decode-arbitrary-value.ts` - 外部モジュール（ValueParser）への依存があり、統合テストの検討が必要
- 0: `default-map.ts` - Map拡張。シンプルな実装でリスク低い
- 0: `dimensions.ts` - DefaultMapを利用した次元パース。リスク低い
- 0: `escape.ts` - CSSOM仕様に準拠した実装。仕様が明確でリスク低い
- 1: `infer-data-type.ts` - 多数のCSS値タイプの判定ロジックがあり、CSS仕様変更に伴うメンテナンスリスクあり
- 0: `is-color.ts` - 名前付きカラーのセットが固定。新しいCSS色仕様への追従が必要な場合あり
- 0: `is-valid-arbitrary.ts` - 括弧バランスチェック。共有バッファを使用しているが同期処理でリスク低い
- 0: `math-operators.ts` - 数学演算子の空白挿入。科学的記数法の特別処理に注意
- 0: `replace-object.ts` - シンプルなオブジェクト置換。リスク低い
- 1: `replace-shadow-colors.ts` - 正規表現が状態を持つ（`lastIndex`）ため、テスト順序に注意
- 0: `segment.ts` - パフォーマンス最適化のため共有バッファを使用しているが、同期処理でリスク低い
- 0: `to-key-path.ts` - パスパースロジック。segment関数に依存するが安定している
- 0: `topological-sort.ts` - 標準的なトポロジカルソート。循環依存検出あり
- 0: `variables.ts` - CSS変数抽出。ValueParserとwalkに依存するがシンプル

## 6) レビュアーチェックリスト（最小）
- [ ] `decodeArbitraryValue`のvar()処理について、ValueParserの実装（value-parser.ts）と整合性があるか確認
- [ ] `replaceObject`のnullソース処理がObject.assign仕様と一致するか確認
- [ ] `dimensions`のDefaultMapキャッシュでnull値の扱い（`value === undefined`チェック）が正しいか確認
- [ ] `replaceShadowColors`のLENGTH正規表現のlastIndex管理が正しいか確認
- [ ] `infer-data-type.ts`の各CSS値タイプ判定が最新のCSS仕様と一致しているか確認
- [ ] `is-valid-arbitrary.ts`の波括弧がスタックに積まれない意図（候補文字列`[&{color:red}]:flex`の拒否）が仕様通りか確認
- [ ] テストケースの入力値と期待結果が実際のコード動作と一致しているか確認
- [ ] 全173件のテストケースで正常系/異常系/境界値の観点が適切にカバーされているか確認
