実装計画を `<計画ファイル置き場>/add-gentle-rabin.md` に書きました。コードはまだ書いていません。計画承認用の ExitPlanMode ツールがこの環境では使えないため、ここで内容を確認してください。

## 変更内容
- **`taskboard/models.py`**: `Task` に `repeat: str | None = None` を追加し、`to_dict` と `from_dict` を対応させます。`repeat` キーのない既存JSONも読めるようにします。
- **`taskboard/store.py`**
  - `add(..., repeat=None)` を追加します。`repeat` があるのに `due` がなければ `ValueError` にします。
  - `next_due(due, repeat)` を追加します。daily は +1日、weekly は +7日、monthly は +1か月で、月末は丸めます（1/31 → 2/28）。
  - `spawn_next(task)` を追加します。元の期限日を基準に、同じ title、priority、tags、repeat の新タスクを作ります。
- **`taskboard/cli.py`**
  - `add --repeat daily|weekly|monthly` を追加します。`--due` がなければエラーメッセージを出して終了コード 1 にします。
  - `done` で次回分ができたら `次回: {id} {due}` を表示します。
  - 完了済みタスクをもう一度 `done` しても、次回分は重複して作りません。
- **`taskboard/report.py`**: 繰り返しタスクだけ一覧に印を付けます。繰り返しでないタスクの表示は変えません。
- **`README.md`**: 使用例を追記します。

## 前提とした判断
- 月末の丸めは、直前の期限を基準に次を計算します。そのため 1/31 → 2/28 → 3/28 と日がずれていきます。元の日（31日）を保つ方式にもできますが、今回は採っていません。
- 期限を過ぎてから完了した場合、次回の期限は元の期限日に間隔を足すため、まだ過去の日付になることがあります。これは要件どおりの挙動です。
- 繰り返しの終了条件や、後から `repeat` を変更する機能は対象外です。

## 検証
- 追加するテスト:
  - `next_due`（月末、うるう年、年またぎ）
  - 次回生成と、元の期限日が基準になること
  - 重複生成の防止
  - 繰り返しでないタスクの挙動が変わらないこと
  - `--due` なしの `--repeat` がエラーになること
  - 旧JSONの読み込み互換
- `python -m unittest discover -s tests` を実行します。
- 手動で `add --repeat weekly` → `done` → `list` を確認します。

この方針で進めてよければ、承認をお願いします。月末の扱いなど変えたい点があれば教えてください。