---
generated_at: 2026-02-25 10:30:00
metrics:
  claims_total: 124
  claims_with_evidence: 124
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：controllers-concerns 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：124 / 124、根拠なし：0
- 優先レビュー（高）
  1. **認証・認可関連のテストケース（UT-CON-001〜059）**：セキュリティに直結するため重点確認推奨
  2. **CSRF保護関連のテストケース（UT-CON-118〜124）**：セキュリティ要件の妥当性確認
  3. **マジックリンク関連のテストケース（UT-CON-028〜045）**：開発/本番環境の挙動差異確認

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

- E-01: `app/controllers/concerns/authentication.rb`
- E-02: `app/controllers/concerns/authentication/via_magic_link.rb`
- E-03: `app/controllers/concerns/authorization.rb`
- E-04: `app/controllers/concerns/board_scoped.rb`
- E-05: `app/controllers/concerns/card_scoped.rb`
- E-06: `app/controllers/concerns/column_scoped.rb`
- E-07: `app/controllers/concerns/current_request.rb`
- E-08: `app/controllers/concerns/current_timezone.rb`
- E-09: `app/controllers/concerns/day_timelines_scoped.rb`
- E-10: `app/controllers/concerns/filter_scoped.rb`
- E-11: `app/controllers/concerns/set_platform.rb`
- E-12: `app/controllers/concerns/routing_headers.rb`
- E-13: `app/controllers/concerns/turbo_flash.rb`
- E-14: `app/controllers/concerns/block_search_engine_indexing.rb`
- E-15: `app/controllers/concerns/view_transitions.rb`
- E-16: `app/controllers/concerns/request_forgery_protection.rb`

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

### Authentication モジュール（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | authenticated?メソッドはCurrent.identity.present?を返す | E-01 L34-36 | ○ |
| C-02 | require_accountはCurrent.accountがない場合にリダイレクトする | E-01 L38-42 | ○ |
| C-03 | require_authenticationはセッション復元、Bearerトークン、認証要求の順で処理する | E-01 L44-46 | ○ |
| C-04 | resume_sessionはfind_session_by_cookieでセッションを取得する | E-01 L48-52 | ○ |
| C-05 | find_session_by_cookieはSession.find_signedを使用する | E-01 L54-56 | ○ |
| C-06 | authenticate_by_bearer_tokenはAuthorizationヘッダにBearerが含まれる場合のみ処理する | E-01 L58-66 | ○ |
| C-07 | request_authenticationはreturn_toセッションを保存してリダイレクトする | E-01 L68-74 | ○ |
| C-08 | after_authentication_urlはセッションから削除したURLまたはlanding_urlを返す | E-01 L76-78 | ○ |
| C-09 | redirect_authenticated_userはauthenticated?がtrueの場合にリダイレクトする | E-01 L80-82 | ○ |
| C-10 | redirect_tenanted_requestはCurrent.accountがある場合にリダイレクトする | E-01 L84-86 | ○ |
| C-11 | start_new_session_forは新しいセッションを作成してCookieを設定する | E-01 L88-92 | ○ |
| C-12 | set_current_sessionはCurrent.sessionとCookieを設定する | E-01 L94-97 | ○ |
| C-13 | terminate_sessionはセッションを破棄してCookieを削除する | E-01 L99-102 | ○ |
| C-14 | session_tokenはcookies[:session_token]を返す | E-01 L104-106 | ○ |

### Authentication::ViaMagicLink モジュール（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-15 | ensure_development_magic_link_not_leakedは本番環境でflash[:magic_link_code]があるとエラーを発生させる | E-02 L9-13 | ○ |
| C-16 | redirect_to_fake_session_magic_linkは偽のMagicLinkを生成してリダイレクトする | E-02 L15-23 | ○ |
| C-17 | redirect_to_session_magic_linkはHTMLとJSONで異なるレスポンスを返す | E-02 L25-34 | ○ |
| C-18 | serve_development_magic_linkは開発環境でのみflashとヘッダを設定する | E-02 L36-41 | ○ |
| C-19 | set_pending_authentication_tokenはCookieを設定する | E-02 L43-50 | ○ |
| C-20 | email_address_pending_authenticationはverifierでトークンを検証する | E-02 L52-54 | ○ |
| C-21 | pending_authentication_token_verifierはRailsのmessage_verifierを返す | E-02 L56-58 | ○ |
| C-22 | pending_authentication_tokenはCookieの値を返す | E-02 L60-62 | ○ |
| C-23 | clear_pending_authentication_tokenはCookieを削除する | E-02 L64-66 | ○ |

### Authorization モジュール（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | ensure_adminはCurrent.user.admin?がfalseの場合に403を返す | E-03 L20-22 | ○ |
| C-25 | ensure_staffはCurrent.identity.staff?がfalseの場合に403を返す | E-03 L24-26 | ○ |
| C-26 | authenticated_account_access?はCurrent.accountとauthenticated?の両方を確認する | E-03 L28-30 | ○ |
| C-27 | ensure_can_access_accountはアカウントとユーザーのactive状態を確認する | E-03 L32-39 | ○ |
| C-28 | redirect_existing_userはCurrent.userがある場合にリダイレクトする | E-03 L41-43 | ○ |

### BoardScoped モジュール（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-29 | set_boardはCurrent.user.boards.findでボードを取得する | E-04 L9-11 | ○ |
| C-30 | ensure_permission_to_admin_boardはcan_administer_board?を確認する | E-04 L13-17 | ○ |

### CardScoped モジュール（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | set_cardはCurrent.user.accessible_cards.find_by!でカードを取得する | E-05 L9-11 | ○ |
| C-32 | set_boardは@card.boardを設定する | E-05 L13-15 | ○ |
| C-33 | render_card_replacementはturbo_stream.replaceを実行する | E-05 L17-19 | ○ |
| C-34 | capture_card_locationは@source_columnと@was_in_streamを設定する | E-05 L21-24 | ○ |
| C-35 | refresh_stream_if_neededは@was_in_streamがtrueの場合にページネーションを実行する | E-05 L26-30 | ○ |

### ColumnScoped モジュール（E-06）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | set_columnはCurrent.user.accessible_columns.findでカラムを取得する | E-06 L9-11 | ○ |

### CurrentRequest モジュール（E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-37 | before_actionでCurrent.http_method, request_id, user_agent, ip_address, referrerを設定する | E-07 L5-11 | ○ |

### CurrentTimezone モジュール（E-08）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | set_current_timezoneはTime.use_zoneでタイムゾーンを設定してブロックを実行する | E-08 L14-16 | ○ |
| C-39 | timezone_from_cookieはCookieからActiveSupport::TimeZoneを取得する | E-08 L18-23 | ○ |

### DayTimelinesScoped モジュール（E-09）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | set_day_timelineはCurrent.user.timeline_forを呼び出す | E-09 L11-13 | ○ |
| C-41 | dayメソッドはparams[:day]をパースするか、Time.currentを返す | E-09 L15-22 | ○ |

### FilterScoped モジュール（E-10）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | set_filterはfilter_idがあればfind、なければfrom_paramsで取得する | E-10 L10-16 | ○ |
| C-43 | filter_paramsはデフォルト値と許可パラメータを適用する | E-10 L18-20 | ○ |
| C-44 | set_user_filteringはUser::Filteringを生成する | E-10 L22-24 | ○ |
| C-45 | expanded_paramはparams[:expand_all]をブール値にキャストする | E-10 L26-28 | ○ |

### SetPlatform モジュール（E-11）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | platformメソッドはApplicationPlatform.newを返す | E-11 L9-11 | ○ |

### RoutingHeaders モジュール（E-12）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | set_target_headerはX-Kamal-Targetヘッダをコピーする | E-12 L9-11 | ○ |

### TurboFlash モジュール（E-13）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | turbo_stream_flashはflashパーシャルをreplaceするturbo_streamを返す | E-13 L9-11 | ○ |

### BlockSearchEngineIndexing モジュール（E-14）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | block_search_engine_indexingはX-Robots-Tagヘッダに'none'を設定する | E-14 L11-13 | ○ |

### ViewTransitions モジュール（E-15）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | disable_view_transitionsは@disable_view_transitionをtrueに設定する | E-15 L10-12 | ○ |
| C-51 | page_refresh?はreferrerとurlが一致するか確認する | E-15 L14-16 | ○ |

### RequestForgeryProtection モジュール（E-16）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 | verified_via_header_only?はsuperまたはallowed_api_request?を返す | E-16 L9-11 | ○ |
| C-53 | allowed_api_request?はsec_fetch_site_valueがnilかつJSON形式の場合にtrueを返す | E-16 L13-15 | ○ |

## 4) 不足情報（Unknown / Missing）
- 根拠なしの項目なし
- 全てのテストケースはソースコードの実装に基づいて生成されている

補足：以下の関連情報は外部ファイルに依存するため、テストケースの前提条件として記載
- `Current` クラスの属性定義（Current.identity, Current.account, Current.user, Current.session等）
- `Session.find_signed` の実装
- `Identity.find_by_permissable_access_token` の実装
- `ApplicationPlatform` クラスの実装
- `MagicLink` クラスの実装
- `User::Filtering` クラスの実装
- `Filter.default_values` および `Filter::PERMITTED_PARAMS` の定義

## 5) リスクフラグ（レビュー観点）

| リスクレベル | 対象テストケース | 理由 |
|---|---|---|
| 2: 高リスク | UT-CON-001〜027 | 認証処理はセキュリティの根幹。セッション管理、トークン検証の網羅性を確認 |
| 2: 高リスク | UT-CON-028〜045 | マジックリンクは認証フローの一部。本番環境での漏洩防止が重要 |
| 2: 高リスク | UT-CON-046〜059 | 認可処理。権限チェックの漏れはセキュリティリスク |
| 2: 高リスク | UT-CON-118〜124 | CSRF保護。APIリクエストの許可条件を厳密に確認 |
| 1: 中リスク | UT-CON-060〜075 | スコープ設定。RecordNotFoundの発生条件を確認 |
| 1: 中リスク | UT-CON-082〜093 | タイムゾーン・日付処理。境界値の網羅性を確認 |
| 0: 低リスク | UT-CON-076〜081 | リクエスト情報の設定。副作用なし |
| 0: 低リスク | UT-CON-103〜117 | ヘッダ設定・ビュー遷移。機能的影響は限定的 |

## 6) レビュアーチェックリスト（最小）

### 必須確認項目
- [ ] 認証関連テストケース（UT-CON-001〜027）がセッション管理、Bearerトークン認証、リダイレクト処理を網羅しているか
- [ ] マジックリンク関連テストケース（UT-CON-028〜045）が開発/本番環境の挙動差異を適切にカバーしているか
- [ ] 認可関連テストケース（UT-CON-046〜059）が管理者・スタッフ権限、アカウントアクセス制御を網羅しているか
- [ ] CSRF保護テストケース（UT-CON-118〜124）がAPIリクエストの許可条件を適切にテストしているか

### 推奨確認項目
- [ ] スコープ関連テストケース（UT-CON-060〜075）がRecordNotFound例外の発生条件を網羅しているか
- [ ] タイムゾーン関連テストケース（UT-CON-082〜088）が無効なタイムゾーン、空値、nil値を適切に処理しているか
- [ ] フィルター関連テストケース（UT-CON-094〜102）がID指定とパラメータ指定の両方のパターンをカバーしているか

### 境界値・異常系の確認
- [ ] 各モジュールで nil/空文字/無効値 のケースがテストされているか
- [ ] ActiveRecord::RecordNotFound の発生条件が明確か
- [ ] 403 Forbidden のレスポンス条件が網羅されているか
