---
generated_at: 2026-02-25 02:50:00
metrics:
  claims_total: 64
  claims_with_evidence: 64
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：models-board.csv

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `app/models/board/accessible.rb` - アクセス制御機能のconcern（107行）
- E-02: `app/models/board/publication.rb` - 公開設定モデル（6行）
- E-03: `app/models/board/storage.rb` - ストレージ容量計算のconcern（71行）
- E-04: `app/models/board/triageable.rb` - カラム管理のconcern（7行）
- E-05: `app/models/board/broadcastable.rb` - リアルタイム更新通知のconcern（8行）
- E-06: `app/models/board/auto_postponing.rb` - 自動延期設定のconcern（14行）
- E-07: `app/models/board/publishable.rb` - 公開機能のconcern（27行）
- E-08: `app/models/board/cards.rb` - カード関連のconcern（9行）
- E-09: `app/models/board/entropic.rb` - エントロピー設定のconcern（17行）

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

### Board::Accessible（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | reviseメソッドでgrantedとrevokedを同時に処理 | E-01 L6-10: transaction内でgrant_to/revoke_from呼び出し | ○ |
| C-02 | reviseで空配列が渡された場合の処理 | E-01 L6-10: 配列処理のため空でも動作 | ○ |
| C-03 | grant_toで複数ユーザーにバルクインサート | E-01 L13-14: Access.insert_all使用 | ○ |
| C-04 | grant_toでArray()による正規化 | E-01 L14: Array(users).collect | ○ |
| C-05 | grant_toで空配列の処理 | E-01 L14: Array()は空配列を返す | ○ |
| C-06 | revoke_fromでユーザーのアクセス権削除 | E-01 L17-18: destroy_by user: users | ○ |
| C-07 | all_access?時はrevoke_fromが機能しない | E-01 L18: unless proxy_association.owner.all_access? | ○ |
| C-08 | accessed_byでアクセス履歴更新 | E-01 L31-32: access_for(user).accessed | ○ |
| C-09 | access_forでAccessレコード取得 | E-01 L35-36: accesses.find_by(user: user) | ○ |
| C-10 | access_forでnilが返る | E-01 L35-36: find_byはnilを返す | ○ |
| C-11 | accessible_to?でtrueが返る | E-01 L39-40: access_for(user).present? | ○ |
| C-12 | accessible_to?でfalseが返る | E-01 L39-40: present?がfalseを返す | ○ |
| C-13 | clean_inaccessible_data_forでデータ削除 | E-01 L43-49: mentions/notifications/watches/pins削除 | ○ |
| C-14 | accessible_to?の場合早期リターン | E-01 L44: return if accessible_to?(user) | ○ |
| C-15 | watchersでwatchingユーザー取得 | E-01 L52-53: where(accesses: { involvement: :watching }) | ○ |
| C-16 | watchersで空コレクション | E-01 L52-53: ActiveRecord::Relationを返す | ○ |
| C-17 | grant_access_to_creatorコールバック | E-01 L57-58: accesses.create(user: creator, involvement: :watching) | ○ |
| C-18 | grant_access_to_everyoneでall_access時付与 | E-01 L61-62: if all_access_previously_changed?(to: true) | ○ |
| C-19 | all_access未変更時は付与されない | E-01 L62: 条件分岐による | ○ |
| C-20 | mentions_for_userでCard経由取得 | E-01 L65-76: JOINクエリ（パス1） | ○ |
| C-21 | mentions_for_userでComment経由取得 | E-01 L65-76: JOINクエリ（パス2） | ○ |
| C-22 | notifications_for_userでEvent->Card経由 | E-01 L79-97: JOINクエリ（パス1） | ○ |
| C-23 | notifications_for_userでEvent->Comment->Card経由 | E-01 L79-97: JOINクエリ（パス2） | ○ |

### Board::Publication（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | belongs_to :accountのデフォルト | E-02 L2: default: -> { board.account } | ○ |
| C-25 | belongs_to :boardの関連 | E-02 L3: belongs_to :board | ○ |
| C-26 | has_secure_token :keyで自動生成 | E-02 L5: has_secure_token :key | ○ |
| C-27 | keyの長さ | E-02 L5: Railsのhas_secure_tokenは24文字 | ○ |

### Board::Storage（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | board_for_storage_trackingでself返却 | E-03 L6-7: self | ○ |
| C-29 | calculate_real_storage_bytesで合計計算 | E-03 L18-20: 4つのbytesメソッドの合計 | ○ |
| C-30 | カード0件で0返却 | E-03 L23-24: card_idsが空なら0 | ○ |
| C-31 | card_image_bytesの計算 | E-03 L27-30: sum_blob_bytes_in_batches呼び出し | ○ |
| C-32 | card_embed_bytesの計算 | E-03 L32-33: sum_embed_bytes_for呼び出し | ○ |
| C-33 | comment_embed_bytesの計算 | E-03 L36-39: each_slice(BATCH_SIZE)でバッチ処理 | ○ |
| C-34 | BATCH_SIZE単位のバッチ処理 | E-03 L11, L38: BATCH_SIZE = 1000 | ○ |
| C-35 | board_embed_bytesの計算 | E-03 L42-43: sum_embed_bytes_for呼び出し | ○ |
| C-36 | 同一blob複数回カウント | E-03 L57-68: per-attachmentカウント（コメント参照） | ○ |
| C-37 | record_ids空で0返却 | E-03 L64: each_sliceは空配列で0を返す | ○ |

### Board::Triageable（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | has_many :columnsの関連 | E-04 L5: has_many :columns, dependent: :destroy | ○ |
| C-39 | dependent: :destroyの動作 | E-04 L5: dependent: :destroy | ○ |

### Board::Broadcastable（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | broadcasts_refreshesの動作 | E-05 L5: broadcasts_refreshes | ○ |
| C-41 | all_boardsチャネルへのブロードキャスト | E-05 L6: broadcasts_refreshes_to ->(board) { [ board.account, :all_boards ] } | ○ |

### Board::AutoPostponing（E-06）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | デフォルト30.daysの設定 | E-06 L9, L11-12: DEFAULT_AUTO_POSTPONE_PERIOD = 30.days | ○ |
| C-43 | 明示的nil時はデフォルト未適用 | E-06 L12: unless attribute_present?(:auto_postpone_period) | ○ |
| C-44 | 既存値の保護 | E-06 L12: self.auto_postpone_period ||= ... | ○ |

### Board::Publishable（E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | find_by_published_keyでボード取得 | E-07 L10-12: Board::Publication.find_by!(key: key).board | ○ |
| C-46 | 不正keyでRecordNotFound | E-07 L11: find_by!は例外をスロー | ○ |
| C-47 | published?でtrue返却 | E-07 L15-16: publication.present? | ○ |
| C-48 | published?でfalse返却 | E-07 L15-16: present?がfalse | ○ |
| C-49 | publicly_accessible?エイリアス | E-07 L18: alias_method :publicly_accessible?, :published? | ○ |
| C-50 | publishで公開 | E-07 L20-21: create_publication! unless published? | ○ |
| C-51 | 公開済みの場合は何もしない | E-07 L21: unless published? | ○ |
| C-52 | unpublishで非公開 | E-07 L24-25: publication&.destroy | ○ |
| C-53 | 非公開時はエラーなし | E-07 L25: safe navigation operator (&.) | ○ |
| C-54 | scope :publishedの動作 | E-07 L6: scope :published, -> { joins(:publication) } | ○ |

### Board::Cards（E-08）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | has_many :cardsの関連 | E-08 L5: has_many :cards, dependent: :destroy | ○ |
| C-56 | dependent: :destroyの動作 | E-08 L5: dependent: :destroy | ○ |
| C-57 | 名前変更時にcards.touch_all | E-08 L7: after_update_commit -> { cards.touch_all }, if: :saved_change_to_name? | ○ |
| C-58 | 名前以外変更時は更新されない | E-08 L7: if: :saved_change_to_name? | ○ |

### Board::Entropic（E-09）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-59 | ボード固有entropy取得 | E-09 L9-10: super || account.entropy | ○ |
| C-60 | accountのentropyへフォールバック | E-09 L10: || account.entropy | ○ |
| C-61 | auto_postpone_periodの委譲 | E-09 L5: delegate :auto_postpone_period, to: :entropy | ○ |
| C-62 | auto_postpone_period=での設定 | E-09 L13-15: entropy.update auto_postpone_period: new_value | ○ |
| C-63 | entropyの自動作成 | E-09 L14: self.build_entropy | ○ |
| C-64 | dependent: :destroyの動作 | E-09 L6: has_one :entropy, as: :container, dependent: :destroy | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全てのテストケースはソースコードの直接的な根拠に基づいている

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全てのテストケースがソースコードに基づいており、根拠が明確

## 6) レビュアーチェックリスト（最小）
- [ ] アクセス制御（accessible.rb）のテストケースがセキュリティ要件を満たしているか
- [ ] ストレージ計算（storage.rb）のバッチ処理が大規模データで正しく動作するか
- [ ] 公開/非公開機能（publishable.rb）の状態遷移が適切にテストされているか
- [ ] トランザクション処理（reviseメソッド）のロールバックケースが必要か検討
- [ ] 削除時のカスケード（dependent: :destroy）が意図通りか確認
