Files
gh-masseater-claude-code-pl…/commands/sync-spec.md
2025-11-30 08:39:29 +08:00

262 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
argument-hint: [taskname] [phase番号]
---
# Phase途中でのドキュメント同期
Phase作業途中で中断したい時や、完了したタスクの状態をドキュメントに反映したい時に使用します。
Phase計画書とoverview.mdの状態を現在の進捗に同期させます。
【引数】
$ARGUMENTS
## 引数の形式(すべてオプショナル)
- `[taskname]` - タスク名(省略時: コンテキストから推測)
- `[phase番号]` - Phase番号省略時: コンテキストから推測)
## コンテキストからの推測
引数が指定されていない場合、以下の順序で推測を試みます:
### 1. 会話履歴からの推測
最近の会話で以下のコマンドが実行されているか確認:
- `/sdd:implement-phase [taskname] [phase.task]`
- `/sdd:break-down-phase [taskname]`
- `/sdd:verify-phase [taskname] [phase]`
- その他 `/sdd:*` コマンド
コマンド履歴からtaskname、phase番号を抽出します。
### 2. ファイル操作履歴からの推測
最近読み込み・編集されたファイルパスを確認:
- `specs/[taskname]/tasks/phase{N}-*.md`
- `specs/[taskname]/overview.md`
- `specs/[taskname]/specification.md`
- `specs/[taskname]/technical-details.md`
ファイルパスからtaskname、phase番号を抽出します。
### 3. 推測結果の確認
推測が成功した場合、AskUserQuestionで確認
**質問**: 「以下のタスクとPhaseでドキュメントを同期しますか
- タスク名: {taskname}
- Phase: {phase番号}
**選択肢**:
- 「はい推測されたタスクとPhaseで同期
- 「いいえ(引数で指定したい)」
「いいえ」が選択された場合:
- コマンドの使用方法を表示
- 例: `/sdd:sync-spec user-authentication 2`
### 4. 推測できない場合
`specs/`ディレクトリ内のタスクをリスト表示し、AskUserQuestionで選択
**質問**: 「どのタスクのドキュメントを同期しますか?」
- 選択肢: specs/配下のディレクトリリスト
タスクが選択された後、そのタスクのPhaseをリスト表示
**質問**: 「どのPhaseのドキュメントを同期しますか
- 選択肢: overview.mdから抽出したPhaseリスト
## 実行手順
### 1. タスクとPhaseの特定
上記の推測ロジックまたは引数からtasknameとphase番号を特定
### 2. 現在の実装状況を調査
以下の情報から実装状況を推測:
#### コードベースの調査
- 最近編集されたファイル(会話履歴から)
- 実装されたファイルの存在確認
- 関連するコミット履歴git logから
- テストファイルの存在と実行状況
#### Phase計画書の読み込み
`specs/[taskname]/tasks/phase{N}-*.md` を読み込み:
- タスク目次の現在の状態
- 各タスクの説明と実装対象
- 現在のTDDステップの進捗
- 既存の開始日時、完了日時
#### overview.mdの読み込み
`specs/[taskname]/overview.md` を読み込み:
- 該当Phaseの現在の状態
- Phase間の依存関係
### 3. タスク完了状況の判定
各タスクについて、以下の基準で完了状況を判定:
#### 完了の判定基準
- タスクで実装対象とされているファイルが存在する
- 関連するテストファイルが存在するTDD Red/Greenの確認
- git logに該当タスクのコミットがある
- 既にPhase計画書で「完了」とマークされている
#### 進行中の判定基準
- 一部のファイルは存在するが、すべては揃っていない
- 既にPhase計画書で「進行中」とマークされている
- 会話履歴から該当タスクに着手していることが明らか
#### 未着手の判定基準
- 実装対象のファイルが存在しない
- 会話履歴に該当タスクの言及がない
### 4. TDDステップの判定
各タスクについて、TDDステップの完了状況を判定
- **Red**: テストファイルが存在する
- **Green**: 実装ファイルが存在し、テストが通る状態(品質チェックが成功)
- **Refactor**: コードレビュー基準を満たしているany型なし、適切な型定義など
### 5. Phase状態の判定
タスクの完了状況から、Phase状態を自動判定
- **未着手**: すべてのタスクが未着手
- **進行中**: 1つ以上のタスクが進行中または完了すべては完了していない
- **完了**: すべてのタスクが完了
### 6. 更新内容の整理
Phase計画書とoverview.mdへの更新内容を整理
- タスクごとの状態変更
- TDDステップの更新
- Phase状態の変更
- 開始日時の記録(未記録のタスクのみ)
### 7. 更新内容のプレビュー
ユーザーに以下の形式で報告:
```markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 ドキュメント同期プレビュー
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📍 specs/{taskname}/ - Phase {N}
## 実装状況の調査結果
### タスク完了状況
- 全タスク数: {total}
- 完了タスク: {completed}(判定基準: 実装ファイル・テストファイル存在、コミット履歴)
- 進行中タスク: {in_progress}(判定基準: 一部ファイル存在、会話履歴から着手)
- 未着手タスク: {not_started}
### タスク詳細
- タスク1: {タスク名} - 現在: 未着手 → 更新後: 完了
理由: {ファイル存在、テスト実行済み}
- タスク2.1: {タスク名} - 現在: 未着手 → 更新後: 進行中
理由: {実装ファイルは存在するがテスト未実装}
- タスク2.2: {タスク名} - 現在: 未着手 → 更新後: 未着手
理由: {実装なし}
### TDDステップ完了状況
- タスク1: ✅ Red / ✅ Green / ✅ Refactorテスト・実装・品質チェック完了
- タスク2.1: ✅ Red / ⬜ Green / ⬜ Refactorテストのみ存在
## 更新内容
### Phase計画書 (phase{N}-*.md)
- タスク目次: タスク状態とTDDステップを更新
- タスク詳細: 状態、開始日時、TDDチェックボックスを更新
### overview.md
- Phase状態: {current_status} → {new_status}
- 理由: {判定理由(例: 5/10タスクが完了しているため「進行中」に更新}
## この内容でドキュメントを更新します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
### 8. ドキュメント更新の実行
上記のプレビュー内容を表示した後、ドキュメントを更新:
#### Phase計画書の更新
1. **タスク目次の更新**
- 各タスクの状態を判定結果に基づいて更新
- TDDステップのチェックボックスを更新
2. **タスク詳細の更新**
- 状態を更新(未着手 → 進行中 or 完了)
- 開始日時を記録(未記録の場合、現在時刻を設定)
- TDDステップのチェックボックスを更新
3. **Phase概要の更新**
- Phase状態を判定結果に基づいて更新
#### overview.mdの更新
- 該当Phaseの状態を判定結果に基づいて更新
### 9. 完了報告
```markdown
✅ ドキュメント同期完了
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📍 specs/{taskname}/ - Phase {N}
💡 次のアクション:
- 作業を続ける: `/sdd:implement-phase {taskname} {next_task}`
- Phase検証: `/sdd:verify-phase {taskname} {N}`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## 重要な仕様
### タスクの開始日時について
- 既に開始日時が記録されている場合は上書きしない
- 未記録で状態が「進行中」または「完了」になる場合、現在時刻を設定
- フォーマット: `YYYY-MM-DD HH:MM`
### TDDステップの更新
- タスクが「完了」の場合、ユーザーに確認してチェックボックスを更新
- タスクが「進行中」の場合、現在のチェック状態を保持(ユーザーが個別に指定可能)
- タスクが「未着手」の場合、チェックボックスはすべて未チェック
### Phase状態の判定基準
Phase状態の推奨値ユーザーは任意に変更可能
- **未着手**: すべてのタスクが未着手
- **進行中**: 1つ以上のタスクが進行中または完了すべては完了していない
- **完了**: すべてのタスクが完了
### 並列タスクの扱い
- タスク番号がn.x形式例: 2.1, 2.2, 2.3)のタスクは並列実行可能
- 同じグループ内の一部のタスクのみ完了している場合も正しく反映
## 注意事項
- **⚠️ 重要**: このコマンドは実装状況を推測してドキュメントを更新します。実際の実装やテストの実行は行いません
- **⚠️ 重要**: Phase完了条件のチェックボックスは自動更新しません`/sdd:verify-phase`で検証後に更新)
- **⚠️ 重要**: 既存の進捗情報(開始日時、完了日時、メモなど)は可能な限り保持します
- タスクの依存関係は確認しますが、警告のみで更新は続行します
- overview.mdの他のセクション依存関係、ブロッカーなどは更新しません
## 他のコマンドとの関係
- **`/sdd:implement-phase`**: 実装作業の完了時に状態更新を提案するが、`sync-spec`は途中でも実行可能
- **`/sdd:verify-phase`**: Phase完了時の検証を行い、overview.md更新を提案する
- **`/sdd:break-down-phase`**: Phase計画書を生成・更新するタスク構造の変更
このコマンドは「実装作業は継続するが、現時点の進捗を仕様書に記録したい」という場合に最適です。
## 内部品質チェック
**重要**: 以下のチェックはコマンド内部で実施し、**生成されるspecファイルには結果を記載しません**。
### 矛盾チェック(内部処理)
ドキュメント同期後、内部的に仕様書間の矛盾を確認:
- Phase状態とタスク状態の整合性
- 依存関係のあるタスク間の矛盾
- overview.mdとPhase計画書の整合性
矛盾がある場合のみユーザーに警告を表示。問題がなければ何も出力しない。