Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:39:29 +08:00
commit f2613ae15b
26 changed files with 5240 additions and 0 deletions

223
commands/list-specs.md Normal file
View File

@@ -0,0 +1,223 @@
---
description: すべてのspecの一覧とステータスを表示し、specs/status.mdに保存
---
# spec一覧とステータスの表示・保存
`specs/` ディレクトリ配下のすべてのタスクを走査し、各タスクの進捗状況を集計して `specs/status.md` に保存します。
## 実行手順
### 1. specs/ディレクトリの確認
- `specs/` ディレクトリの存在を確認
- 存在しない場合は、空のステータスファイルを作成して終了
### 2. タスク情報の収集
各タスクディレクトリ(`specs/*/`)について、以下の情報を収集:
**⚠️ 重要**: `specs/_archived/` 配下のタスクは完全に無視します(アーカイブ済みタスクはノイズ)
#### 2.1 基本情報の取得
- タスク名(ディレクトリ名)
- 最終更新日時ディレクトリ内のすべてのファイルの最新mtime
#### 2.2 仕様書の存在確認
- `overview.md` の存在
- `specification.md` の存在
- `technical-details.md` の存在
#### 2.3 Phase情報の取得
**overview.mdから**:
- プロジェクト概要(「## プロジェクト概要」セクションの「目的と背景」または最初の数行を簡潔に取得)
- Phase数
- 各Phaseの名前
- 各Phaseの状態未着手/進行中/完了)
**tasks/ディレクトリから**:
- Phase計画書`phase{N}-*.md`)の存在確認
#### 2.4 Phase進捗の集計
各Phase計画書`specs/{taskname}/tasks/phase{N}-*.md`)から:
**タスク進捗**:
```markdown
## タスク一覧
| # | タスク名 | 状態 | TDD | 説明 |
|---|---------|------|-----|------|
| 1 | ... | ✅完了 | Green | ... |
| 2 | ... | 🔄進行中 | Red | ... |
| 3 | ... | ⬜未着手 | - | ... |
```
- 各タスクの状態を集計
- ✅完了: 完了カウント +1
- 🔄進行中: 進行中カウント +1
- ⬜未着手: 未着手カウント +1
#### 2.5 タスク全体のステータス判定
以下のロジックでタスクのステータスを判定:
```
if 仕様書が存在しない:
ステータス = "未着手"
else if すべてのPhaseが完了状態:
ステータス = "完了"
else if いずれかのPhaseが進行中または完了:
ステータス = "進行中"
else:
ステータス = "未着手"
```
#### 2.6 次に実行すべきコマンドの判定
`/sdd:next-step` コマンドと同様のロジックで判定:
- 仕様書が存在しない → `/sdd:create-specs`
- 仕様書に「**不明**」がある → `/sdd:clarify-spec {taskname}`
- Phase計画書がない → `/sdd:break-down-phase {taskname}`
- Phase未着手 → `/sdd:implement-phase {taskname}`
- Phase進行中 → `/sdd:implement-phase {taskname} {phase}.{next_task}`
- Phase完了、未検証 → `/sdd:verify-phase {taskname} {phase}`
- Phase検証済み、次Phaseあり → `/sdd:implement-phase {taskname} {next_phase}.1`
- すべて完了 → `/sdd:archive-spec`
### 3. ステータスファイルの生成
#### 3.1 データのソート
1. ステータスでグループ化(未着手 → 進行中 → 完了)
2. 各グループ内で更新日時順(新しい順)にソート
#### 3.2 Markdown生成
以下のような形式でstatus.mdを生成します。
**フォーマット:**
```markdown
# SDD Spec Status
最終更新: {現在日時}
## 次に実施すべきこと
{進行中タスクがある場合: 進行中タスクの次のコマンド}
{進行中タスクがない場合: 最初の未着手タスクの次のコマンド}
{全て完了の場合: アーカイブを促すメッセージ}
## タスク一覧
### 🔄 進行中
| タスク名 | Phase進捗 | 最終更新 | 次のコマンド |
|---------|----------|---------|-------------|
| {taskname} | Phase {N} ({completed}/{total}) | YYYY-MM-DD | `/sdd:implement-phase {taskname} {phase}.{task}` |
### ⬜ 未着手
| タスク名 | 最終更新 | 次のコマンド |
|---------|---------|-------------|
| {taskname} | YYYY-MM-DD | `/sdd:create-specs` |
### ✅ 完了
| タスク名 | 最終更新 | 次のコマンド |
|---------|---------|-------------|
| {taskname} | YYYY-MM-DD | `/sdd:archive-spec` |
```
**作成例:**
```markdown
# SDD Spec Status
最終更新: 2025-10-31 14:30:00
## 次に実施すべきこと
`/sdd:implement-phase user-authentication 1.4`
## タスク一覧
### 🔄 進行中
| タスク名 | Phase進捗 | 最終更新 | 次のコマンド |
|---------|----------|---------|-------------|
| user-authentication | Phase 1 (3/5) | 2025-10-30 | `/sdd:implement-phase user-authentication 1.4` |
| payment-integration | Phase 2 (2/7) | 2025-10-29 | `/sdd:implement-phase payment-integration 2.3` |
### ⬜ 未着手
| タスク名 | 最終更新 | 次のコマンド |
|---------|---------|-------------|
| admin-dashboard | 2025-10-28 | `/sdd:create-specs` |
### ✅ 完了
| タスク名 | 最終更新 | 次のコマンド |
|---------|---------|-------------|
| database-setup | 2025-10-27 | `/sdd:archive-spec` |
```
### 4. ファイルの保存
- `specs/status.md` に保存
- `specs/` ディレクトリが存在しない場合は作成
### 5. 完了メッセージの表示
```
✅ Specステータスを更新しました
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📍 保存先: specs/status.md
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## エラーハンドリング
### specs/ディレクトリが存在しない場合
```markdown
⚠️ specs/ディレクトリが見つかりません。
specs/ディレクトリを作成して、空のステータスファイルを生成します。
```
→ 空のステータスファイルを作成
```markdown
# SDD Spec Status
最終更新: {現在日時}
## タスク一覧
タスクがまだ作成されていません。
新しいタスクを作成するには:
\```
/sdd:create-specs
\```
```
### タスクディレクトリが空の場合
- ステータス: "未着手"
- 次のコマンド: `/sdd:create-specs`
### overview.mdが破損している場合
- エラーを記録しつつ、他のファイルから可能な限り情報を取得
- 次のコマンド: `/sdd:clarify-spec {taskname}` (修復を促す)
## 注意事項
- **⚠️ 重要**: このコマンドは読み取り専用です。既存のspecファイルは変更しません
- ステータスファイルは完全に再生成されます(手動編集は上書きされます)
- Phase進捗は各Phase計画書から自動計算されます
- 「次のコマンド」は推測であり、必ずしも最適とは限りません
- ファイルのmtimeを基に最終更新日時を判定するため、ファイルコピー時は正確でない場合があります