---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 181
  claims_with_evidence: 181
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：babel-plugin-transform-regenerator 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：181 / 181、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全テストケースに根拠あり

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

- E-01: `packages/babel-plugin-transform-regenerator/src/index.ts` - プラグインエントリポイント
- E-02: `packages/babel-plugin-transform-regenerator/src/regenerator/visit.ts` - ビジター定義、shouldRegenerate、getOuterFnExpr、getMarkInfo、argumentsThisVisitor、functionSentVisitor
- E-03: `packages/babel-plugin-transform-regenerator/src/regenerator/emit.ts` - Emitterクラス（181-1414行）
- E-04: `packages/babel-plugin-transform-regenerator/src/regenerator/hoist.ts` - hoist関数（変数巻き上げ処理）
- E-05: `packages/babel-plugin-transform-regenerator/src/regenerator/leap.ts` - Entry/LeapManagerクラス群
- E-06: `packages/babel-plugin-transform-regenerator/src/regenerator/meta.ts` - hasSideEffects、containsLeap述語
- E-07: `packages/babel-plugin-transform-regenerator/src/regenerator/util.ts` - isReference関数
- E-08: `packages/babel-plugin-transform-regenerator/src/regenerator/replaceShorthandObjectMethod.ts` - ショートハンドメソッド変換

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

### src/index.ts（UT-REG-001〜002）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | プラグインオブジェクトが正しく返却されること | E-01: declare()がnameとvisitorを持つオブジェクトを返す（7-11行） | ○ |
| C-02 | assertVersionが正しく呼び出されること | E-01: assertVersion(REQUIRED_VERSION(7))（5行） | ○ |

### src/regenerator/visit.ts - getVisitor（UT-REG-003〜014）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-03 | Visitorオブジェクトが返却されること | E-02: export const getVisitor = (): Visitor<PluginPass> => ({...})（11行） | ○ |
| C-04 | ジェネレータメソッドが変換されること | E-02: Method visitor（12-38行）でgenerator/asyncをfalseに設定 | ○ |
| C-05 | asyncメソッドが変換されること | E-02: Method visitor、node.async = false（32行） | ○ |
| C-06 | asyncジェネレータメソッドが変換されること | E-02: shouldRegenerate内でnode.generator && node.asyncの分岐（234-237行） | ○ |
| C-07 | 通常メソッドはスキップされること | E-02: shouldRegenerate関数がfalseを返す条件（245-247行） | ○ |
| C-08 | ジェネレータ関数が変換されること | E-02: Function.exit handler（39-229行） | ○ |
| C-09 | async関数が変換されること | E-02: node.async判定とregeneratorAsyncヘルパー使用（154-174行） | ○ |
| C-10 | ObjectMethodがObjectPropertyに変換されること | E-02: replaceShorthandObjectMethod呼び出し（49行） | ○ |
| C-11 | thisが使用される場合wrapArgsにthisExpressionが含まれること | E-02: context.usesThis判定とwrapArgs.push(t.thisExpression())（143-144行） | ○ |
| C-12 | argumentsが使用される場合変数にキャプチャされること | E-02: context.usesArguments判定とvars.push（119-123行） | ○ |
| C-13 | try-catch-finallyがtryLocsListに含まれること | E-02: emitter.getTryLocsList()呼び出し（133行） | ○ |
| C-14 | async関数でPromise変数がリネームされること | E-02: currentScope.rename("Promise")（157-161行） | ○ |

### src/regenerator/visit.ts - shouldRegenerate（UT-REG-015〜021）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-15 | ジェネレータ関数でtrueを返すこと | E-02: node.generator判定（234-241行） | ○ |
| C-16 | async関数でtrueを返すこと | E-02: node.async判定（242-244行） | ○ |
| C-17 | asyncジェネレータでtrueを返すこと | E-02: node.generator && node.async判定（235-237行） | ○ |
| C-18 | 通常関数でfalseを返すこと | E-02: else節でfalse返却（245-247行） | ○ |
| C-19 | opts.generators=falseでスキップ | E-02: state.opts.generators !== false（240行） | ○ |
| C-20 | opts.async=falseでスキップ | E-02: state.opts.async !== false（244行） | ○ |
| C-21 | opts.asyncGenerators=falseでスキップ | E-02: state.opts.asyncGenerators !== false（237行） | ○ |

### src/regenerator/visit.ts - getOuterFnExpr/getMarkInfo（UT-REG-022〜026）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | 関数IDがない場合にUIDが生成されること | E-02: funPath.scope.parent!.generateUidIdentifier("callee")（265行） | ○ |
| C-23 | FunctionDeclarationでmarkedIdが返されること | E-02: getMarkedFunctionId呼び出し（273行） | ○ |
| C-24 | FunctionExpressionでnode.idが返されること | E-02: t.cloneNode(node.id)（276行） | ○ |
| C-25 | ノードに対してマーク情報が取得できること | E-02: getMarkInfo関数（281-286行） | ○ |
| C-26 | 同じノードに対して同じオブジェクトが返されること | E-02: WeakMap使用、markInfo.get(node)（282-285行） | ○ |

### src/regenerator/visit.ts - Visitors（UT-REG-027〜030）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | arguments識別子が置換されること | E-02: argumentsThisVisitor Identifier handler（346-350行） | ○ |
| C-28 | ThisExpressionでusesThisがtrueになること | E-02: argumentsThisVisitor ThisExpression handler（353-355行） | ○ |
| C-29 | ネストした関数はスキップされること | E-02: path.skip()（343行） | ○ |
| C-30 | function.sentが置換されること | E-02: functionSentVisitor MetaProperty handler（362-369行） | ○ |

### src/regenerator/emit.ts - Emitter基本（UT-REG-031〜060）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | Emitterが正しく初期化されること | E-03: constructor（82-127行） | ○ |
| C-32 | 新しいロケーションが生成されること | E-03: loc()メソッド（129-133行）、PENDING_LOCATION使用 | ○ |
| C-33 | insertedLocsに追加されること | E-03: this.insertedLocs.add(l)（131行） | ○ |
| C-34 | insertedLocsセットが返されること | E-03: getInsertedLocs()（135-137行） | ○ |
| C-35 | contextIdのクローンが返されること | E-03: getContextId()（139-141行） | ○ |
| C-36 | 現在のインデックスが返されること | E-03: getIndex()（143-148行） | ○ |
| C-37 | 同じlisting長では同じインデックス | E-03: indexMap使用（144-147行） | ○ |
| C-38 | listing追加後に新しいインデックス | E-03: ++this.index（145行） | ○ |
| C-39 | PENDING_LOCATIONが現在のインデックスに設定 | E-03: mark()メソッド（152-165行） | ○ |
| C-40 | markedにtrueが設定されること | E-03: this.marked[this.listing.length] = true（160行） | ○ |
| C-41 | 既設定locと異なる場合アサートエラー | E-03: assert.strictEqual（158行） | ○ |
| C-42 | ExpressionがExpressionStatementにラップ | E-03: emit()メソッド（167-173行） | ○ |
| C-43 | Statementがそのまま追加 | E-03: this.listing.push(node)（172行） | ○ |
| C-44 | 代入文がemitされること | E-03: emitAssign()（177-183行） | ○ |
| C-45 | lhsが返されること | E-03: return lhs（182行） | ○ |
| C-46 | AssignmentExpressionが生成 | E-03: assign()（186-190行） | ○ |
| C-47 | context.nameの形式でMemberExpression | E-03: contextProperty()（194-201行） | ○ |
| C-48 | 'catch'の場合はcomputed access | E-03: computed = name === "catch"（195行） | ○ |
| C-49 | context.catch(tryLoc)がemit | E-03: clearPendingException()（203-216行） | ○ |
| C-50 | assigneeがnullの場合 | E-03: else分岐（214行） | ○ |
| C-51 | context.n=toLocとbreak | E-03: jump()（220-223行） | ○ |
| C-52 | 条件付きジャンプ | E-03: jumpIf()（226-236行） | ○ |
| C-53 | 否定条件付きジャンプ | E-03: jumpIfNot()（239-257行） | ○ |
| C-54 | 既に否定されたtestは二重否定されない | E-03: test.operator === "!"判定（241-243行） | ○ |
| C-55 | context.t0のような一時変数 | E-03: makeContextTempVar()（264-266行） | ○ |
| C-56 | 連続呼び出しで異なる変数 | E-03: this.nextTempId++（265行） | ○ |
| C-57 | スコープ内の一時変数 | E-03: makeTempVar()（268-272行） | ○ |
| C-58 | varsに追加されること | E-03: this.vars.push（270行） | ○ |
| C-59 | 無名関数が返されること | E-03: getContextFunction()（274-282行） | ○ |
| C-60 | 引数がcontextId | E-03: [this.getContextId()]（277行） | ○ |

### src/regenerator/emit.ts - getDispatchLoop/getTryLocsList（UT-REG-061〜068）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-61 | bodyにgetDispatchLoop結果が含まれる | E-03: this.getDispatchLoop()（278行） | ○ |
| C-62 | while(1) switch文が返される | E-03: getDispatchLoop()（295-351行） | ○ |
| C-63 | markedな位置にcase文 | E-03: self.marked[i]判定（305-310行） | ○ |
| C-64 | finalLocが正しく設定 | E-03: this.finalLoc.value = this.getIndex()（320行） | ○ |
| C-65 | tryEntriesがある場合context.p代入 | E-03: this.tryEntries.length === 0判定（340-346行） | ○ |
| C-66 | ArrayExpression生成 | E-03: getTryLocsList()（353-389行） | ○ |
| C-67 | 空の場合null | E-03: return null（357行） | ○ |
| C-68 | catchとfinallyの位置 | E-03: locs配列構築（371-380行） | ○ |

### src/regenerator/emit.ts - explode/explodeStatement（UT-REG-069〜091）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | Statement時explodeStatement呼び出し | E-03: explode()（397-423行） | ○ |
| C-70 | Expression時explodeExpression呼び出し | E-03: path.isExpression()判定（405行） | ○ |
| C-71 | Declarationでエラー | E-03: throw getDeclError(node)（401行） | ○ |
| C-72 | VariableDeclaratorでエラー | E-03: case "VariableDeclarator"（408-409行） | ○ |
| C-73 | 親で処理すべきノードはエラー | E-03: case "ObjectProperty"等（413-417行） | ○ |
| C-74 | BlockStatement展開 | E-03: explodeStatement()（425-442行） | ○ |
| C-75 | leapなしStatementはemit | E-03: self.emit(stmt)（450行） | ○ |
| C-76 | ExpressionStatement処理 | E-03: case "ExpressionStatement"（455-457行） | ○ |
| C-77 | LabeledStatement処理 | E-03: case "LabeledStatement"（459-491行） | ○ |
| C-78 | WhileStatement処理 | E-03: case "WhileStatement"（493-508行） | ○ |
| C-79 | DoWhileStatement処理 | E-03: case "DoWhileStatement"（510-526行） | ○ |
| C-80 | ForStatement処理 | E-03: case "ForStatement"（528-569行） | ○ |
| C-81 | ForInStatement処理 | E-03: case "ForInStatement"（575-623行） | ○ |
| C-82 | BreakStatement処理 | E-03: case "BreakStatement"（625-631行） | ○ |
| C-83 | ContinueStatement処理 | E-03: case "ContinueStatement"（633-639行） | ○ |
| C-84 | SwitchStatement処理 | E-03: case "SwitchStatement"（641-692行） | ○ |
| C-85 | IfStatement処理 | E-03: case "IfStatement"（694-713行） | ○ |
| C-86 | IfStatementのelse節 | E-03: if (elseLoc)分岐（705-709行） | ○ |
| C-87 | ReturnStatement処理 | E-03: case "ReturnStatement"（715-723行） | ○ |
| C-88 | WithStatementでエラー | E-03: case "WithStatement"（725-726行） | ○ |
| C-89 | TryStatement処理 | E-03: case "TryStatement"（728-813行） | ○ |
| C-90 | ThrowStatement処理 | E-03: case "ThrowStatement"（815-820行） | ○ |
| C-91 | ClassDeclaration処理 | E-03: case "ClassDeclaration"（822-824行） | ○ |

### src/regenerator/emit.ts - emitAbruptCompletion/他（UT-REG-092〜128）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-92 | Jumpタイプでcontext.a | E-03: emitAbruptCompletion()（833-860行） | ○ |
| C-93 | Returnタイプでcontext.a | E-03: record.type === OperatorType.Return（842-846行） | ○ |
| C-94 | Returnでvalue未指定 | E-03: if (record.value)分岐（843-845行） | ○ |
| C-95 | getUnmarkedCurrentLoc | E-03: getUnmarkedCurrentLoc()（871-873行） | ○ |
| C-96 | updateContextPrevLoc | E-03: updateContextPrevLoc()（885-903行） | ○ |
| C-97 | context.p=locがemit | E-03: this.emitAssign(this.contextProperty("p"), loc)（902行） | ○ |
| C-98 | locがnullの場合 | E-03: else分岐（896行） | ○ |
| C-99 | leapingChildrenありでtempVar代入 | E-03: explodeViaTempVar()（914-945行） | ○ |
| C-100 | Literalはtempvarに代入されない | E-03: !t.isLiteral(result)判定（930行） | ○ |
| C-101 | ignoreResultで代入されない | E-03: if (ignoreChildResult)分岐（928行） | ○ |
| C-102 | ignoreResultとtempVar両方でアサート | E-03: assert.ok（920-923行） | ○ |
| C-103 | null/undefinedがそのまま | E-03: explodeExpression()（947-954行） | ○ |
| C-104 | leapなし式がそのまま | E-03: !meta.containsLeap(expr)（969-971行） | ○ |
| C-105 | ignoreResultでemit | E-03: finish関数（960-965行） | ○ |
| C-106 | MemberExpression展開 | E-03: case "MemberExpression"（984-999行） | ○ |
| C-107 | CallExpressionのcallee展開 | E-03: case "CallExpression"（1001-1098行） | ○ |
| C-108 | メソッド呼び出しでthisバインディング | E-03: .call使用（1044-1052行） | ○ |
| C-109 | NewExpression展開 | E-03: case "NewExpression"（1100-1112行） | ○ |
| C-110 | ObjectExpressionプロパティ展開 | E-03: case "ObjectExpression"（1114-1134行） | ○ |
| C-111 | ArrayExpression要素展開 | E-03: case "ArrayExpression"（1136-1160行） | ○ |
| C-112 | SpreadElement処理 | E-03: elemPath.isSpreadElement()（1143-1150行） | ○ |
| C-113 | SequenceExpression処理 | E-03: case "SequenceExpression"（1162-1173行） | ○ |
| C-114 | LogicalExpression && | E-03: case "LogicalExpression"（1175-1204行） | ○ |
| C-115 | LogicalExpression || | E-03: path.node.operator === "||"（1191行） | ○ |
| C-116 | ConditionalExpression分岐 | E-03: case "ConditionalExpression"（1206-1235行） | ○ |
| C-117 | UnaryExpression展開 | E-03: case "UnaryExpression"（1237-1246行） | ○ |
| C-118 | BinaryExpression両辺展開 | E-03: case "BinaryExpression"（1248-1259行） | ○ |
| C-119 | AssignmentExpression = | E-03: case "AssignmentExpression"（1261-1303行） | ○ |
| C-120 | AssignmentExpression += | E-03: path.node.operator === "="判定（1262行）、else分岐 | ○ |
| C-121 | UpdateExpression展開 | E-03: case "UpdateExpression"（1305-1314行） | ○ |
| C-122 | YieldExpressionがreturn文 | E-03: case "YieldExpression"（1316-1350行） | ○ |
| C-123 | yield*がdelegate処理 | E-03: path.node.delegate判定（1324-1339行） | ○ |
| C-124 | AwaitExpressionがreturn文 | E-03: case "AwaitExpression"（1352-1370行） | ○ |
| C-125 | ClassExpression処理 | E-03: case "ClassExpression"（1372-1373行） | ○ |
| C-126 | superClass展開 | E-03: explodeClass()（1382-1413行） | ○ |
| C-127 | computedキー展開 | E-03: member.node.computed判定（1390-1392行） | ○ |
| C-128 | computedでないキーはスキップ | E-03: computed判定の逆 | ○ |

### src/regenerator/hoist.ts（UT-REG-129〜137）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-129 | 変数宣言がassignmentに変換 | E-04: hoist()関数（8-165行） | ○ |
| C-130 | 初期化なし変数宣言が削除 | E-04: expr === null判定（51-52行） | ○ |
| C-131 | 複数変数がSequenceExpression | E-04: t.sequenceExpression(exprs)（44行） | ○ |
| C-132 | ForStatementのinit変換 | E-04: ForStatement visitor（71-80行） | ○ |
| C-133 | ForInStatementのleft変換 | E-04: ForXStatement visitor（83-88行） | ○ |
| C-134 | FunctionDeclaration変換 | E-04: FunctionDeclaration visitor（90-129行） | ○ |
| C-135 | ネストした関数内はスキップ | E-04: FunctionExpression visitor path.skip()（131-134行） | ○ |
| C-136 | ArrowFunction内スキップ | E-04: ArrowFunctionExpression visitor path.skip()（136-139行） | ○ |
| C-137 | パラメータと同名変数は返されない | E-04: !Object.hasOwn(paramNames, name)（159行） | ○ |

### src/regenerator/leap.ts（UT-REG-138〜155）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-138 | Entryインスタンス作成 | E-05: class Entry {}（5行） | ○ |
| C-139 | FunctionEntry returnLoc設定 | E-05: FunctionEntry constructor（7-14行） | ○ |
| C-140 | LoopEntry全プロパティ設定 | E-05: LoopEntry constructor（16-31行） | ○ |
| C-141 | LoopEntry labelがnull | E-05: label = null デフォルト値（24行） | ○ |
| C-142 | SwitchEntry breakLoc設定 | E-05: SwitchEntry constructor（33-40行） | ○ |
| C-143 | TryEntry全プロパティ設定 | E-05: TryEntry constructor（42-58行） | ○ |
| C-144 | TryEntry catchもfinallyもない場合 | E-05: assert.ok(catchEntry \|\| finallyEntry)（53行） | ○ |
| C-145 | CatchEntry設定 | E-05: CatchEntry constructor（60-69行） | ○ |
| C-146 | FinallyEntry設定 | E-05: FinallyEntry constructor（71-80行） | ○ |
| C-147 | LabeledEntry設定 | E-05: LabeledEntry constructor（82-91行） | ○ |
| C-148 | LeapManager初期化 | E-05: LeapManager constructor（93-100行） | ○ |
| C-149 | withEntry push/pop | E-05: withEntry()（102-110行） | ○ |
| C-150 | 例外発生時もpop | E-05: try/finally構造（104-109行） | ○ |
| C-151 | ラベルなしで最も近いloc | E-05: _findLeapLocation()（112-135行） | ○ |
| C-152 | ラベル指定で一致するloc | E-05: entry.label.name === label.name（123行） | ○ |
| C-153 | 見つからない場合エラー | E-05: throw new Error("unreachable")（134行） | ○ |
| C-154 | getBreakLoc | E-05: getBreakLoc()（137-139行） | ○ |
| C-155 | getContinueLoc | E-05: getContinueLoc()（141-143行） | ○ |

### src/regenerator/meta.ts（UT-REG-156〜170）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-156 | makePredicate述語生成 | E-06: makePredicate()（12-67行） | ○ |
| C-157 | CallExpressionで副作用true | E-06: sideEffectTypes（76-84行） | ○ |
| C-158 | AssignmentExpressionで副作用true | E-06: AssignmentExpression: true（81行） | ○ |
| C-159 | Identifierで副作用false | E-06: knownTypesに含まれない | ○ |
| C-160 | FunctionExpressionでopaque false | E-06: opaqueTypes（69-72行） | ○ |
| C-161 | YieldExpressionでleap true | E-06: leapTypes（87-94行） | ○ |
| C-162 | AwaitExpressionでleap true | E-06: AwaitExpression: true（89行） | ○ |
| C-163 | BreakStatementでleap true | E-06: BreakStatement: true（90行） | ○ |
| C-164 | ContinueStatementでleap true | E-06: ContinueStatement: true（91行） | ○ |
| C-165 | ReturnStatementでleap true | E-06: ReturnStatement: true（92行） | ○ |
| C-166 | ThrowStatementでleap true | E-06: ThrowStatement: true（93行） | ○ |
| C-167 | 子にleapを含む場合true | E-06: onlyChildren()（16-44行） | ○ |
| C-168 | 子にleapを含まない場合false | E-06: return result（43行）、result初期値false | ○ |
| C-169 | ArrowFunctionでopaque false | E-06: ArrowFunctionExpression: true（71行） | ○ |
| C-170 | onlyChildren子要素のみ | E-06: predicate.onlyChildren = onlyChildren（64行） | ○ |

### src/regenerator/util.ts（UT-REG-171〜173）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-171 | 参照されている場合true | E-07: path.isReferenced()（9行） | ○ |
| C-172 | AssignmentのLeftでtrue | E-07: path.parentPath.isAssignmentExpression({ left: path.node })（10行） | ○ |
| C-173 | 参照でも代入左辺でもない場合false | E-07: OR条件の両方false時 | ○ |

### src/regenerator/replaceShorthandObjectMethod.ts（UT-REG-174〜181）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-174 | ジェネレータObjectMethod変換 | E-08: replaceShorthandObjectMethod()（32-76行） | ○ |
| C-175 | パラメータがクローン | E-08: t.cloneNode(param)（51行） | ○ |
| C-176 | bodyがクローン | E-08: t.cloneNode(path.node.body)（57行） | ○ |
| C-177 | computedキーが保持 | E-08: path.node.computed（71行） | ○ |
| C-178 | 非ジェネレータは変換しない | E-08: !path.node.generator判定（46-48行） | ○ |
| C-179 | FunctionExpressionはそのまま | E-08: !t.isObjectMethod判定（41-43行） | ○ |
| C-180 | 非Functionでエラー | E-08: throw new Error（33-37行） | ○ |
| C-181 | nullパスでエラー | E-08: !path.node判定（33行） | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全テストケースに対してソースコードから直接根拠を確認

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全テストケースがソースコードから直接導出されており、信頼性が高い

## 6) レビュアーチェックリスト（最小）
- [ ] 各テストケースがソースコードの対応する機能をカバーしているか確認
- [ ] テスト観点（正常系/異常系/境界値）が適切に分類されているか確認
- [ ] 優先度の設定が適切か確認（高: 金額・認証・データ整合性、中: データ変換・バリデーション、低: ヘルパー・ログ）
- [ ] 期待結果がソースコードの実際の動作と一致しているか確認
- [ ] 見落としている重要な機能やエッジケースがないか確認
