計画を作成しました（コードは未着手です）。計画ファイル: `<計画ファイル置き場>/add-velvet-tiger.md`

## 実装計画の要約

**モデル (`models.py`)**
- `Task` に `depends_on: list[int]` を追加。`from_dict` は `d.get("depends_on", [])` で旧JSONと互換。

**ストア (`store.py`)**
- `add(..., after=[...])`: 依存先IDを保存前に全て検証し、未知IDならタスクを作らない。
- `add_dependency(task_id, on_id)`: 両IDの存在確認、自己依存・循環の拒否、重複は無視。
- `blockers(task_id)`: 依存先のうち未完了のもの。
- `complete()`: blockers があれば例外を送出し、状態は変更・保存しない。

**CLI (`cli.py`)**
- `add --after ID`（複数指定可）と新コマンド `depend ID --on ID2`。
- エラーは既存の流儀どおり `out` にメッセージを出して終了コード1:
  - 存在しないID
  - 未完了の依存先があって `done` できない
  - 循環・自己依存

**その他**
- `format_task` は既存テストを壊さないため変更しない。README に使用例を追記。
- テスト: ストア・CLI の正常系/異常系（複数 `--after`、ブロック中の `done` で状態不変、未知ID、循環、旧JSON互換）を `tests/test_basic.py` に追加。
- 検証: `python -m unittest discover -s tests` と、一時DBでの `add → add --after → done` の手動確認。

## 確認させてください
要望に明記のなかった次の点は、この方針で進めます。違う場合はお知らせください。
1. 自己依存・循環依存は拒否する（完了不能なタスクを防ぐため）。
2. 完了済みの依存先への依存追加は許可する。
3. 完了済みタスクに後から未完了の依存先を足しても、完了状態は変えない。

この内容で実装に進んでよければ、お知らせください。