---
generated_at: 2026-02-24 12:30:00
metrics:
  claims_total: 61
  claims_with_evidence: 61
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：packages-text-editor.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：61 / 61、根拠なし：0
- 優先レビュー（高）
  1. なし - すべてのテストケースにソースコード上の根拠が存在

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

- E-01: `packages/text-editor/package.json` - パッケージ構成・依存関係
- E-02: `packages/text-editor/src/react/index.ts` - モジュールエクスポート定義
- E-03: `packages/text-editor/src/react/component.tsx` - TextEditor/Toolbarコンポーネント実装（1-221行目）
- E-04: `packages/text-editor/src/react/source-extension-react.tsx` - SourceExtensionReact拡張機能実装（1-153行目）
- E-05: `packages/text-editor/src/react/suggestion.ts` - createSuggestion関数実装（1-144行目）
- E-06: `packages/text-editor/src/react/suggestion-list.tsx` - SuggestionListコンポーネント実装（1-105行目）

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

### TextEditorコンポーネント（UT-TED-001 〜 UT-TED-011）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | TextEditorがvalueプロパティで初期値を受け取る | E-03 (135-155行目: value引数定義) | ○ |
| C-02 | valueがundefinedの場合にundefinedとして扱う | E-03 (202-207行目: content設定ロジック) | ○ |
| C-03 | valueが空文字列の場合にundefinedとして扱う | E-03 (203-206行目: value === "" チェック) | ○ |
| C-04 | onValueChangeでJSON文字列が返される | E-03 (210-211行目: JSON.stringify(p.editor.getJSON())) | ○ |
| C-05 | showToolbarでツールバー表示制御 | E-03 (197行目: {showToolbar && <Toolbar>}) | ○ |
| C-06 | showToolbarのデフォルト値がtrue | E-03 (152行目: showToolbar = true) | ○ |
| C-07 | placeholderプロパティ対応 | E-03 (181,189行目: Placeholder.configure) | ○ |
| C-08 | headerプロパティ対応 | E-03 (198行目: {header && <div>}) | ○ |
| C-09 | connectionsSignatureによるエディタキー管理 | E-03 (156-162行目: useMemoでconnectionsSignature計算) | ○ |
| C-10 | connections=undefinedで'no-connections' | E-03 (158-159行目: 条件分岐) | ○ |
| C-11 | connections空配列でJSON.stringify | E-03 (160行目: JSON.stringify(connections.map...)) | ○ |

### Toolbarコンポーネント（UT-TED-012 〜 UT-TED-015）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | editor=nullでnull返却 | E-03 (26-28行目: if (!editor) return null) | ○ |
| C-13 | Bold/Italic/Strikeトグル状態管理 | E-03 (43-47行目: value配列でisActive確認) | ○ |
| C-14 | bulletListとorderedListの相互排他 | E-03 (94-98行目, 109-113行目: 切り替えロジック) | ○ |
| C-15 | toolsコールバック呼び出し | E-03 (120-125行目: {tools && <>...tools(editor)</>}) | ○ |

### SourceExtensionReact/Component（UT-TED-016 〜 UT-TED-032）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-16 | node/output表示ロジック | E-04 (46-74行目: JSX表示部分) | ○ |
| C-17 | node=undefinedでnull返却 | E-04 (42-44行目: if (node === undefined || output === undefined)) | ○ |
| C-18 | output=undefinedでnull返却 | E-04 (42-44行目: 同上) | ○ |
| C-19 | storage→optionsフォールバック | E-04 (13-23行目: storage確認→extension.options取得) | ○ |
| C-20 | addOptionsのデフォルト値 | E-04 (88-92行目: return { nodes: [] }) | ○ |
| C-21 | addStorageのデフォルト値 | E-04 (94-98行目: return { nodes: [] }) | ○ |
| C-22 | onBeforeCreateでnodes同期 | E-04 (100-102行目: this.storage.nodes = this.options.nodes) | ○ |
| C-23 | onCreateでnodes同期 | E-04 (104-106行目: 同上) | ○ |
| C-24 | onUpdateでnodes同期 | E-04 (108-110行目: 同上) | ○ |
| C-25 | addNodeViewでReactNodeViewRenderer返却 | E-04 (112-114行目: return ReactNodeViewRenderer(Component)) | ○ |
| C-26 | parseHTMLでspan[data-node-id][data-output-id]パース | E-04 (116-138行目: parseHTML実装) | ○ |
| C-27 | nodeIdなしでfalse返却 | E-04 (123-125行目: if (!nodeId || !outputId) return false) | ○ |
| C-28 | outputIdなしでfalse返却 | E-04 (123-125行目: 同上) | ○ |
| C-29 | nodeが見つからない場合false | E-04 (127-129行目: if (!node) return false) | ○ |
| C-30 | findRelatedNode正常動作 | E-04 (142-152行目: findRelatedNode実装) | ○ |
| C-31 | findRelatedNodeでnodeId不一致時undefined | E-04 (147-150行目: find条件) | ○ |
| C-32 | findRelatedNodeでoutputId不一致時undefined | E-04 (149-150行目: outputs.some条件) | ○ |

### createSuggestion（UT-TED-033 〜 UT-TED-048）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | char='@'設定 | E-05 (16行目: char: "@") | ○ |
| C-34 | connections=undefinedで空配列返却 | E-05 (17-20行目: if (connections === undefined) return []) | ○ |
| C-35 | query空でフルリスト返却 | E-05 (31-33行目: if (query === "") return items) | ○ |
| C-36 | クエリフィルタリング | E-05 (35-38行目: includes(lowerQuery)) | ○ |
| C-37 | 大文字小文字を区別しない検索 | E-05 (35行目: toLowerCase()) | ○ |
| C-38 | onStartでReactRenderer作成・DOM追加 | E-05 (48-62行目: onStart実装) | ○ |
| C-39 | clientRect=nullでスキップ | E-05 (54-56行目: if (!props.clientRect) return) | ○ |
| C-40 | onUpdateでupdateProps呼び出し | E-05 (94-95行目: component?.updateProps(props)) | ○ |
| C-41 | popup再表示ロジック | E-05 (100-103行目: if (popup.style.display === "none")) | ○ |
| C-42 | onKeyDownでref委譲 | E-05 (106-108行目: return component?.ref?.onKeyDown(props)) | ○ |
| C-43 | component=undefinedでfalse | E-05 (107行目: ?? false) | ○ |
| C-44 | onExitでクリーンアップ | E-05 (110-119行目: removeEventListener, remove, destroy) | ○ |
| C-45 | Escapeキーハンドラ | E-05 (71-78行目: escapeHandler実装) | ○ |
| C-46 | popup外クリックハンドラ | E-05 (81-91行目: pointerDownHandler実装) | ○ |
| C-47 | popup内クリックで維持 | E-05 (86-88行目: if (popup.contains(target)) return) | ○ |
| C-48 | command実行ロジック | E-05 (123-141行目: command実装) | ○ |

### SuggestionList（UT-TED-049 〜 UT-TED-061）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | items空でnull返却 | E-06 (68-70行目: if (items.length === 0) return null) | ○ |
| C-50 | items表示とselectedIndex初期化 | E-06 (28-33行目: useState(0), useEffect) | ○ |
| C-51 | items.length変更でselectedIndexリセット | E-06 (29-33行目: useEffect依存配列[items.length]) | ○ |
| C-52 | selectItemでcommand呼び出し | E-06 (34-42行目: selectItem実装) | ○ |
| C-53 | 無効indexでcommand未呼び出し | E-06 (36-39行目: if (item) { command(item) }) | ○ |
| C-54 | ArrowUpでデクリメント | E-06 (50-53行目: setSelectedIndex((prev) => (prev + items.length - 1) % items.length)) | ○ |
| C-55 | ArrowDownでインクリメント | E-06 (54-57行目: setSelectedIndex((prev) => (prev + 1) % items.length)) | ○ |
| C-56 | ArrowUp循環（先頭→末尾） | E-06 (51行目: モジュロ演算による循環) | ○ |
| C-57 | ArrowDown循環（末尾→先頭） | E-06 (55行目: モジュロ演算による循環) | ○ |
| C-58 | Enterで選択確定 | E-06 (59-62行目: if (event.key === "Enter")) | ○ |
| C-59 | 未処理キーでfalse | E-06 (64行目: return false) | ○ |
| C-60 | items空でfalse | E-06 (46-48行目: if (items.length === 0) return false) | ○ |
| C-61 | ボタンクリックでselectItem | E-06 (85行目: onClick={() => selectItem(index)}) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - すべてのテストケースに対応するソースコードが存在

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - すべてのテストケースが実際のソースコードに基づいて生成されており、根拠が明確

注意点：
- TipTap/Reactの統合テストでは、実際のDOM操作が必要なため、JSDOMやTesting Library等のセットアップが必要
- `SourceExtensionReact`の拡張機能テストでは、TipTapのEditorインスタンスのモックが必要

## 6) レビュアーチェックリスト（最小）
- [ ] TextEditorコンポーネントのプロパティバリエーション（value/onValueChange/connections）が網羅されているか
- [ ] Toolbarコンポーネントのトグル状態管理が正しくテストされているか
- [ ] SourceExtensionReactのライフサイクルフック（onBeforeCreate/onCreate/onUpdate）が網羅されているか
- [ ] createSuggestion関数のレンダリングライフサイクル（onStart/onUpdate/onKeyDown/onExit）が網羅されているか
- [ ] SuggestionListのキーボードナビゲーション（ArrowUp/ArrowDown/Enter）が網羅されているか
- [ ] エッジケース（null/undefined/空配列）の処理が適切にテストされているか
