---
paths: ["src/**", "tests/**", "data/**", "pyproject.toml"]
---

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

ファイルを新規作成・移動するときは本構成に従うこと．

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

```text
TIASjudge/
├── src/
│   └── tiasjudge/
│       ├── core/          # 診断ロジック（UI 非依存）
│       │   ├── color.py   # RGB→XYZ→Lab 変換（SPEC_02 (1)(2)）
│       │   ├── svm.py     # SVM 学習・5 色分類（SPEC_02 (3)）
│       │   ├── roi.py     # ROI 平均色の算出（SPEC_02 (0)）
│       │   └── csv_io.py  # 変換行列・data.csv の読込
│       ├── gui/           # PySide6 画面（SPEC_01）
│       │   ├── main_window.py
│       │   └── result_window.py
│       └── __main__.py    # エントリポイント（python -m tiasjudge）
├── tests/                 # pytest（src/ と同じ構造をミラーする）
├── data/                  # 学習データ等の同梱ファイル（data.csv）
├── docs/                  # ドキュメント（docs-naming.md 参照）
└── org/                   # 旧実装（Git 管理外・参照専用）
```

## 依存方向のルール (Dependency Rules)

- `core/` は **PySide6・GUI に依存してはならない**（import 禁止）．純粋な計算・入出力のみ
- `gui/` は表示とイベント処理に徹し，診断計算を実装しない（必ず `core/` を呼ぶ）
- `core/` はファイルパスを引数で受け取る．モジュール内でパスを固定しない（テスト容易性と再現性のため）

## 配置ルール (Placement Rules)

- 新しいロジックは まず `core/` に置けないか検討する（UI 非依存にできるものは core へ）
- テストは `tests/` 配下に `test_<モジュール名>.py` で置く（例: `core/color.py` → `tests/core/test_color.py`）
- 同梱データは `data/` に置き Git 管理する．ユーザーが実行時に選択するファイル（変換行列 CSV・舌画像）はリポジトリに含めない
