ExitPlanMode ツールが使えないため、計画をここで提示します。計画ファイルにも同じ内容を書きました。

## 実装計画（コードは未着手）

**変更箇所**

1. **`taskboard/models.py`**: `Task` に `depends_on: list[int]` を追加します。`to_dict` と `from_dict` も対応させます。`from_dict` は `d.get("depends_on", [])` で読み、既存のJSONとの後方互換を保ちます。
2. **`taskboard/store.py`**
   - `add(..., depends_on=...)`: タスクを作る前に各IDを検証します。不在IDがあれば `KeyError` を出し、タスクは作りません。
   - `add_dependency(id, dep_id)`: 両IDを検証し、重複登録は何もしません。
   - `blockers(id)`: 依存先のうち未完了のものを返します。
   - `complete()`: 未完了の依存先があれば例外を出し、状態は変えず保存もしません。
3. **`taskboard/cli.py`**
   - `add` に `--after ID`（`action="append"`、複数指定可）を追加します。
   - `depend ID --on ID2` サブコマンドを新設します。
   - エラーは既存の `done` と同じ流儀で、メッセージを出して終了コード1にします。
4. **`README.md`**: 使用例を追記します。
5. **`tests/test_basic.py`**: Store と CLI の両方に、正常系・不在ID・未完了依存での `done` 拒否（状態不変）・旧形式JSON・冪等性のテストを追加します。

**要件にない判断（デフォルトで進めます）**
- 自己依存と循環依存は拒否します。循環すると永久に完了できないタスクができるためです。不要なら外します。
- `list` の表示変更と依存の解除コマンドは、要件外なので入れません。
- `--after` に不在IDが1つでも含まれたら、タスクを一切作りません。

**検証**: `python -m unittest discover -s tests` を実行します。加えて、一時DBで「依存元を完了前に `done` すると終了コード1、完了後なら成功」「`--after 99` が失敗してタスクが作られない」ことを確認します。

この方針で進めてよければ、実装に移ります。循環拒否の要否など、変えたい点があれば教えてください。