---
generated_at: 2026-02-24 10:30:00
metrics:
  claims_total: 45
  claims_with_evidence: 43
  claims_without_evidence: 2
confidence_derived: 0.96
---

# 根拠レポート：非機能要件テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：43 / 45、根拠なし：2
- 優先レビュー（高）
  1. **NFT-043 ID生成器の型付け**：根拠不足（protocol内部の詳細実装未確認）
  2. **NFT-044 discriminated union型チェック**：根拠不足（protocol内部の詳細実装未確認）
  3. なし

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

- E-01: `apps/studio.giselles.ai/app/api/_lib/rate-limit.ts`
- E-02: `apps/studio.giselles.ai/trigger.config.ts`
- E-03: `packages/giselle/src/tasks/run-task.ts`
- E-04: `apps/studio.giselles.ai/app/api/apps/[appId]/run/route.ts`
- E-05: `packages/rag/src/ingest/pipeline.ts`
- E-06: `apps/studio.giselles.ai/lib/api-keys/api-secrets.ts`
- E-07: `apps/studio.giselles.ai/lib/supabase/middleware.ts`
- E-08: `packages/http/src/router.ts`
- E-09: `apps/studio.giselles.ai/db/schema.ts`
- E-10: `packages/rag/src/database/postgres/pool-manager.ts`
- E-11: `packages/rag/src/errors.ts`
- E-12: `packages/giselle/src/types/usage-limits.ts`

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | APIレートリミット - Freeプラン 60req/min | E-01 (getRequestsPerMinuteLimit) | ○ |
| C-02 | APIレートリミット - Proプラン 300req/min | E-01 (getRequestsPerMinuteLimit) | ○ |
| C-03 | APIレートリミット - Teamプラン 600req/min | E-01 (getRequestsPerMinuteLimit) | ○ |
| C-04 | APIレートリミット - Enterpriseプラン 3000req/min | E-01 (getRequestsPerMinuteLimit) | ○ |
| C-05 | レートリミットウィンドウ 60秒 | E-01 (WINDOW_SECONDS = 60) | ○ |
| C-06 | タスク最大実行時間 6時間 | E-02 (maxDuration = 3600 * 6) | ○ |
| C-07 | Generation待機ポーリング間隔 1秒 | E-03 (setTimeout(resolve, 1000)) | ○ |
| C-08 | ファイルアップロードサイズ制限 3MB | E-04 (MAX_INLINE_FILE_DECODED_BYTES = 1024 * 1024 * 3) | ○ |
| C-09 | RAGパイプライン並列処理上限 15 | E-05 (DEFAULT_PARALLEL_LIMIT = 15) | ○ |
| C-10 | RAGパイプラインバッチサイズ 100 | E-05 (DEFAULT_MAX_BATCH_SIZE = 100) | ○ |
| C-11 | API Secret scryptパラメータ n=16384, r=8, p=1, keyLen=32 | E-06 (defaultApiSecretScryptParams) | ○ |
| C-12 | API Secret timing-safe比較 | E-06 (timingSafeEqual, constantTimeEqualBase64) | ○ |
| C-13 | 無効なAPI Keyで401 Unauthorized | E-04, E-06 (verifyApiSecretForTeam) | ○ |
| C-14 | 失効済みAPI Keyで401 Unauthorized | E-06 (record.revokedAt判定) | ○ |
| C-15 | チーム不一致のAPI Keyでアクセス拒否 | E-06 (teamDbId !== args.teamDbId) | ○ |
| C-16 | Supabase認証ミドルウェア | E-07 (supabaseMiddleware) | ○ |
| C-17 | 本番環境でのSupabase環境変数必須 | E-07 (NODE_ENV === "production") | ○ |
| C-18 | Zodスキーマバリデーション | E-08 (z.object定義) | ○ |
| C-19 | AppId形式検証 | E-04 (AppId.safeParse) | ○ |
| C-20 | ファイルメタデータ改ざん検出 | E-04 (UploadedFileData.safeParse) | ○ |
| C-21 | タスク実行リトライ 最大3回 | E-02 (maxAttempts: 3) | ○ |
| C-22 | リトライ指数バックオフ | E-02 (minTimeoutInMs, maxTimeoutInMs, factor) | ○ |
| C-23 | RAGパイプラインリトライ | E-05 (maxRetries, retryDelay) | ○ |
| C-24 | DBコネクションプールエラー処理 | E-10 (pool.on("error")) | ○ |
| C-25 | Generation失敗時の状態遷移 | E-03 (isFailedGeneration) | ○ |
| C-26 | exhaustiveチェック | E-03 (_exhaustiveCheck: never) | ○ |
| C-27 | HNSWインデックス 1536次元 | E-09 (doc_embs_embedding_1536_idx) | ○ |
| C-28 | HNSWインデックス 3072次元 | E-09 (doc_embs_embedding_3072_idx) | ○ |
| C-29 | レートリミットカウンター複合PK | E-09 (api_rate_limit_counters_pk) | ○ |
| C-30 | コネクションプール管理 | E-10 (PoolManager.getPool) | ○ |
| C-31 | API Key lastUsedAt更新失敗時のリカバリ | E-06 (try-catch, logger.warn) | ○ |
| C-32 | レートリミットカウンターのアトミック更新 | E-01 (onConflictDoUpdate) | ○ |
| C-33 | パッチキュー管理 | E-03 (createPatchQueue, flush, cleanup) | ○ |
| C-34 | Generation状態遷移 | E-03 (status判定) | ○ |
| C-35 | キャンセル済みGenerationの検出 | E-03 (status === "cancelled") | ○ |
| C-36 | scrypt処理時間ログ | E-06 (logger.debug) | ○ |
| C-37 | シーケンス開始・完了・エラーログ | E-03 (context.logger.debug, error) | ○ |
| C-38 | ログレベル環境変数 | E-02 (process.env.LOG_LEVEL) | ○ |
| C-39 | 開発環境でのSupabaseスキップ | E-07 (NODE_ENV !== "production") | ○ |
| C-40 | レートリミットヘッダー形式 | E-01 (buildRateLimitHeaders) | ○ |
| C-41 | SSEレスポンス形式 | E-08 (Content-Type: text/event-stream) | ○ |
| C-42 | SSEキャッシュ無効化 | E-08 (Cache-Control: no-cache, no-transform) | ○ |
| C-43 | ID生成器の型付け | **根拠なし** | △ |
| C-44 | discriminated union型チェック | **根拠なし** | △ |
| C-45 | RagError階層 | E-11 (ConfigurationError, OperationError) | ○ |

## 4) 不足情報（Unknown / Missing）
- NFT-043/C-43: protocol内のcreateIdGeneratorの詳細実装を直接確認していない
  - 候補：`packages/protocol/src/utils/id-generator.ts` / `packages/utils/src/id.ts`
- NFT-044/C-44: protocolパッケージ内のz.discriminatedUnionの使用箇所を網羅的に確認していない
  - 候補：`packages/protocol/src/node/` / `packages/protocol/src/workspace/`

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 性能テスト（NFT-001〜010）：コード上の定数値を直接参照しており、信頼性が高い
- 0: 低リスク - セキュリティテスト（NFT-011〜020）：crypto APIの使用やZodバリデーションを確認済み
- 0: 低リスク - 可用性テスト（NFT-021〜026）：リトライ設定やエラーハンドリングをコードで確認
- 0: 低リスク - スケーラビリティテスト（NFT-027〜030）：DBスキーマのインデックス定義を確認
- 0: 低リスク - 信頼性テスト（NFT-031〜035）：トランザクション処理と状態管理を確認
- 0: 低リスク - 運用性テスト（NFT-036〜039）：ログ出力と環境変数の使用を確認
- 0: 低リスク - 互換性テスト（NFT-040〜042）：HTTPヘッダーとストリーミング設定を確認
- 1: 中リスク - 保守性テスト（NFT-043〜045）：一部の型定義詳細が未確認

## 6) レビュアーチェックリスト（最小）
- [ ] NFT-001〜005のレートリミット値がビジネス要件と整合しているか確認
- [ ] NFT-006のタスク最大実行時間（6時間）がユースケースに適切か確認
- [ ] NFT-011のscryptパラメータがセキュリティベストプラクティスに準拠しているか確認
- [ ] NFT-027〜028のベクトルインデックス設定が想定データ量に対して適切か確認
- [ ] NFT-043〜044の型安全性テストについて、protocolパッケージの詳細実装を確認
- [ ] 明示的なSLA定義がコード外に存在する場合、テストケースの合格基準と整合しているか確認
