---
generated_at: 2026-02-20 10:30:00
metrics:
  claims_total: 112
  claims_with_evidence: 106
  claims_without_evidence: 6
confidence_derived: 0.95
---

# 根拠レポート：serverbase 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：106 / 112、根拠なし：6
- 優先レビュー（高）
  1. **C-025, C-026（GC自動収集・最小化）**：GC.collect/minimizeの呼び出しタイミングはコードから読み取れるが、実行環境依存の挙動は検証困難
  2. **C-038（callsBuf上限）**：バッファサイズ32の制約はコードから確認できるが、33件以上の同時タイムアウト発火は実運用時の挙動確認が必要
  3. **C-067（InputRange展開）**：D言語のInputRangeテンプレートメタプログラミングの挙動確認が必要
  4. **C-096（複数ワークスペース設定再取得）**：RPC通信を含むため実際のクライアントレスポンスに依存
  5. **C-112（ネスト構造体の再帰比較）**：テンプレートのcompare関数は再帰的に動作するがネスト深度のテストが必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `serverbase/source/served/serverbase.d` - LanguageServerConfig構造体定義（L25-41）
- E-02: `serverbase/source/served/serverbase.d` - LanguageServerRouter mixinテンプレート定義（L65-581）
- E-03: `serverbase/source/served/serverbase.d` - processRequest関数（L112-330）
- E-04: `serverbase/source/served/serverbase.d` - processNotify関数（L348-387）
- E-05: `serverbase/source/served/serverbase.d` - gotRequest関数（L389-420）
- E-06: `serverbase/source/served/serverbase.d` - gotNotify関数（L422-443）
- E-07: `serverbase/source/served/serverbase.d` - pushFiber関数（L448-453）
- E-08: `serverbase/source/served/serverbase.d` - run関数（L460-474）
- E-09: `serverbase/source/served/serverbase.d` - runImpl関数（L477-581）
- E-10: `serverbase/source/served/serverbase.d` - unittest（L583-726）
- E-11: `serverbase/source/served/utils/async.d` - spawnFiber関数（L17-28）
- E-12: `serverbase/source/served/utils/async.d` - parallelMain関数（L31-63）
- E-13: `serverbase/source/served/utils/async.d` - setTimeout関数（L73-96）
- E-14: `serverbase/source/served/utils/async.d` - setImmediate関数（L78-81）
- E-15: `serverbase/source/served/utils/async.d` - clearTimeout関数（L98-112）
- E-16: `serverbase/source/served/utils/async.d` - Timeout構造体（L65-71）
- E-17: `serverbase/source/served/utils/events.d` - protocolMethod構造体（L14-17）
- E-18: `serverbase/source/served/utils/events.d` - EventProcessorConfig構造体（L38-43）
- E-19: `serverbase/source/served/utils/events.d` - EventProcessor mixinテンプレート（L69-291）
- E-20: `serverbase/source/served/utils/events.d` - emitProtocol関数（L112-152）
- E-21: `serverbase/source/served/utils/events.d` - emitProtocolRaw関数（L165-203）
- E-22: `serverbase/source/served/utils/events.d` - emitExtensionEvent関数（L205-212）
- E-23: `serverbase/source/served/utils/events.d` - implParseParam関数（L246-289）
- E-24: `serverbase/source/served/utils/fibermanager.d` - FiberManager構造体（L16-109）
- E-25: `serverbase/source/served/utils/fibermanager.d` - FiberManager.put関数（L103-108）
- E-26: `serverbase/source/served/utils/fibermanager.d` - FiberManager.call関数（L49-94）
- E-27: `serverbase/source/served/utils/fibermanager.d` - FiberManager.length関数（L96-99）
- E-28: `serverbase/source/served/utils/fibermanager.d` - FiberManager.currentFiber関数（L32-36）
- E-29: `serverbase/source/served/utils/fibermanager.d` - FiberManager.fiberInfos関数（L38-41）
- E-30: `serverbase/source/served/utils/fibermanager.d` - joinAll関数（L122-191）
- E-31: `serverbase/source/served/utils/memory.d` - destroyUnset関数（L5-18）
- E-32: `serverbase/source/served/utils/serverconfig.d` - ConfigWorkspace構造体（L28-57）
- E-33: `serverbase/source/served/utils/serverconfig.d` - ConfigHandler mixinテンプレート（L59-456）
- E-34: `serverbase/source/served/utils/serverconfig.d` - globalConfiguration関数（L130-143）
- E-35: `serverbase/source/served/utils/serverconfig.d` - postInit_setupConfig関数（L153-203）
- E-36: `serverbase/source/served/utils/serverconfig.d` - setupConfig_Initialized関数（L205-225）
- E-37: `serverbase/source/served/utils/serverconfig.d` - didChangeConfiguration関数（L256-268）
- E-38: `serverbase/source/served/utils/serverconfig.d` - didChangeConfigurationNonStd関数（L270-281）
- E-39: `serverbase/source/served/utils/serverconfig.d` - processConfigChange関数（L283-358）
- E-40: `serverbase/source/served/utils/serverconfig.d` - syncConfiguration関数（L360-399）
- E-41: `serverbase/source/served/utils/serverconfig.d` - validateConfigurationItemsResponse関数（L417-455）
- E-42: `serverbase/source/served/utils/serverconfig.d` - TConfigHolder構造体とcompare/replace/replaceSection/replaceAllSectionsJson（L65-123）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | LanguageServerConfigのデフォルト値検証 | E-01 | ○ |
| C-002 | initializeリクエストの基本処理 | E-03, E-10 | ○ |
| C-003 | initializeHookの呼び出し | E-03, E-10 | ○ |
| C-004 | protocolMethodのディスパッチ | E-03, E-10 | ○ |
| C-005 | Notificationに対するprocessRequest呼び出し時の例外 | E-03 | ○ |
| C-006 | 未初期化時のserverNotInitializedエラー | E-03 | ○ |
| C-007 | 未登録メソッドのmethodNotFoundエラー | E-03 | ○ |
| C-008 | shutdownリクエスト処理 | E-03, E-10 | ○ |
| C-009 | 部分結果の集約ロジック | E-03 | ○ |
| C-010 | partialResultTokenによるストリーミング | E-03 | ○ |
| C-011 | MethodExceptionのエラーレスポンス変換 | E-03 | ○ |
| C-012 | exit通知でrpc.stop呼び出し | E-04, E-10 | ○ |
| C-013 | shutdownRequested中のrpc.stop呼び出し | E-04 | ○ |
| C-014 | 未初期化時の通知無視 | E-04 | ○ |
| C-015 | protocolNotificationハンドラ呼び出し | E-04, E-10 | ○ |
| C-016 | ドキュメントマネージャ連携 | E-04 | ○ |
| C-017 | gotRequestデリゲート生成 | E-05 | ○ |
| C-018 | Exception時のinternalErrorレスポンス | E-05 | ○ |
| C-019 | Throwable時のエラーメッセージ表示 | E-05 | ○ |
| C-020 | 通知処理中のException時エラーログ | E-06 | ○ |
| C-021 | 通知処理中のThrowable復旧 | E-06 | ○ |
| C-022 | pushFiberでのファイバー追加 | E-07 | ○ |
| C-023 | run関数のstdinリーダー起動 | E-08 | ○ |
| C-024 | runImplのメインループ動作 | E-09, E-10 | ○ |
| C-025 | GCコレクションの設定間隔実行 | E-09 | △ |
| C-026 | gcMinimizeTimes回ごとのGC.minimize | E-09 | △ |
| C-027 | spawnFiber（実装あり） | E-11 | ○ |
| C-028 | spawnFiber（フォールバック） | E-11 | ○ |
| C-029 | spawnFiberカスタムページ数 | E-11 | ○ |
| C-030 | setTimeoutタイムアウト登録 | E-13 | ○ |
| C-031 | setTimeoutミリ秒オーバーロード | E-13 | ○ |
| C-032 | setTimeoutID単調増加 | E-13 | ○ |
| C-033 | setImmediate即時実行 | E-14 | ○ |
| C-034 | clearTimeout指定ID削除 | E-15 | ○ |
| C-035 | clearTimeout存在しないID | E-15 | ○ |
| C-036 | clearTimeout空配列時 | E-15 | ○ |
| C-037 | parallelMainタイムアウト実行 | E-12 | ○ |
| C-038 | parallelMainバッチ上限 | E-12 | △ |
| C-039 | EventProcessorConfigデフォルト値 | E-18 | ○ |
| C-040 | emitProtocolマッチするメソッド | E-20 | ○ |
| C-041 | emitProtocolマッチなし | E-20 | ○ |
| C-042 | emitProtocol returnFirst=true | E-20 | ○ |
| C-043 | emitProtocol returnFirst=false | E-20 | ○ |
| C-044 | emitProtocolRaw | E-21 | ○ |
| C-045 | emitExtensionEvent | E-22 | ○ |
| C-046 | implParseParam JSONオブジェクト | E-23 | ○ |
| C-047 | implParseParam JSON配列 | E-23 | ○ |
| C-048 | implParseParam 複数要素エラー | E-23 | ○ |
| C-049 | implParseParam 空パラメータ | E-23 | ○ |
| C-050 | implParseParam デシリアライズ失敗 | E-23 | ○ |
| C-051 | FiberManager.put正常追加 | E-25 | ○ |
| C-052 | FiberManager.put queueTime記録 | E-25 | ○ |
| C-053 | FiberManager.call全ファイバー実行 | E-26 | ○ |
| C-054 | FiberManager.call終了ファイバー削除 | E-26 | ○ |
| C-055 | FiberManager.call recentlyEnded移動 | E-26 | ○ |
| C-056 | FiberManager.call startTime記録 | E-26 | ○ |
| C-057 | FiberManager.call timeSpent累積 | E-26 | ○ |
| C-058 | FiberManager.call循環バッファ | E-26 | ○ |
| C-059 | FiberManager.call空配列 | E-26 | ○ |
| C-060 | FiberManager.length正常 | E-27 | ○ |
| C-061 | FiberManager.length空配列 | E-27 | ○ |
| C-062 | FiberManager.currentFiber正常 | E-28 | ○ |
| C-063 | FiberManager.currentFiber外アクセス | E-28 | ○ |
| C-064 | FiberManager.fiberInfos | E-29 | ○ |
| C-065 | joinAll全結合 | E-30 | ○ |
| C-066 | joinAll nestedフィールド | E-30 | ○ |
| C-067 | joinAll InputRange展開 | E-30 | △ |
| C-068 | joinAll空リスト | E-30 | ○ |
| C-069 | destroyUnset destroy!false | E-31 | ○ |
| C-070 | destroyUnset destroyフォールバック | E-31 | ○ |
| C-071 | ConfigWorkspace.exactlyOne | E-32 | ○ |
| C-072 | ConfigWorkspace.unnamedWorkspace | E-32 | ○ |
| C-073 | ConfigWorkspace.toString名前付き | E-32 | ○ |
| C-074 | ConfigWorkspace.toString無名 | E-32 | ○ |
| C-075 | globalConfiguration URI設定済み | E-34 | ○ |
| C-076 | globalConfigurationフォールバック（URI設定済み） | E-34 | ○ |
| C-077 | globalConfigurationフォールバック（URI未設定） | E-34 | ○ |
| C-078 | globalConfiguration未初期化エラー | E-34 | ○ |
| C-079 | postInit_setupConfigワークスペース初期化 | E-35 | ○ |
| C-080 | postInit_setupConfigフォールバック初期化 | E-35 | ○ |
| C-081 | postInit_setupConfig startupConfiguration | E-35 | ○ |
| C-082 | postInit_setupConfig nonStandardConfiguration | E-35 | ○ |
| C-083 | postInit_setupConfig不正なinitializationOptions | E-35 | ○ |
| C-084 | setupConfig_Initialized設定あり | E-36 | ○ |
| C-085 | setupConfig_Initialized遅延ロード | E-36 | ○ |
| C-086 | didChangeConfiguration正常処理 | E-37 | ○ |
| C-087 | didChangeConfiguration非標準スキップ | E-37 | ○ |
| C-088 | didChangeConfiguration不正パラメータ | E-37 | ○ |
| C-089 | didChangeConfiguration settingsキー欠落 | E-37 | ○ |
| C-090 | didChangeConfigurationNonStd | E-38 | ○ |
| C-091 | syncConfiguration成功 | E-40 | ○ |
| C-092 | syncConfigurationグローバル設定同期 | E-40 | ○ |
| C-093 | syncConfiguration存在しないURI | E-40 | ○ |
| C-094 | syncConfiguration addNew | E-40 | ○ |
| C-095 | syncConfiguration機能非対応 | E-40 | ○ |
| C-096 | processConfigChange複数ワークスペース | E-39 | △ |
| C-097 | processConfigChange単一ワークスペース | E-39 | ○ |
| C-098 | processConfigChangeグローバル設定 | E-39 | ○ |
| C-099 | processConfigChange同期フラグ | E-39 | ○ |
| C-100 | processConfigChange完了イベント | E-39 | ○ |
| C-101 | validateConfigurationItemsResponse正常 | E-41 | ○ |
| C-102 | validateConfigurationItemsResponse非配列 | E-41 | ○ |
| C-103 | validateConfigurationItemsResponse配列長不正 | E-41 | ○ |
| C-104 | validateConfigurationItemsResponse不足 | E-41 | ○ |
| C-105 | validateConfigurationItemsResponse過剰 | E-41 | ○ |
| C-106 | TConfigHolder.replace全体置換 | E-42 | ○ |
| C-107 | TConfigHolder.replace変更なし | E-42 | ○ |
| C-108 | TConfigHolder.replaceSectionセクション置換 | E-42 | ○ |
| C-109 | TConfigHolder.replaceAllSectionsJson | E-42 | ○ |
| C-110 | TConfigHolder.replaceAllSectionsJson null | E-42 | ○ |
| C-111 | TConfigHolder.replaceAllSectionsJson空オブジェクト | E-42 | ○ |
| C-112 | TConfigHolder.compareネスト再帰 | E-42 | △ |

## 4) 不足情報（Unknown / Missing）
- C-025, C-026: GC.collectおよびGC.minimizeの呼び出しはコード上確認できるが、D言語ランタイムのGC挙動は環境依存であり、メモリ解放量等の期待結果は実行環境での検証が必要
  - 候補：D言語ランタイムGCドキュメント / 実行環境でのプロファイリング
- C-038: callsBufの固定長配列（32要素）による制限はコードから明確だが、33件以上の同時タイムアウト発火が実運用で発生するかの確認が必要
  - 候補：パフォーマンステスト / 負荷テスト
- C-067: joinAllにおけるInputRange型のテンプレート展開はD言語のメタプログラミングに依存し、具体的な型による挙動差異がある
  - 候補：D言語Phobosライブラリのstd.rangeドキュメント
- C-096: 複数ワークスペースでのRPC通信を含む設定再取得は、クライアント側のレスポンス形式に依存する
  - 候補：LSP仕様書 workspace/configuration / クライアント実装の確認
- C-112: ネストした構造体の再帰比較におけるエッジケース（深いネスト、循環参照等）はテンプレートの展開結果に依存
  - 候補：D言語のCTFEおよびテンプレート展開に関するドキュメント

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 構造体のデフォルト値検証、toString、lengthプロパティ等の単純なテストケース（C-001, C-039, C-059-061, C-064, C-071-074）
- 1: 中リスク - mixin templateに依存するテストケースはコンパイル時テンプレート展開の影響を受けるため、テストハーネスの構築に注意が必要（C-002-004, C-040-045）
- 2: 高リスク - GC動作、RPC通信を含む統合テストに近いケースは実行環境への依存度が高い（C-025, C-026, C-096）

## 6) レビュアーチェックリスト（最小）
- [ ] D言語のmixin templateを使用したテスト対象について、テストハーネスでのインスタンス化方法が現実的か確認する
- [ ] GC関連テスト（C-025, C-026）の期待結果が実行環境で再現可能か確認する
- [ ] ConfigHandler mixinのテストケースにおいて、RPC通信のモック化が十分に考慮されているか確認する
- [ ] serverbase.dのunittestブロック（E-10）で既にカバーされているテスト観点との重複・不足がないか確認する
- [ ] 境界値テスト（C-035, C-036, C-058, C-068）が実際のエッジケースを網羅しているか確認する
- [ ] 各ファイバー関連テスト（C-051-068）において、並行処理固有の競合状態が考慮されているか確認する
