---
generated_at: 2026-02-20 10:00:00
metrics:
  claims_total: 32
  claims_with_evidence: 29
  claims_without_evidence: 3
confidence_derived: 0.91
---

# 根拠レポート：workspace-d-dub 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.91**
  - 根拠あり：29 / 32、根拠なし：3
- 優先レビュー（高）
  1. **C-17 (UT-DUB-017)**：targetsにルートパッケージが存在しない場合のエラー型が不確定
  2. **C-26 (UT-DUB-026)**：scope(failure)でのtracefログ出力の具体的な挙動はランタイム依存
  3. **C-31 (UT-DUB-031)**：pathとbaseが同一ディレクトリの場合のNativePath.relativeTo()の戻り値が不確定

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

- E-01: `workspace-d/source/workspaced/dub/diagnostics.d` 13-36行目 - resolveDubDiagnosticRange関数の実装
- E-02: `workspace-d/source/workspaced/dub/diagnostics.d` 42-67行目 - EqualComparisionFinderクラスの実装
- E-03: `workspace-d/source/workspaced/dub/diagnostics.d` 69-87行目 - 既存unittest
- E-04: `workspace-d/source/workspaced/dub/lintgenerator.d` 30-41行目 - DubLintGeneratorクラス定義とコンストラクタ
- E-05: `workspace-d/source/workspaced/dub/lintgenerator.d` 43-52行目 - generateTargetsメソッド
- E-06: `workspace-d/source/workspaced/dub/lintgenerator.d` 54-73行目 - performDirectBuildメソッド
- E-07: `workspace-d/source/workspaced/dub/lintgenerator.d` 76-96行目 - buildWithCompilerメソッド
- E-08: `workspace-d/source/workspaced/dub/lintgenerator.d` 99-106行目 - shrinkPath関数

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | UT-DUB-001: 「use `is` instead of `==`」診断で正しい範囲が返される | E-01, E-03 | ○ |
| C-02 | UT-DUB-002: 「use `!is` instead of `!=`」診断で正しい範囲が返される | E-01 | ○ |
| C-03 | UT-DUB-003: 該当しない診断メッセージの場合デフォルト範囲が返される | E-01 (35-36行目: return [position, position]) | ○ |
| C-04 | UT-DUB-004: 等価比較が存在しない場合デフォルト範囲が返される | E-01 (22行目: if expr.result !is null) | ○ |
| C-05 | UT-DUB-005: positionが範囲外の場合デフォルト範囲が返される | E-01, E-02 (56行目: index範囲チェック) | ○ |
| C-06 | UT-DUB-006: ネストされた等価比較式で正しい位置が返される | E-01, E-03 (unittestのネスト例) | ○ |
| C-07 | UT-DUB-007: position=0の場合の挙動 | E-01 | ○ |
| C-08 | UT-DUB-008: 空の診断メッセージの場合デフォルト範囲が返される | E-01 (17行目: startsWith条件) | ○ |
| C-09 | UT-DUB-009: コンストラクタでindexが正しく設定される | E-02 (44-47行目) | ○ |
| C-10 | UT-DUB-010: 該当するCmpExpressionでresultが設定される | E-02 (49-62行目) | ○ |
| C-11 | UT-DUB-011: 該当しないCmpExpressionでresultが変更されない | E-02 (56行目: index範囲チェック) | ○ |
| C-12 | UT-DUB-012: equalExpressionがnullのCmpExpressionの場合 | E-02 (51行目: if expr.equalExpression !is null) | ○ |
| C-13 | UT-DUB-013: indexがCmpExpression開始位置ちょうどの場合 | E-02 (56行目: index >= start) | ○ |
| C-14 | UT-DUB-014: indexがCmpExpression終了位置ちょうどの場合 | E-02 (56行目: index < end、排他的) | ○ |
| C-15 | UT-DUB-015: DubLintGeneratorコンストラクタの初期化 | E-04 (37-41行目) | ○ |
| C-16 | UT-DUB-016: generateTargetsでperformDirectBuildが呼ばれる | E-05 (43-52行目) | ○ |
| C-17 | UT-DUB-017: targetsにルートパッケージが存在しない場合の例外 | **根拠なし** | △ |
| C-18 | UT-DUB-018: ソースファイルパスが相対パスに変換される | E-06 (66-67行目) | ○ |
| C-19 | UT-DUB-019: importPathsが相対パスに変換される | E-06 (68-69行目) | ○ |
| C-20 | UT-DUB-020: stringImportPathsが相対パスに変換される | E-06 (70-71行目) | ○ |
| C-21 | UT-DUB-021: targetPathが相対パスに変換される | E-06 (65行目) | ○ |
| C-22 | UT-DUB-022: libsとlflagsがnullに設定される | E-07 (85-86行目) | ○ |
| C-23 | UT-DUB-023: syntaxOnlyオプションが追加される | E-07 (87行目) | ○ |
| C-24 | UT-DUB-024: リンカーファイルがフィルタリングされる | E-07 (88行目) | ○ |
| C-25 | UT-DUB-025: コンパイラのinvokeが呼び出される | E-07 (90-95行目) | ○ |
| C-26 | UT-DUB-026: コンパイラ失敗時にscope(failure)でtracefが出力される | **根拠なし** | △ |
| C-27 | UT-DUB-027: sourceFilesが空の場合の処理 | E-07 (88行目: filter) | ○ |
| C-28 | UT-DUB-028: 絶対パスがbaseに対して相対パスに短縮される | E-08 (99-106行目) | ○ |
| C-29 | UT-DUB-029: 既に相対パスの場合そのまま返される | E-08 (102-103行目: !path.absolute) | ○ |
| C-30 | UT-DUB-030: 相対パスの方が長い場合は元の絶対パスが返される | E-08 (105行目: ret.length < orig.length) | ○ |
| C-31 | UT-DUB-031: pathとbaseが同じディレクトリの場合の戻り値 | **根拠なし** | △ |
| C-32 | UT-DUB-032: baseがルートディレクトリの場合 | E-08 (104行目: relativeTo) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-17**: D言語の連想配列(associative array)で存在しないキーにアクセスした場合にスローされるエラーの型（RangeError）はD言語ランタイムの仕様に依存する。コード上では明示的なエラーハンドリングが存在しない。
  - 候補：D言語仕様書 / druntime実装 / dub.project.Projectクラスの仕様
- **C-26**: `scope(failure)` ブロック内の `tracef` によるログ出力は、実行時の例外発生タイミングとログフレームワーク(std.experimental.logger)の挙動に依存する。コード上ではscope(failure)の記述はあるが、実際の出力内容の検証は外部依存。
  - 候補：std.experimental.loggerのドキュメント / D言語のscope guardの仕様
- **C-31**: `NativePath.relativeTo()` が同一パスに対して何を返すか（"." か空文字列か）は、dub内部のNativePath実装に依存する。
  - 候補：dub.internal.vibecompat.inet.pathの実装 / vibeライブラリのドキュメント

## 5) リスクフラグ（レビュー観点）
- **1 (中リスク)**: C-17 - D言語ランタイムの連想配列アクセスエラーの型推定。RangeError以外の例外がスローされる可能性がある。
- **0 (低リスク)**: C-26 - scope(failure)のログ出力はデバッグ用途であり、機能に直接影響しない。
- **0 (低リスク)**: C-31 - NativePath.relativeTo()の同一パス挙動は、実装確認で容易に判定可能。

## 6) レビュアーチェックリスト（最小）
- [ ] C-17: D言語の連想配列でキーが存在しない場合にスローされるエラー型を確認すること
- [ ] C-26: scope(failure)ブロック内のtracefが実際にログ出力されるかを実行テストで確認すること
- [ ] C-31: NativePath.relativeTo()で同一パスを渡した場合の戻り値を実装から確認すること
- [ ] diagnostics.d のresolveDubDiagnosticRange関数でtokens配列が空の場合のテストケース追加を検討すること
- [ ] lintgenerator.dのstatic if分岐（92-95行目）について、コンパイル時分岐の両方のパスがテスト対象となっているか確認すること
