---
paths: ["src/**", "tests/**", "scripts/**"]
---

# プロジェクト構成ルール (Project Structure)

ソース・テスト・スクリプトを追加・移動するときは本ルールに従い，責務ごとのサブパッケージ配置を保つこと．設計の背景は [SPEC_01 アーキテクチャ設計](../../docs/04_SPEC/SPEC_01_アーキテクチャ設計.md)を参照する（本ルールは配置規則のみを定める）．

## ディレクトリ構成 (Layout)

```text
src/tias_judge_model/
├── __init__.py
├── schema.py              # pydantic 設定スキーマ
├── data/                  # manifest 読み込み・Dataset・患者単位分割・前処理
├── models/                # timm ラッパ（アーキテクチャ差し替え点）
├── training/              # 学習ループ・損失・スケジューラ
├── evaluation/            # 指標・混同行列・レポート生成
├── baseline/              # ルールベース比較（TIASjudge 相当）
├── remote/                # リモート実行（転送・ジョブ実行・回収）
└── cli/                   # CLI エントリポイント

tests/                     # src のサブパッケージ構造をミラーする
scripts/                   # 単発の調査・合成データ生成・manifest 生成
configs/                   # 実験設定 YAML（コード外の設定）
```

## 配置ルール (Placement Rules)

- **1 モジュール 1 責務**: 新しい機能は責務に合うサブパッケージに置く．該当が無ければ新サブパッケージを作る（既存モジュールを肥大化させない）
- **依存方向**: `cli` → `training` / `evaluation` → `data` / `models` の一方向を保つ．`data`・`models` から上位（`cli`・`training`）を import しない
- **純関数を優先**: 副作用（ファイル I/O・ssh・GPU 実行）は `cli`・`remote`・`training` の縁に寄せ，`data` の変換処理・`evaluation` の指標計算は入力 → 出力の純関数として書く（テスト容易性のため．`.claude/rules/testing.md` の必須テスト対象と対応する）
- **設定・データ**: 実験条件は `configs/*.yaml` に置き，閾値・パスをコードに埋め込まない．臨床データはリポジトリに置かない（`data/` は `.gitignore` 済み）
- **調査・使い捨てコード**: 恒久的に使わない単発スクリプトは `src/` ではなく `scripts/` に置く（パッケージの公開 API を汚さない）
- **テストの配置**: `tests/` は `src/tias_judge_model/` の構造をミラーする（詳細は `.claude/rules/testing.md`）
