---
generated_at: 2026-02-25 03:15:00
metrics:
  claims_total: 165
  claims_with_evidence: 165
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：165 / 165、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全テストケースがソースコードに基づいて生成

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

- E-01: `app/models/account.rb` - Accountモデル（アカウント管理、オーナー作成、状態判定）
- E-02: `app/models/user.rb` - Userモデル（ユーザー管理、認証、非アクティブ化）
- E-03: `app/models/card.rb` - Cardモデル（カード管理、移動、番号採番、スコープ）
- E-04: `app/models/comment.rb` - Commentモデル（コメント、バリデーション）
- E-05: `app/models/tag.rb` - Tagモデル（タグ管理、ハッシュタグ生成）
- E-06: `app/models/identity.rb` - Identityモデル（認証、マジックリンク）
- E-07: `app/models/access.rb` - Accessモデル（アクセス記録）
- E-08: `app/models/assignment.rb` - Assignmentモデル（アサイン、上限チェック）
- E-09: `app/models/color.rb` - Colorクラス（色定義）
- E-10: `app/models/current.rb` - Currentクラス（カレント状態管理）
- E-11: `app/models/event.rb` - Eventモデル（イベント、通知）
- E-12: `app/models/export.rb` - Exportモデル（エクスポート処理）
- E-13: `app/models/filter.rb` - Filterモデル（カードフィルタリング）
- E-14: `app/models/magic_link.rb` - MagicLinkモデル（マジックリンク認証）
- E-15: `app/models/mention.rb` - Mentionモデル（メンション）
- E-16: `app/models/notification.rb` - Notificationモデル（通知管理）
- E-17: `app/models/notification_pusher.rb` - NotificationPusherクラス（プッシュ通知）
- E-18: `app/models/notifier.rb` - Notifierクラス（通知生成）
- E-19: `app/models/qr_code_link.rb` - QrCodeLinkクラス（QRコード署名）
- E-20: `app/models/reaction.rb` - Reactionモデル（リアクション）
- E-21: `app/models/signup.rb` - Signupクラス（サインアップ処理）
- E-22: `app/models/ssrf_protection.rb` - SsrfProtectionモジュール（SSRF防止）
- E-23: `app/models/step.rb` - Stepモデル（ステップ管理）
- E-24: `app/models/time_window_parser.rb` - TimeWindowParserクラス（日付範囲解析）
- E-25: `app/models/webhook.rb` - Webhookモデル（Webhook管理）
- E-26: `app/models/zip_file.rb` - ZipFileクラス（ZIPファイル処理）
- E-27: `app/models/application_platform.rb` - ApplicationPlatformクラス（プラットフォーム判定）
- E-28: `app/models/board.rb` - Boardモデル（参照のみ）
- E-29: `app/models/column.rb` - Columnモデル（参照のみ）
- E-30: `app/models/closure.rb` - Closureモデル（参照のみ）
- E-31: `app/models/entropy.rb` - Entropyモデル（参照のみ）
- E-32: `app/models/pin.rb` - Pinモデル（参照のみ）
- E-33: `app/models/watch.rb` - Watchモデル（参照のみ）
- E-34: `app/models/tagging.rb` - Taggingモデル（参照のみ）
- E-35: `app/models/session.rb` - Sessionモデル（参照のみ）

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

### Account（C-01〜C-11）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | create_with_owner正常系 | E-01: 24-29行目 | ○ |
| C-02 | create_with_ownerバリデーション | E-01: 21行目 validates :name | ○ |
| C-03 | slug生成 | E-01: 32-34行目 | ○ |
| C-04 | system_user取得 | E-01: 40-42行目 | ○ |
| C-05 | system_user存在しない場合 | E-01: 41行目 find_by! | ○ |
| C-06 | active?がtrue | E-01: 44-46行目 | ○ |
| C-07 | active?がfalse（キャンセル済み） | E-01: 45行目 !cancelled? | ○ |
| C-08 | active?がfalse（インポート中） | E-01: 45行目 !importing? | ○ |
| C-09 | importing?がtrue | E-01: 48-50行目 | ○ |
| C-10 | importing?がfalse | E-01: 48-50行目 | ○ |
| C-11 | assign_external_account_id | E-01: 53-55行目 | ○ |

### User（C-12〜C-18）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | deactivate | E-02: 19-25行目 | ○ |
| C-13 | setup?がtrue | E-02: 27-29行目 | ○ |
| C-14 | setup?がfalse | E-02: 27-29行目 | ○ |
| C-15 | verified?がtrue | E-02: 31-33行目 | ○ |
| C-16 | verified?がfalse | E-02: 31-33行目 | ○ |
| C-17 | verify未認証 | E-02: 35-37行目 | ○ |
| C-18 | verify認証済み | E-02: 36行目 unless verified? | ○ |

### Card（C-19〜C-31）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | move_to | E-03: 57-63行目 | ○ |
| C-20 | filled?タイトルあり | E-03: 65-67行目 | ○ |
| C-21 | filled?説明あり | E-03: 65-67行目 | ○ |
| C-22 | filled?両方なし | E-03: 65-67行目 | ○ |
| C-23 | to_param | E-03: 53-55行目 | ○ |
| C-24 | set_default_title | E-03: 70-72行目 | ○ |
| C-25 | assign_number | E-03: 91-93行目 | ○ |
| C-26 | indexed_by stalled | E-03: 28-38行目 | ○ |
| C-27 | indexed_by closed | E-03: 32行目 | ○ |
| C-28 | indexed_by unknown | E-03: 36行目 else all | ○ |
| C-29 | sorted_by newest | E-03: 40-47行目 | ○ |
| C-30 | sorted_by oldest | E-03: 43行目 | ○ |
| C-31 | sorted_by unknown | E-03: 45行目 else latest | ○ |

### Comment（C-32〜C-33）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | to_partial_path | E-04: 22-24行目 | ○ |
| C-33 | card_is_commentable | E-04: 27-29行目 | ○ |

### Tag（C-34〜C-37）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-34 | hashtag | E-05: 14-16行目 | ○ |
| C-35 | cards_count | E-05: 18-20行目 | ○ |
| C-36 | title format validation | E-05: 8行目 | ○ |
| C-37 | title normalization | E-05: 9行目 | ○ |

### Identity（C-38〜C-43）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | find_by_permissable_access_token有効 | E-06: 17-21行目 | ○ |
| C-39 | find_by_permissable_access_token無効 | E-06: 18行目 find_by | ○ |
| C-40 | find_by_permissable_access_token権限なし | E-06: 18行目 allows? | ○ |
| C-41 | send_magic_link | E-06: 23-29行目 | ○ |
| C-42 | email_address validation | E-06: 14行目 | ○ |
| C-43 | email_address normalization | E-06: 15行目 | ○ |

### Access（C-44〜C-45）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | accessed更新 | E-07: 12-14行目 | ○ |
| C-45 | accessed最近 | E-07: 17-19行目 recently_accessed? | ○ |

### Assignment（C-46〜C-47）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | within_limit超過 | E-08: 13-17行目 | ○ |
| C-47 | within_limit未満 | E-08: 2行目 LIMIT = 100 | ○ |

### Color（C-48〜C-50）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | for_value存在 | E-09: 5-7行目 | ○ |
| C-49 | for_value存在しない | E-09: 6行目 find | ○ |
| C-50 | to_s | E-09: 10-12行目 | ○ |

### Current（C-51〜C-55）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | session=でidentity設定 | E-10: 5-11行目 | ○ |
| C-52 | session=でnilの場合 | E-10: 8行目 if value.present? | ○ |
| C-53 | identity=でuser設定 | E-10: 13-19行目 | ○ |
| C-54 | with_account | E-10: 21-23行目 | ○ |
| C-55 | without_account | E-10: 25-27行目 | ○ |

### Event（C-56〜C-58）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-56 | action inquiry | E-11: 28-30行目 | ○ |
| C-57 | notifiable_target | E-11: 32-34行目 | ○ |
| C-58 | description_for | E-11: 36-38行目 | ○ |

### Export（C-59〜C-64）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-59 | cleanup | E-12: 12-14行目 | ○ |
| C-60 | build_later | E-12: 16-18行目 | ○ |
| C-61 | build正常 | E-12: 20-33行目 | ○ |
| C-62 | buildエラー | E-12: 30-32行目 rescue | ○ |
| C-63 | accessible_to?所有者 | E-12: 39-41行目 | ○ |
| C-64 | accessible_to?他者 | E-12: 40行目 accessor == user | ○ |

### Filter（C-65〜C-72）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-65 | from_params | E-13: 8-10行目 | ○ |
| C-66 | remember作成 | E-13: 12-16行目 | ○ |
| C-67 | remember重複 | E-13: 14-15行目 RecordNotUnique | ○ |
| C-68 | cards | E-13: 19-41行目 | ○ |
| C-69 | empty? | E-13: 43-45行目 | ○ |
| C-70 | single_board1つ | E-13: 47-49行目 | ○ |
| C-71 | single_board複数 | E-13: 48行目 if boards.one? | ○ |
| C-72 | cacheable? | E-13: 55-57行目 | ○ |

### MagicLink（C-73〜C-79）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 | consume（クラス）有効 | E-14: 18-20行目 | ○ |
| C-74 | consume（クラス）無効 | E-14: 19行目 find_by | ○ |
| C-75 | consume期限切れ | E-14: 9行目 active scope | ○ |
| C-76 | cleanup | E-14: 22-24行目 | ○ |
| C-77 | consume（インスタンス） | E-14: 27-30行目 | ○ |
| C-78 | generate_code | E-14: 33-38行目 | ○ |
| C-79 | set_expiration | E-14: 40-42行目 | ○ |

### Mention（C-80〜C-82）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | self_mention?true | E-15: 13-15行目 | ○ |
| C-81 | self_mention?false | E-15: 14行目 | ○ |
| C-82 | notifiable_target | E-15: 17-19行目 | ○ |

### Notification（C-83〜C-88）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 | read_all | E-16: 32-34行目 | ○ |
| C-84 | unread_all | E-16: 36-38行目 | ○ |
| C-85 | read | E-16: 41-43行目 | ○ |
| C-86 | unread | E-16: 45-47行目 | ○ |
| C-87 | read?true | E-16: 49-51行目 | ○ |
| C-88 | read?false | E-16: 50行目 | ○ |

### NotificationPusher（C-89〜C-94）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-89 | push送信 | E-17: 11-17行目 | ○ |
| C-90 | pushスキップ（購読なし） | E-17: 21行目 | ○ |
| C-91 | pushスキップ（システム） | E-17: 22行目 | ○ |
| C-92 | build_event_payload comment | E-17: 47-53行目 | ○ |
| C-93 | build_event_payload assigned | E-17: 54-57行目 | ○ |
| C-94 | build_mention_payload | E-17: 77-86行目 | ○ |

### Notifier（C-95〜C-99）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-95 | for Event | E-18: 5-9行目 | ○ |
| C-96 | for Mention | E-18: 9-11行目 | ○ |
| C-97 | notify作成 | E-18: 15-37行目 | ○ |
| C-98 | notify更新 | E-18: 25-33行目 | ○ |
| C-99 | notifyスキップ | E-18: 45-47行目 | ○ |

### QrCodeLink（C-100〜C-102）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-100 | from_signed有効 | E-19: 5-7行目 | ○ |
| C-101 | from_signed無効 | E-19: 6行目 verify | ○ |
| C-102 | signed | E-19: 23-25行目 | ○ |

### Reaction（C-103〜C-104）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-103 | all_emoji? | E-20: 10行目 delegate | ○ |
| C-104 | register_card_activity | E-20: 12-15行目 | ○ |

### Signup（C-105〜C-111）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-105 | create_identity新規 | E-21: 19-22行目 | ○ |
| C-106 | create_identity既存 | E-21: 20行目 find_or_create_by! | ○ |
| C-107 | complete成功 | E-21: 24-44行目 | ○ |
| C-108 | completeバリデーション失敗 | E-21: 41-43行目 | ○ |
| C-109 | completeエラー | E-21: 30-40行目 rescue | ○ |
| C-110 | email_address validation | E-21: 9行目 | ○ |
| C-111 | full_name length | E-21: 11行目 | ○ |

### SsrfProtection（C-112〜C-118）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-112 | resolve_public_ip成功 | E-22: 17-21行目 | ○ |
| C-113 | resolve_public_ipフィルタ | E-22: 19行目 reject blocked_address? | ○ |
| C-114 | blocked_address?プライベート | E-22: 26行目 ip.private? | ○ |
| C-115 | blocked_address?ループバック | E-22: 27行目 ip.loopback? | ○ |
| C-116 | blocked_address?リンクローカル | E-22: 28行目 ip.link_local? | ○ |
| C-117 | blocked_address?パブリック | E-22: 23-32行目 | ○ |
| C-118 | blocked_address?禁止範囲 | E-22: 31行目 in_disallowed_range? | ○ |

### Step（C-119〜C-121）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-119 | completed?true | E-23: 9-11行目 | ○ |
| C-120 | completed?false | E-23: 10行目 | ○ |
| C-121 | content validation | E-23: 7行目 | ○ |

### TimeWindowParser（C-122〜C-132）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-122 | parse today | E-24: 33-34行目 | ○ |
| C-123 | parse yesterday | E-24: 35-36行目 | ○ |
| C-124 | parse thisweek | E-24: 37-38行目 | ○ |
| C-125 | parse thismonth | E-24: 39-40行目 | ○ |
| C-126 | parse thisyear | E-24: 41-42行目 | ○ |
| C-127 | parse lastweek | E-24: 43-44行目 | ○ |
| C-128 | parse lastmonth | E-24: 45-46行目 | ○ |
| C-129 | parse lastyear | E-24: 47-48行目 | ○ |
| C-130 | parse unknown | E-24: 31-50行目 case文 | ○ |
| C-131 | normalize | E-24: 53-57行目 | ○ |
| C-132 | human_name_for | E-24: 22-24行目 | ○ |

### Webhook（C-133〜C-142）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-133 | activate | E-25: 43-45行目 | ○ |
| C-134 | activate既にアクティブ | E-25: 44行目 unless active? | ○ |
| C-135 | deactivate | E-25: 47-49行目 | ○ |
| C-136 | for_basecamp? | E-25: 55-57行目 | ○ |
| C-137 | for_campfire? | E-25: 59-61行目 | ○ |
| C-138 | for_slack? | E-25: 63-65行目 | ○ |
| C-139 | validate_url不正スキーム | E-25: 68-76行目 | ○ |
| C-140 | validate_url不正形式 | E-25: 74-75行目 InvalidURIError | ○ |
| C-141 | validate_urlHTTPS | E-25: 8行目 PERMITTED_SCHEMES | ○ |
| C-142 | name validation | E-25: 40行目 | ○ |

### ZipFile（C-143〜C-148）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-143 | create_for S3 | E-26: 5-17行目, 35-68行目 | ○ |
| C-144 | create_for Disk | E-26: 70-83行目 | ○ |
| C-145 | create_forブロックなし | E-26: 6行目 | ○ |
| C-146 | read_from S3 | E-26: 19-27行目, 85-90行目 | ○ |
| C-147 | read_from Disk | E-26: 92-97行目 | ○ |
| C-148 | read_fromブロックなし | E-26: 20行目 | ○ |

### ApplicationPlatform（C-149〜C-165）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-149 | ios? iPhone | E-27: 2-4行目 | ○ |
| C-150 | ios? iPad | E-27: 3行目 | ○ |
| C-151 | android? | E-27: 6-8行目 | ○ |
| C-152 | mac? | E-27: 10-12行目 | ○ |
| C-153 | chrome? | E-27: 14-16行目 | ○ |
| C-154 | edge? | E-27: 18-20行目 | ○ |
| C-155 | firefox? | E-27: 22-24行目 | ○ |
| C-156 | safari? | E-27: 26-28行目 | ○ |
| C-157 | mobile? | E-27: 30-32行目 | ○ |
| C-158 | desktop? | E-27: 34-36行目 | ○ |
| C-159 | native? | E-27: 38-40行目 | ○ |
| C-160 | windows? | E-27: 42-44行目 | ○ |
| C-161 | type native android | E-27: 46-56行目 | ○ |
| C-162 | type native ios | E-27: 48-49行目 | ○ |
| C-163 | type mobile web | E-27: 50-51行目 | ○ |
| C-164 | type desktop web | E-27: 52-53行目 | ○ |
| C-165 | operating_system | E-27: 58-69行目 | ○ |

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

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコード内のメソッド・ロジックに直接対応しており、根拠が明確

## 6) レビュアーチェックリスト（最小）
- [ ] 高優先度テストケース（認証・認可関連）の網羅性確認: Account.active?、Identity認証、Export.accessible_to?
- [ ] セキュリティ関連テストケースの十分性確認: SsrfProtection、Webhook URL検証
- [ ] 境界値テストの妥当性確認: Assignment上限（100件）、MagicLink有効期限（15分）
- [ ] バリデーションテストの網羅性確認: 各モデルのvalidates宣言に対応するテストケース
- [ ] concernsやモジュールincludeによる機能が別モジュールでカバーされているか確認
