---
generated_at: 2026-02-19 12:00:00
metrics:
  claims_total: 18
  claims_with_evidence: 16
  claims_without_evidence: 2
confidence_derived: 0.89
---

# 根拠レポート：31-client_registerCapability

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.89**
  - 根拠あり：16 / 18、根拠なし：2
- 優先レビュー（高）
  1. **C-15 リトライなし**：コード上明示的なリトライ機構は確認できないが、Fiber yieldベースの待機がリトライと誤解される可能性
  2. **C-18 serve-d内の唯一の呼び出し元がprofilegc.d**：source/配下の検索結果に基づくが、他のプロジェクトや動的生成コードからの呼び出し可能性を完全に否定できない

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

- E-01: `lsp/source/served/lsp/jsonrpc.d` L229-L270（registerCapabilityAsync/Sync メソッド定義）
- E-02: `lsp/source/served/lsp/jsonrpc.d` L257（`sendMethod("client/registerCapability", params)` 呼び出し）
- E-03: `protocol/source/served/lsp/protocol.d` L2202-L2214（Registration/RegistrationParams 構造体定義）
- E-04: `protocol/source/served/lsp/protocol.d` L2344-L2377（FileSystemWatcher/DidChangeWatchedFilesRegistrationOptions 定義）
- E-05: `protocol/source/served/lsp/protocol.d` L2368-L2371（DidChangeWatchedFilesClientCapabilities 定義）
- E-06: `source/served/workers/profilegc.d` L131-L150（setupProfileGCWatchers 関数）
- E-07: `source/served/workers/profilegc.d` L139-L147（registerCapabilitySync 呼び出し）
- E-08: `source/served/extension.d` L475（emitExtensionEvent!onRegisteredComponents 呼び出し）
- E-09: `source/served/types.d` L610-L613（onRegisteredComponents UDA 定義）
- E-10: `source/served/types.d` L354（capabilities グローバル変数定義）
- E-11: `lsp/source/served/lsp/jsonrpc.d` L310-L324（sendMethodRaw メソッド）
- E-12: `lsp/source/served/lsp/jsonrpc.d` L145-L169（sendRawPacket メソッド）
- E-13: `lsp/source/served/lsp/jsonrpc.d` L444-L448（awaitResponse メソッド）
- E-14: `lsp/source/served/lsp/jsonrpc.d` L225-L226（deprecated alias registerCapability）
- E-15: `lsp/source/served/lsp/jsonrpc.d` L247-L250（static assert によるフィールド名検証）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | client/registerCapabilityはLSP標準のサーバーからクライアントへのリクエストである | E-02, E-03 | ○ |
| C-02 | jsonrpc.dのregisterCapabilityAsync/registerCapabilitySync経由で送信される | E-01 | ○ |
| C-03 | RegistrationParams構造体にRegistration配列が含まれる | E-03 | ○ |
| C-04 | Registration構造体はid, method, registerOptionsの3フィールドを持つ | E-03 | ○ |
| C-05 | serve-dではProfileGCログファイル監視の動的登録に使用されている | E-06, E-07 | ○ |
| C-06 | 登録ID "profilegc.watchfiles"、メソッド "workspace/didChangeWatchedFiles"、パターン "**/profilegc.log" で呼び出される | E-07 | ○ |
| C-07 | dynamicRegistrationがtrueの場合にのみ送信される | E-06 (L134-L137) | ○ |
| C-08 | onRegisteredComponentsイベント発火時に送信される | E-06 (L131), E-08, E-09 | ○ |
| C-09 | extension.dの初期化処理でemitExtensionEvent!onRegisteredComponentsが呼ばれる | E-08 | ○ |
| C-10 | registerCapabilitySyncはregisterCapabilityAsync + awaitResponseのラッパーである | E-01 (L261-L270) | ○ |
| C-11 | registerCapabilityAsync内でテンプレート構造体RegistrationT/RegistrationParamsTが定義される | E-01 (L233-L245) | ○ |
| C-12 | static assertでフィールド名の一致が検証される | E-15 | ○ |
| C-13 | sendMethodでRequestToken.next()による一意ID生成が行われる | E-11 (L312) | ○ |
| C-14 | 失敗時にerror("Failed to dynamically register GC watchers")が出力される | E-06 (L148) | ○ |
| C-15 | リトライ機構はない | E-01 | △ |
| C-16 | 旧APIのregisterCapabilityはdeprecatedである | E-14 | ○ |
| C-17 | capabilitiesはtypes.dのグローバル変数として定義されている | E-10 | ○ |
| C-18 | serve-d内の唯一の呼び出し元がprofilegc.dのsetupProfileGCWatchers() | E-06, E-07 | △ |

## 4) 不足情報（Unknown / Missing）
- C-15: リトライ機構の不在は、コード上に明示的なリトライループやリトライ設定が見当たらないことから推測しているが、外部フレームワーク層やFiber再実行による暗黙的なリトライ機構が存在しないことを完全には証明できない
  - 候補：Fiber実行エンジンの再実行ロジック / RPCProcessor の上位レイヤーでのエラーハンドリング
- C-18: `source/` ディレクトリ配下のgrep検索では `profilegc.d` のみが呼び出し元として特定されたが、テストコードや他のサブプロジェクト（null_serverなど）、あるいはD言語のテンプレートメタプログラミングによる間接的な呼び出しが存在する可能性を完全に排除できない
  - 候補：テストプロジェクト / null_server / プラグイン拡張機構

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - データ構造の定義（C-01〜C-04）はソースコードから直接確認可能
- 0: 低リスク - 送信トリガーと条件（C-07〜C-09）はソースコードのUDAとイベント発火箇所から確認可能
- 1: 中リスク - C-15 リトライ機構の不在は推定に基づく。Fiberベースの非同期処理では上位層でのリトライが隠蔽されている可能性がある
- 1: 中リスク - C-18 唯一の呼び出し元という主張は、grep検索の範囲に依存する。別プロジェクトや将来の拡張で呼び出し元が追加される可能性がある

## 6) レビュアーチェックリスト（最小）
- [ ] C-06: 実際のProfileGC監視登録パラメータ（ID, メソッド名, globパターン）がコードと一致するか確認
- [ ] C-07: dynamicRegistrationの判定ロジックがLSP仕様と整合しているか確認
- [ ] C-15: リトライ機構の不在について、上位レイヤーでの再試行がないことを確認
- [ ] C-18: serve-d内で `registerCapabilityAsync` / `registerCapabilitySync` の呼び出し元が他に存在しないことを再確認
- [ ] 処理フロー図がコードの実際の呼び出し順序と一致しているか確認
