---
generated_at: 2026-02-21 22:20:00
metrics:
  claims_total: 80
  claims_with_evidence: 80
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：legacy_fixme.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：80 / 80、根拠なし：0
- 優先レビュー（高）
  1. なし - 全テストケースがソースコードに基づいて生成されています

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

- E-01: `src/legacy_fixme/coercions.php` - PHPスタイルの型強制・比較関数群
- E-02: `src/legacy_fixme/str.php` - 文字列操作のレガシーサポート関数

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

### coercions.php - increment 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | nullをインクリメントすると1が返る | E-01 (行21-23: `if ($value is null) { return 1; }`) | ○ |
| C-02 | 数値文字列をインクリメントすると数値+1が返る | E-01 (行25-27: 数値文字列の処理) | ○ |
| C-03 | 空文字列をインクリメントすると'1'が返る | E-01 (行28-30: `if ($value === '') { return '1'; }`) | ○ |
| C-04 | 整数をインクリメントすると+1が返る | E-01 (行32-34: `++$value; return $value;`) | ○ |
| C-05 | 0をインクリメントすると1が返る | E-01 (行32-34: 整数のインクリメント処理) | ○ |
| C-06 | 浮動小数点数をインクリメントすると+1が返る | E-01 (行32-34: dynamic経由のインクリメント) | ○ |

### coercions.php - decrement 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-07 | 数値文字列をデクリメントすると数値-1が返る | E-01 (行42-44: 数値文字列の処理) | ○ |
| C-08 | 空文字列をデクリメントすると-1が返る | E-01 (行45-47: `if ($value === '') { return -1; }`) | ○ |
| C-09 | 整数をデクリメントすると-1が返る | E-01 (行50-52: `--$value; return $value;`) | ○ |
| C-10 | 0をデクリメントすると-1が返る | E-01 (行50-52: 整数のデクリメント処理) | ○ |

### coercions.php - cast_for_arithmetic 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | nullを0に変換する | E-01 (行65-67: `if ($value is null) { return 0; }`) | ○ |
| C-12 | trueを1に変換する | E-01 (行68-71: `if ($value is bool ...) { return (int)$value; }`) | ○ |
| C-13 | falseを0に変換する | E-01 (行68-71: bool変換処理) | ○ |
| C-14 | 数値文字列を数値に変換する | E-01 (行72: `\HH\str_to_numeric($value)`) | ○ |
| C-15 | 浮動小数点文字列を浮動小数点数に変換する | E-01 (行72: str_to_numeric処理) | ○ |
| C-16 | 非数値文字列を0に変換する | E-01 (行72: `?? 0`フォールバック) | ○ |

### coercions.php - cast_for_exponent 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | 配列を0に変換する | E-01 (行85-87: `if ($value is AnyArray<_, _>) { return 0; }`) | ○ |
| C-18 | nullをcast_for_arithmeticと同様に0に変換する | E-01 (行88: `return cast_for_arithmetic($value);`) | ○ |

### coercions.php - 比較関数 (lt, lte, gt, gte, cmp)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | lt: 文字列同士の比較（小なり） | E-01 (行98-99: 文字列高速パス) | ○ |
| C-20 | lt: 数値同士の比較（小なり） | E-01 (行100-101: 数値高速パス) | ○ |
| C-21 | lt: 同じ値の比較でfalseが返る | E-01 (行103: `__cast_and_compare` 委譲) | ○ |
| C-22 | lt: 異なる型の比較で暗黙キャストが行われる | E-01 (行103: `__cast_and_compare` による型強制) | ○ |
| C-23 | lte: 文字列同士の比較（以下） | E-01 (行112-113: 文字列高速パス) | ○ |
| C-24 | lte: 数値同士の比較（以下） | E-01 (行114-115: 数値高速パス) | ○ |
| C-25 | gt: 文字列同士の比較（大なり） | E-01 (行126-127: 文字列高速パス) | ○ |
| C-26 | gt: 数値同士の比較（大なり） | E-01 (行128-129: 数値高速パス) | ○ |
| C-27 | gte: 文字列同士の比較（以上） | E-01 (行140-141: 文字列高速パス) | ○ |
| C-28 | gte: 数値同士の比較（以上） | E-01 (行142-143: 数値高速パス) | ○ |
| C-29 | cmp: 同じ文字列の比較で0が返る | E-01 (行154-155: `$l <=> $r`) | ○ |
| C-30 | cmp: 左が小さい場合-1が返る | E-01 (行154-159: 三方向比較) | ○ |
| C-31 | cmp: 左が大きい場合1が返る | E-01 (行154-159: 三方向比較) | ○ |

### coercions.php - 等価関数 (eq, neq)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | eq: 同じ整数同士の比較でtrueが返る | E-01 (行170: `$l is int && $r is int`) | ○ |
| C-33 | eq: 同じ浮動小数点数同士の比較でtrueが返る | E-01 (行171: `$l is float && $r is float`) | ○ |
| C-34 | eq: 同じbool同士の比較でtrueが返る | E-01 (行172: `$l is bool && $r is bool`) | ○ |
| C-35 | eq: 同じ文字列同士の比較でtrueが返る | E-01 (行173: 文字列条件) | ○ |
| C-36 | eq: 数値文字列と数値の比較で暗黙キャストが行われる | E-01 (行177: `__cast_and_compare` 委譲) | ○ |
| C-37 | neq: 異なる整数の比較でtrueが返る | E-01 (行195: `__cast_and_compare ... !== 0`) | ○ |
| C-38 | neq: 同じ整数の比較でfalseが返る | E-01 (行191-195: 同値判定) | ○ |

### coercions.php - __cast_and_compare 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-39 | bool比較時のキャスト処理 | E-01 (行215-221: bool比較ロジック) | ○ |
| C-40 | null比較時のキャスト処理 | E-01 (行222-230: null比較ロジック) | ○ |
| C-41 | 数値と文字列の比較 | E-01 (行244-245: `\HH\str_to_numeric($l)`) | ○ |
| C-42 | NaN同士の比較 | E-01 (行429-435: NaN特殊処理) | ○ |
| C-43 | 配列同士の比較（同じサイズ） | E-01 (行325-348: vec比較ロジック) | ○ |
| C-44 | 配列同士の比較（異なるサイズ） | E-01 (行325-326: サイズ比較) | ○ |

### coercions.php - switch用キャスト関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | optional_arraykey_to_int_cast_for_switch: nullを0に変換 | E-01 (行450: `if ($value is null) return 0;`) | ○ |
| C-46 | optional_arraykey_to_int_cast_for_switch: 数値文字列を数値に変換 | E-01 (行451: `\HH\str_to_numeric($value)`) | ○ |
| C-47 | optional_arraykey_to_int_cast_for_switch: 整数をそのまま返す | E-01 (行452: `if ($value is int) return $value;`) | ○ |
| C-48 | optional_arraykey_to_int_cast_for_switch: 非整数floatはセンチネル | E-01 (行453: `SWITCH_INT_SENTINEL`) | ○ |
| C-49 | optional_num_to_int_cast_for_switch: 整数をそのまま返す | E-01 (行461: `if ($value is int) return $value;`) | ○ |
| C-50 | optional_num_to_int_cast_for_switch: nullを0に変換 | E-01 (行462: `if ($value is null) return 0;`) | ○ |
| C-51 | optional_num_to_int_cast_for_switch: 非整数floatはセンチネル | E-01 (行463: `SWITCH_INT_SENTINEL`) | ○ |
| C-52 | int_cast_for_switch: 整数をそのまま返す | E-01 (行479: `if ($value is int) return $value;`) | ○ |
| C-53 | int_cast_for_switch: nullを0に変換 | E-01 (行480: `if ($value is null) return 0;`) | ○ |
| C-54 | int_cast_for_switch: 数値文字列を数値に変換 | E-01 (行482-485: 文字列処理) | ○ |
| C-55 | int_cast_for_switch: falseを0に変換 | E-01 (行491: `if ($value === false) return 0;`) | ○ |
| C-56 | int_cast_for_switch: trueをfirst_truthyまたはセンチネルに変換 | E-01 (行492: `$first_truthy as ?int ?? SWITCH_INT_SENTINEL`) | ○ |
| C-57 | int_cast_for_switch: 整数値floatをintに変換 | E-01 (行487-488: floor比較) | ○ |
| C-58 | int_cast_for_switch: 非整数floatはセンチネル | E-01 (行488: `SWITCH_INT_SENTINEL`) | ○ |
| C-59 | string_cast_for_basic_switch: 文字列をそのまま返す | E-01 (行517: `if ($value is string) return $value;`) | ○ |
| C-60 | string_cast_for_basic_switch: nullを空文字列に変換 | E-01 (行518: `if ($value is null) return '';`) | ○ |
| C-61 | string_cast_for_basic_switch: 0はfirst_caseまたはセンチネル | E-01 (行520-521: 0ish処理) | ○ |
| C-62 | string_cast_for_basic_switch: trueはfirst_caseまたはセンチネル | E-01 (行520-521: bool処理) | ○ |
| C-63 | string_cast_for_switch: 文字列（非数値）をそのまま返す | E-01 (行547-548: 非数値文字列処理) | ○ |
| C-64 | string_cast_for_switch: nullを空文字列に変換 | E-01 (行554: `if ($value is null) return '';`) | ○ |
| C-65 | string_cast_for_switch: 数値文字列をパースして対応するケースを探す | E-01 (行571-579: intish_vals検索) | ○ |
| C-66 | string_cast_for_switch: trueをfirst_truthyに変換 | E-01 (行582-583: true処理) | ○ |
| C-67 | string_cast_for_switch: falseをfirst_falsyに変換 | E-01 (行584-586: false処理) | ○ |
| C-68 | string_cast_for_switch: 0をfirst_zeroishに変換 | E-01 (行575-576: zeroish処理) | ○ |
| C-69 | string_cast_for_switch: floatish値のマッチング | E-01 (行564-568: floatish_vals検索) | ○ |

### str.php - coerce_possibly_invalid_str_replace_pairs 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-70 | 有効な置換ペアをそのまま返す | E-02 (行38-40: Dict\pull_with_key処理) | ○ |
| C-71 | 空文字列キーを除外する | E-02 (行40: `Dict\filter_keys($$, $k ==> $k !== '')`) | ○ |
| C-72 | キーと値を文字列に強制変換 | E-02 (行39: `(string) $v`, `(string) $k`) | ○ |
| C-73 | 空のペアを処理する | E-02 (行38-40: 空dictの処理) | ○ |

### str.php - split_with_possibly_negative_limit 関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-74 | 正のリミットで分割する | E-02 (行74-78: `Str\split($string, $delimiter, $limit)`) | ○ |
| C-75 | リミットなしで分割する | E-02 (行74-78: limit=null時のStr\split委譲) | ○ |
| C-76 | 負のリミットで末尾を切り捨てる | E-02 (行66-72: 負リミット処理) | ○ |
| C-77 | 負のリミットで全て切り捨てる | E-02 (行69-71: `if ($limit <= 0) { return vec[]; }`) | ○ |
| C-78 | 負のリミットがセグメント数を超える | E-02 (行68-71: limit計算とvec[]返却) | ○ |
| C-79 | 空のデリミタはStr\splitにフォールバック | E-02 (行66: `if ($delimiter !== '' && ...)`) | ○ |
| C-80 | 空文字列の分割 | E-02 (行74-78: Str\splitへの委譲) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - 全てのテストケースがソースコードから直接導出されています

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードに明確な根拠を持っています
- 注意点：
  - PHPスタイルの暗黙型変換は複雑なため、実際のテスト実行時に予期しない動作が発生する可能性があります
  - `__cast_and_compare` 関数は非常に複雑なロジックを含むため、追加のエッジケーステストが必要な可能性があります
  - NaN、Infinity などの特殊な浮動小数点値の取り扱いについて追加テストを検討してください

## 6) レビュアーチェックリスト（最小）
- [ ] 各関数のdocコメントと実際の動作が一致しているか確認
- [ ] 境界値テストケースが全ての重要な境界をカバーしているか確認
- [ ] 異常系テストケースがエラーハンドリングを適切にテストしているか確認
- [ ] PHPスタイルの型強制動作がHHVM/Hackで同様に動作するか確認
- [ ] センチネル値（SWITCH_INT_SENTINEL, SWITCH_STRING_SENTINEL）の使用が適切か確認
