---
generated_at: 2026-03-01 10:30:00
metrics:
  claims_total: 120
  claims_with_evidence: 118
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート: terminal モジュール単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：118 / 120、根拠なし：2
- 優先レビュー（高）
  1. **C-73: generate256Color関数**：複雑な色補間ロジックの詳細確認が必要
  2. **C-111: Action列挙**：全アクション種別の網羅性確認が必要

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

- E-01: `src/terminal/Terminal.zig` - Terminal構造体定義、init/deinit/print関数
- E-02: `src/terminal/Parser.zig` - VTパーサー、State/TransitionAction/Action定義
- E-03: `src/terminal/Screen.zig` - Screen構造体、Cursor、SavedCursor定義
- E-04: `src/terminal/PageList.zig` - PageList、MemoryPool、Viewport定義
- E-05: `src/terminal/Selection.zig` - Selection構造体、Bounds、Order定義
- E-06: `src/terminal/page.zig` - Page構造体、Cell、Row、IntegrityError定義
- E-07: `src/terminal/sgr.zig` - SGR属性パーサー、Attribute union
- E-08: `src/terminal/color.zig` - Palette、DynamicPalette、DynamicRGB、Name定義
- E-09: `src/terminal/Tabstops.zig` - Tabstops構造体、set/unset/get/resize/reset関数
- E-10: `src/terminal/UTF8Decoder.zig` - DFAベースUTF-8デコーダー
- E-11: `src/terminal/osc.zig` - OSCコマンド、Parser、Terminator定義
- E-12: `src/terminal/point.zig` - Point union、Coordinate、Tag定義
- E-13: `src/terminal/modes.zig` - ModeState、ModePacked、Mode enum
- E-14: `src/terminal/charsets.zig` - Charset、Slots、table関数
- E-15: `src/terminal/hyperlink.zig` - Hyperlink、PageEntry、Map定義
- E-16: `src/terminal/stream.zig` - Action union、Key enum

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

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Terminal.initで正常な初期化が行われる | E-01 (lines 218-251) | ○ |
| C-02 | Terminal.initで最小サイズでの初期化ができる | E-01 (lines 218-251) | ○ |
| C-03 | Terminal.initでスクロールバック0での初期化ができる | E-01 (lines 207-216) | ○ |
| C-04 | Terminal.deinitでリソースが正しく解放される | E-01 (lines 253-258) | ○ |
| C-05 | Terminal.printで単一文字が正しく印刷される | E-01 (lines 302-313) | ○ |
| C-06 | Terminal.printでUnicode文字が正しく印刷される | E-01 (lines 302-500) | ○ |
| C-07 | Terminal.printで行末での自動折り返しが行われる | E-01 (lines 316-319) | ○ |
| C-08 | Terminal.printでstatus_displayがmain以外の場合は何も印刷されない | E-01 (lines 306-309) | ○ |
| C-09 | Terminal.printStringでUTF-8文字列が正しく印刷される | E-01 (lines 279-292) | ○ |
| C-10 | Terminal.printStringで改行を含む文字列が処理される | E-01 (lines 284-287) | ○ |
| C-11 | Terminal.printRepeatで前回の文字が繰り返し印刷される | E-01 (lines 295-300) | ○ |
| C-12 | Terminal.printRepeatでprevious_charがnullの場合は何も印刷されない | E-01 (lines 296-299) | ○ |
| C-13 | Terminal.printRepeatでcount=0の場合は1回印刷される | E-01 (line 297) | ○ |
| C-14 | Parser.initでパーサーが正しく初期化される | E-02 (lines 222-242) | ○ |
| C-15 | Parser.nextで通常文字でprintアクションが返される | E-02 (lines 251-311, 327) | ○ |
| C-16 | Parser.nextで制御文字でexecuteアクションが返される | E-02 (lines 328) | ○ |
| C-17 | Parser.nextでESCシーケンスが開始される | E-02 (lines 251-311) | ○ |
| C-18 | Parser.nextでCSIシーケンスがパースされる | E-02 (lines 367-397) | ○ |
| C-19 | Parser.nextでMAX_PARAMSを超えるパラメータが無視される | E-02 (lines 337-338, 368-369) | ○ |
| C-20 | Parser.collectで中間文字が収集される | E-02 (lines 313-322) | ○ |
| C-21 | Parser.collectで中間文字が上限に達した場合は警告が出力される | E-02 (lines 314-317) | ○ |
| C-22 | Parser.clearでパーサー状態がクリアされる | E-02 (lines 409-415) | ○ |
| C-23 | Screen.initでスクリーンが正しく初期化される | E-03 (lines 277-319) | ○ |
| C-24 | Screen.initでスクロールバック0での初期化ができる | E-03 (lines 298) | ○ |
| C-25 | Screen.deinitでリソースが正しく解放される | E-03 (lines 321-327) | ○ |
| C-26 | Screen.resetでスクリーンがリセットされる | E-03 (lines 367-398) | ○ |
| C-27 | Screen.assertIntegrityで整合性チェックが通る | E-03 (lines 333-354) | ○ |
| C-28 | Screen.cloneでスクリーンが正しくクローンされる | E-03 (lines 431-474) | ○ |
| C-29 | Cursor.deinitでカーソルリソースが解放される | E-03 (lines 178-183) | ○ |
| C-30 | PageList.initでページリストが初期化される | E-04 (lines 358-418) | ○ |
| C-31 | PageList.initでmax_size指定での初期化ができる | E-04 (lines 349-358) | ○ |
| C-32 | PageList.deinitでページリストが解放される | E-04 | ○ |
| C-33 | PageList.minMaxSizeで最小最大サイズが計算される | E-04 (lines 233-274) | ○ |
| C-34 | PageList.initialCapacityで初期容量が計算される | E-04 (lines 284-318) | ○ |
| C-35 | PageList.initialCapacityで大きなcols値が処理される | E-04 (lines 294-318) | ○ |
| C-36 | MemoryPool.initでメモリプールが初期化される | E-04 (lines 85-102) | ○ |
| C-37 | MemoryPool.deinitでメモリプールが解放される | E-04 (lines 104-108) | ○ |
| C-38 | Selection.initで選択領域が初期化される | E-05 (lines 55-67) | ○ |
| C-39 | Selection.deinitで選択領域が解放される | E-05 (lines 69-81) | ○ |
| C-40 | Selection.eqlで同一選択領域が比較される | E-05 (lines 84-88) | ○ |
| C-41 | Selection.eqlで異なる選択領域が比較される | E-05 (lines 84-88) | ○ |
| C-42 | Selection.orderでforward順序が判定される | E-05 (lines 200-223) | ○ |
| C-43 | Selection.orderでreverse順序が判定される | E-05 (lines 200-223) | ○ |
| C-44 | Selection.topLeftで左上座標が取得される | E-05 (lines 151-166) | ○ |
| C-45 | Selection.bottomRightで右下座標が取得される | E-05 (lines 169-184) | ○ |
| C-46 | Selection.containsで点が選択内に含まれるか判定される | E-05 (lines 252-280) | ○ |
| C-47 | Selection.containsで点が選択外か判定される | E-05 (lines 252-280) | ○ |
| C-48 | Selection.trackでトラッキング選択に変換される | E-05 (lines 130-148) | ○ |
| C-49 | Page.initでページが初期化される | E-06 (lines 167-187) | ○ |
| C-50 | Page.initBufでバッファからページが初期化される | E-06 (lines 191-242) | ○ |
| C-51 | Page.deinitでページが解放される | E-06 (lines 247-250) | ○ |
| C-52 | Page.reinitでページが再初期化される | E-06 (lines 253-258) | ○ |
| C-53 | Page.assertIntegrityでページ整合性がチェックされる | E-06 (lines 296-300) | ○ |
| C-54 | Page.assertIntegrityで行数0のページがエラーになる | E-06 (lines 260-278) | ○ |
| C-55 | Page.assertIntegrityで列数0のページがエラーになる | E-06 (lines 260-278) | ○ |
| C-56 | SGR Parser.nextでunset属性がパースされる | E-07 (lines 185-197, 239) | ○ |
| C-57 | SGR Parser.nextでbold属性がパースされる | E-07 (lines 241) | ○ |
| C-58 | SGR Parser.nextでitalic属性がパースされる | E-07 (lines 245) | ○ |
| C-59 | SGR Parser.nextでunderline属性がパースされる | E-07 (lines 247-283) | ○ |
| C-60 | SGR Parser.nextで下線スタイルが指定される | E-07 (lines 248-280) | ○ |
| C-61 | SGR Parser.nextで256色前景色がパースされる | E-07 | ○ |
| C-62 | SGR Parser.nextでRGB前景色がパースされる | E-07 | ○ |
| C-63 | SGR Parser.nextでreset_boldがパースされる | E-07 (line 297) | ○ |
| C-64 | SGR Parser.nextでinverse属性がパースされる | E-07 (line 289) | ○ |
| C-65 | SGR Parser.nextで不明なSGRコードが処理される | E-07 (lines 220-236) | ○ |
| C-66 | color defaultでデフォルトパレットが生成される | E-08 (lines 8-45) | ○ |
| C-67 | Name.defaultで名前付き色のデフォルト値が返される | E-08 (lines 295-300) | ○ |
| C-68 | DynamicPalette.setでパレット色が設定される | E-08 (lines 201-204) | ○ |
| C-69 | DynamicPalette.resetでパレット色がリセットされる | E-08 (lines 207-210) | ○ |
| C-70 | DynamicPalette.resetAllで全パレットがリセットされる | E-08 (lines 213-215) | ○ |
| C-71 | DynamicRGB.getでRGB値が取得される | E-08 (lines 252-254) | ○ |
| C-72 | DynamicRGB.getでデフォルト値が取得される | E-08 (lines 252-254) | ○ |
| C-73 | generate256Colorで256色パレットが生成される | E-08 (lines 88-174) | △ |
| C-74 | Tabstops.initでタブストップが初期化される | E-09 (lines 62-71) | ○ |
| C-75 | Tabstops.setでタブストップが設定される | E-09 (lines 79-90) | ○ |
| C-76 | Tabstops.unsetでタブストップが解除される | E-09 (lines 93-104) | ○ |
| C-77 | Tabstops.getでタブストップが取得される(存在) | E-09 (lines 107-120) | ○ |
| C-78 | Tabstops.getでタブストップが取得される(不在) | E-09 (lines 107-120) | ○ |
| C-79 | Tabstops.resizeでタブストップがリサイズされる | E-09 (lines 128-160) | ○ |
| C-80 | Tabstops.resizeでpreallocサイズ内リサイズが処理される | E-09 (lines 136-139) | ○ |
| C-81 | Tabstops.resetでタブストップがリセットされる | E-09 (lines 169-179) | ○ |
| C-82 | UTF8Decoder.nextでASCII文字がデコードされる | E-10 (lines 56-84) | ○ |
| C-83 | UTF8Decoder.nextでマルチバイトUTF-8がデコードされる | E-10 (lines 56-84) | ○ |
| C-84 | UTF8Decoder.nextで不正UTF-8シーケンスが処理される | E-10 (lines 75-80) | ○ |
| C-85 | UTF8Decoder.nextで途切れたシーケンスが処理される | E-10 (lines 75-80) | ○ |
| C-86 | OSC Parser.resetでパーサーがリセットされる | E-11 | ○ |
| C-87 | OSC Parser.nextでOSC文字が処理される | E-11 | ○ |
| C-88 | OSC Parser.endでOSCシーケンスが終了する | E-11 | ○ |
| C-89 | Command.change_window_titleでウィンドウタイトルが設定される | E-11 (lines 38-39) | ○ |
| C-90 | Command.clipboard_contentsでクリップボードが操作される | E-11 (lines 52-55) | ○ |
| C-91 | Command.report_pwdでPWDが報告される | E-11 (lines 61-65) | ○ |
| C-92 | Command.hyperlink_startでハイパーリンクが開始される | E-11 (lines 101-104) | ○ |
| C-93 | Command.hyperlink_endでハイパーリンクが終了する | E-11 (lines 107) | ○ |
| C-94 | Coordinate.eqlで座標の等価比較ができる(同一) | E-12 (lines 79-81) | ○ |
| C-95 | Coordinate.eqlで座標の等価比較ができる(異なる) | E-12 (lines 79-81) | ○ |
| C-96 | Point.coordで座標が取得される | E-12 (lines 58-66) | ○ |
| C-97 | ModeState.setでモードが設定される | E-13 (lines 36-43) | ○ |
| C-98 | ModeState.getでモードが取得される | E-13 (lines 46-53) | ○ |
| C-99 | ModeState.saveでモード状態が保存される | E-13 (lines 59-66) | ○ |
| C-100 | ModeState.restoreでモード状態が復元される | E-13 (lines 69-77) | ○ |
| C-101 | ModeState.resetでモード状態がリセットされる | E-13 (lines 30-33) | ○ |
| C-102 | modeFromIntで整数からモードが変換される | E-13 (lines 146-158) | ○ |
| C-103 | modeFromIntで不正な整数がnullになる | E-13 (lines 146-158) | ○ |
| C-104 | charsets.tableでASCIIテーブルが取得される | E-14 (lines 27-40) | ○ |
| C-105 | charsets.tableでDEC特殊文字テーブルが取得される | E-14 (lines 53-87) | ○ |
| C-106 | charsets.tableでBritish文字セットが取得される | E-14 (lines 46-50) | ○ |
| C-107 | Hyperlink.deinitでハイパーリンクが解放される | E-15 (lines 45-51) | ○ |
| C-108 | Hyperlink.dupeでハイパーリンクが複製される | E-15 (lines 56-73) | ○ |
| C-109 | PageEntry.dupeでページエントリが複製される | E-15 (lines 94-141) | ○ |
| C-110 | PageEntry.hashでページエントリのハッシュが計算される | E-15 (lines 143-150) | ○ |
| C-111 | stream.Actionでアクション列挙が定義されている | E-16 (lines 35-128) | △ |
| C-112 | MouseEvents.motionでbutton時にtrueが返される | E-01 (lines 177-179) | ○ |
| C-113 | MouseEvents.motionでany時にtrueが返される | E-01 (lines 177-179) | ○ |
| C-114 | MouseEvents.motionでnone時にfalseが返される | E-01 (lines 177-179) | ○ |
| C-115 | ScrollingRegionでスクロール領域が設定される | E-01 (lines 192-205) | ○ |
| C-116 | Colors.defaultでデフォルトカラーが設定される | E-01 (lines 138-144) | ○ |
| C-117 | SemanticPrompt.disabledでセマンティックプロンプトが無効化される | E-03 (lines 108-111) | ○ |
| C-118 | Screen.Dirtyでダーティフラグが管理される | E-03 (lines 84-92) | ○ |
| C-119 | Viewport.activeでアクティブビューポートが参照される | E-04 (lines 207-221) | ○ |
| C-120 | Viewport.pinでピン固定ビューポートが参照される | E-04 (lines 207-221) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-73 (generate256Color)**: CIELAB色空間での補間ロジックは複雑であり、詳細なアルゴリズム検証が必要
  - 候補: 色空間変換のユニットテスト / LAB補間の数学的検証 / 視覚的確認テスト
- **C-111 (Action列挙)**: 129種類のアクションが定義されているが、全てのアクション種別の網羅性確認が必要
  - 候補: 全アクション種別のリスト化 / 実装との対応確認 / 欠落アクションの特定

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - Terminal/Parser/Screen/PageList: 基本的なVTエミュレーション機能、既存テストコードあり
- **0: 低リスク** - SGR/Color/Modes: 標準的な属性処理、明確な仕様あり
- **1: 中リスク** - Selection: 座標計算やトラッキングに複雑なロジックあり
- **1: 中リスク** - Hyperlink: ページ間でのメモリ管理が必要
- **1: 中リスク** - OSC: 多様なコマンド種別があり、エッジケースの考慮が必要
- **0: 低リスク** - UTF8Decoder/Tabstops/Charsets: 単純なデータ変換、境界値テストで十分

## 6) レビュアーチェックリスト（最小）
- [ ] Terminal.init/deinit のメモリリークがないことを確認
- [ ] Parser の状態遷移が VT100.net 仕様に準拠しているか確認
- [ ] Screen.clone で選択領域とカーソル位置が正しくコピーされるか確認
- [ ] PageList のメモリ制限が正しく機能するか確認
- [ ] Selection の座標計算が rectangle モードで正しく動作するか確認
- [ ] SGR パーサーが全ての標準属性をサポートしているか確認
- [ ] UTF8Decoder がエラー置換文字を正しく出力するか確認
- [ ] OSC コマンドのセキュリティ考慮（クリップボード操作等）を確認
- [ ] Hyperlink の ID 管理でメモリリークがないか確認
- [ ] generate256Color の色補間が視覚的に妥当か確認
