spec-runner 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -9
- package/bin/spec-runner.js +112 -144
- package/package.json +1 -6
- package/templates/.spec-runner/hooks/pre-commit +25 -11
- package/templates/.spec-runner/project.json.example +10 -8
- package/templates/.spec-runner/scripts/branch/uc-next-start.sh +100 -9
- package/templates/.spec-runner/scripts/check.sh +396 -13
- package/templates/.spec-runner/scripts/spec-runner-core.sh +286 -157
- package/templates/.spec-runner/scripts/test/require-tests-green.sh +7 -63
- package/templates/.spec-runner/steps/steps.json +171 -0
- package/templates/.spec-runner/steps//343/201/235/343/201/256/344/273/226/344/275/234/346/245/255.md +25 -13
- package/templates/.spec-runner/steps//343/202/277/343/202/271/343/202/257/344/270/200/350/246/247.md +67 -104
- package/templates/.spec-runner/steps//343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +52 -78
- package/templates/.spec-runner/steps//343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.md +41 -34
- package/templates/.spec-runner/steps//343/203/211/343/203/241/343/202/244/343/203/263/350/250/255/350/250/210.md +34 -14
- package/templates/.spec-runner/steps//344/273/225/346/247/230/347/255/226/345/256/232.md +161 -207
- package/templates/.spec-runner/steps//345/210/206/346/236/220.md +64 -127
- package/templates/.spec-runner/steps//345/256/237/350/243/205.md +67 -79
- package/templates/.spec-runner/steps//345/256/237/350/243/205/350/250/210/347/224/273.md +56 -56
- package/templates/.spec-runner/steps//346/206/262/347/253/240.md +67 -46
- package/templates/.spec-runner/steps//346/233/226/346/230/247/343/201/225/350/247/243/346/266/210.md +88 -148
- package/templates/.spec-runner/templates/UC-N-MMDD-/345/210/244/346/226/255/350/250/230/351/214/262/343/203/206/343/203/263/343/203/227/343/203/254.md +33 -0
- package/templates/.spec-runner/templates/{UC-NNN- → UC-N-}/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/345/220/215.md +1 -3
- package/templates/.spec-runner/templates/grade-history.json +5 -0
- package/templates/.spec-runner/templates/phase-locks.json +29 -0
- package/templates/.spec-runner/templates//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253.md +21 -0
- package/templates/.spec-runner/templates//343/203/246/343/203/223/343/202/255/343/202/277/343/202/271/350/250/200/350/252/236/350/276/236/346/233/270.md +16 -0
- package/templates/.spec-runner/templates//346/206/262/347/253/240.md +51 -0
- package/templates/.spec-runner/templates//351/233/206/347/264/204.md +46 -0
- package/templates/.spec-runner/scripts/branch/create-uc-branch.sh +0 -105
- package/templates/.spec-runner/scripts/branch/uc-next-id.sh +0 -17
- package/templates/.spec-runner/scripts/check/drift.sh +0 -66
- package/templates/.spec-runner/scripts/check/health.sh +0 -103
- package/templates/.spec-runner/scripts/check/naming.sh +0 -51
- package/templates/.spec-runner/scripts/check/schema-drift.sh +0 -74
- package/templates/.spec-runner/scripts/check/schema-sync.sh +0 -153
- package/templates/.spec-runner/scripts/lib/uc-context.sh +0 -75
- package/templates/.spec-runner/scripts/openapi/openapi-generate.sh +0 -207
- package/templates/.spec-runner/scripts/setup/init-project.sh +0 -152
|
@@ -1,74 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
---
|
|
2
|
+
step_id: charter
|
|
3
|
+
phase: 0
|
|
4
|
+
primary_output: docs/01_憲章/憲章.md
|
|
5
|
+
---
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
# 憲章策定(Phase 0: CHARTER)
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
**やること**: `docs/01_憲章/憲章.md` のプロジェクト憲章を作成・更新する。spec.md セクション 2(Phase 0)に準拠する。
|
|
10
|
+
|
|
11
|
+
| 項目 | 内容 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **成果物** | `docs/01_憲章/憲章.md` のみ |
|
|
14
|
+
| **動的設定** | 命名規則・必須ドキュメント・テストコマンドは **`.spec-runner/project.json` を AI が直接編集**して上書き |
|
|
15
|
+
| **テンプレ** | 無い場合は `.spec-runner/templates/憲章.md` から生成してから埋める |
|
|
8
16
|
|
|
9
17
|
## ユーザー入力
|
|
10
18
|
|
|
19
|
+
`$ARGUMENTS`(空でなければ必ず考慮)
|
|
20
|
+
|
|
11
21
|
```text
|
|
12
22
|
$ARGUMENTS
|
|
13
23
|
```
|
|
14
24
|
|
|
15
|
-
|
|
25
|
+
## 前提条件
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
| 状況 | 行動 |
|
|
28
|
+
|------|------|
|
|
29
|
+
| `docs/` や `docs/01_憲章/` が無い | このフェーズで **`docs/01_憲章/` を新規作成**し、その中に `憲章.md` を置く |
|
|
30
|
+
| `docs/01_憲章/憲章.md` が無い | テンプレから生成してから埋める(上記テンプレパス) |
|
|
31
|
+
|
|
32
|
+
## 禁止
|
|
18
33
|
|
|
19
|
-
|
|
34
|
+
- **他フェーズのフォルダ**(`docs/03_ドメイン設計/` 等)が既にあっても、**その既存ドキュメントからプロジェクト内容を推測しない**。憲章は**ユーザー入力と対話のみ**で策定し、既存ドキュメントに合わせて書き換えない。
|
|
35
|
+
|
|
36
|
+
## 概要
|
|
20
37
|
|
|
21
|
-
|
|
38
|
+
- 角括弧プレースホルダ(例: `[PROJECT_NAME]`, `[PRINCIPLE_1_NAME]`)を (a) 収集・導出 (b) テンプレを正確に埋める (c) 依存成果物へ反映、の三つで進める。
|
|
39
|
+
- まだ無い場合は spec.md Phase 0 テンプレ(目的・ビジョン、非交渉要件、技術スタック、投資判断、スコープ外、ガバナンス)に沿って新規作成する。
|
|
22
40
|
|
|
23
|
-
|
|
41
|
+
## 実行フロー
|
|
24
42
|
|
|
25
|
-
1.
|
|
43
|
+
1. **既存憲章の読み込み**
|
|
44
|
+
`docs/01_憲章/憲章.md` が**ある場合のみ**読み、`[ALL_CAPS_IDENTIFIER]` 形式のプレースホルダをすべて特定。**無い場合**は Phase 0 テンプレに沿って新規作成(フォルダ作成ルールに従う)。
|
|
45
|
+
**重要**: ユーザーがテンプレより少ない/多い原則を求める場合がある。数が指定されていればそれに従い、一般的なテンプレに沿って更新する。
|
|
26
46
|
|
|
27
|
-
2.
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
- `CONSTITUTION_VERSION`
|
|
32
|
-
- MAJOR
|
|
33
|
-
- MINOR
|
|
34
|
-
- PATCH
|
|
35
|
-
-
|
|
47
|
+
2. **プレースホルダへの値の収集・導出**
|
|
48
|
+
- ユーザー入力(会話)で与えられていればそれを使う
|
|
49
|
+
- 不明は **推測で確定しない**。本文に **`[要確認: ...]`**(例: `[要確認: PROJECT_NAME(正式名称)]`)
|
|
50
|
+
- ガバナンス日付: `RATIFICATION_DATE` は採択日(不明なら質問か TODO)、`LAST_AMENDED_DATE` は変更があれば今日、なければ前回のまま
|
|
51
|
+
- `CONSTITUTION_VERSION` はセマンティック:
|
|
52
|
+
- **MAJOR**: 後方互換のないガバナンス/原則の削除・再定義
|
|
53
|
+
- **MINOR**: 新規原則/セクション追加または重要な拡張
|
|
54
|
+
- **PATCH**: 明確化・表現・誤字・意味を変えない調整
|
|
55
|
+
- 種類が曖昧なら確定前に理由を提示
|
|
36
56
|
|
|
37
|
-
3.
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
57
|
+
3. **更新後の憲章文案**
|
|
58
|
+
- プレースホルダは具体テキストで置換(意図的スロット以外は角括弧を残さない。残す場合は理由を明記)
|
|
59
|
+
- 見出し階層はテンプレと同一。コメントは置換後削除可(説明になっていれば残す)
|
|
60
|
+
- 各原則: 簡潔な名前・非交渉ルールの段落/箇条書き・理由が自明でなければ明示
|
|
61
|
+
- ガバナンス: 改正手続き・バージョン方針・準拠レビューの期待
|
|
42
62
|
|
|
43
|
-
4.
|
|
44
|
-
- `docs/
|
|
45
|
-
- README
|
|
63
|
+
4. **整合性の伝播**(該当フォルダが**既に存在する場合のみ**)
|
|
64
|
+
- `docs/03_ドメイン設計/` や `docs/04_アーキテクチャ/` があれば、憲章原則と矛盾がないか確認。存在しないフェーズは無視
|
|
65
|
+
- README / spec-runner ガイダンスで原則参照の更新が必要なら案内
|
|
46
66
|
|
|
47
|
-
5.
|
|
48
|
-
- 説明のない角括弧トークンが残っていない
|
|
49
|
-
- バージョン行が変更内容と一致
|
|
50
|
-
- 日付は ISO 形式 YYYY-MM-DD
|
|
51
|
-
- 原則は宣言的・テスト可能で、曖昧な表現(「should」は必要に応じて MUST/SHOULD と理由に置き換える)がない
|
|
67
|
+
5. **最終検証**(成果物・検証も参照)
|
|
52
68
|
|
|
53
|
-
6.
|
|
69
|
+
6. **書き込み**
|
|
70
|
+
完成した憲章を **`docs/01_憲章/憲章.md`** に上書き。**憲章先頭に HTML コメントの「同期影響レポート」や `status: reviewed` は付けない**(`.spec-runner/phase-locks.json` のみで管理)。
|
|
54
71
|
|
|
55
|
-
7.
|
|
56
|
-
-
|
|
72
|
+
7. **ユーザーへの最終サマリ**
|
|
73
|
+
- 新バージョンと上げた理由
|
|
57
74
|
- 手動フォローアップが必要なファイル
|
|
58
|
-
-
|
|
75
|
+
- 推奨コミットメッセージ例: `docs: 憲章を vX.Y.Z に改正(原則追加とガバナンス更新)`
|
|
59
76
|
|
|
60
|
-
|
|
77
|
+
## 成果物・検証
|
|
61
78
|
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
79
|
+
- [ ] 説明のない角括弧トークンが残っていない
|
|
80
|
+
- [ ] バージョン行が変更内容と一致
|
|
81
|
+
- [ ] 日付は ISO `YYYY-MM-DD`
|
|
82
|
+
- [ ] 原則は宣言的・テスト可能。曖昧な「should」は必要に応じ MUST/SHOULD と理由へ
|
|
66
83
|
|
|
67
|
-
|
|
84
|
+
ユーザーが一部だけ更新を依頼した場合も、検証とバージョン決定は行う。
|
|
85
|
+
欠けている重要情報(例: 批准日が本当に不明)は `TODO(<フィールド名>): 説明` を本文に挿入し、サマリでフォローアップを案内。
|
|
86
|
+
**新規テンプレは作らない**。常に **`docs/01_憲章/憲章.md`** を操作する。
|
|
68
87
|
|
|
69
|
-
|
|
88
|
+
## 付録: 書式・スタイル
|
|
70
89
|
|
|
71
|
-
|
|
90
|
+
- 見出しはテンプレと同一(レベルを上げ下げしない)
|
|
91
|
+
- 理由は 100 文字目安で折り返すが、不自然な改行は避ける
|
|
92
|
+
- セクション間は空行 1 行、行末空白を避ける
|
|
72
93
|
|
|
73
94
|
---
|
|
74
|
-
|
|
95
|
+
**次**: 完了後、次のステップへ進む。
|
package/templates/.spec-runner/steps//346/233/226/346/230/247/343/201/225/350/247/243/346/266/210.md
CHANGED
|
@@ -1,159 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
step_id: clarify
|
|
3
|
+
phase: 3
|
|
4
|
+
note: UC 仕様の前後で曖昧さを解消
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 曖昧さ解消(品質フロー)
|
|
1
8
|
|
|
2
|
-
|
|
9
|
+
**やること**: Phase 3(UC 仕様)の曖昧さ・不足決定を検出し、**対話で 1 問ずつ**解消して仕様ファイルに反映する。
|
|
10
|
+
|
|
11
|
+
| 項目 | 内容 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **タイミング** | 「実装計画」の**前**に完了想定。ユーザーがスキップする場合は警告のうえ進めてよい |
|
|
14
|
+
| **仕様パス** | `FEATURE_SPEC` = `docs/02_ユースケース仕様/<カテゴリ>/UC-N-xxx.md` |
|
|
15
|
+
| **判断ログ(任意)** | `FEATURE_DIR/判断記録/UC-N-MMDD-題名.md`。テンプレ: `.spec-runner/templates/UC-N-MMDD-判断記録テンプレ.md`。横断は `docs/04_アーキテクチャ/設計判断記録/` |
|
|
3
16
|
|
|
4
17
|
## ユーザー入力
|
|
5
18
|
|
|
19
|
+
`$ARGUMENTS`(空でなければ必ず考慮)。優先付けの文脈にも使う。
|
|
20
|
+
|
|
6
21
|
```text
|
|
7
22
|
$ARGUMENTS
|
|
8
23
|
```
|
|
9
24
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
- スケーラビリティ(水平/垂直・上限)
|
|
47
|
-
- 信頼性・可用性(稼働率・復旧の期待)
|
|
48
|
-
- 観測性(ログ・メトリクス・トレース)
|
|
49
|
-
- セキュリティ・プライバシー(認証/認可・データ保護・脅威の仮定)
|
|
50
|
-
- コンプライアンス・規制(該当する場合)
|
|
51
|
-
|
|
52
|
-
**連携と外部依存**
|
|
53
|
-
- 外部サービス/API と障害モード
|
|
54
|
-
- データインポート/エクスポート形式
|
|
55
|
-
- プロトコル・バージョニングの仮定
|
|
56
|
-
|
|
57
|
-
**エッジケースと障害処理**
|
|
58
|
-
- ネガティブシナリオ
|
|
59
|
-
- レート制限・スロットリング
|
|
60
|
-
- 競合解決(例: 同時編集)
|
|
61
|
-
|
|
62
|
-
**制約とトレードオフ**
|
|
63
|
-
- 技術的制約(言語・ストレージ・ホスティング)
|
|
64
|
-
- 明示的なトレードオフや却下した代替案
|
|
65
|
-
|
|
66
|
-
**用語と一貫性**
|
|
67
|
-
- 正規の用語集
|
|
68
|
-
- 避ける同義語・非推奨語
|
|
69
|
-
|
|
70
|
-
**完了のシグナル**
|
|
71
|
-
- 受入基準のテスト可能性
|
|
72
|
-
- 測定可能な Done の指標
|
|
73
|
-
|
|
74
|
-
**その他・プレースホルダ**
|
|
75
|
-
- TODO・未解決の決定
|
|
76
|
-
- 定量化されていない曖昧な形容詞(「堅牢」「直感的」など)
|
|
77
|
-
|
|
78
|
-
Partial または Missing のカテゴリには、次の場合を除き質問候補を追加する:
|
|
79
|
-
- 解消しても実装・検証戦略が大きく変わらない
|
|
80
|
-
- 情報は計画フェーズに回す方がよい(内部でメモ)
|
|
81
|
-
|
|
82
|
-
3. 候補となる確認質問の優先キューを内部で生成する(最大 5 問)。一度に全部は出さない。制約:
|
|
83
|
-
- セッション全体で最大 5 問
|
|
84
|
-
- 各質問は「2〜5 個の択一選択」または「1 語/短いフレーズ(5 語以内)」で答えられること
|
|
85
|
-
- 回答がアーキテクチャ・データモデル・タスク分解・テスト設計・UX・運用準備・コンプライアンス検証に大きく影響する質問だけ含める
|
|
86
|
-
- カテゴリのバランスをとり、未解決の影響の大きい領域を優先する
|
|
87
|
-
- 既に答え済み・ trivial なスタイル・計画レベルの実行詳細は除外(正確性を阻害しない限り)
|
|
88
|
-
- 下流の手戻りリスクを減らす・受入テストのずれを防ぐ質問を優先
|
|
89
|
-
- 5 カテゴリ以上未解決なら、(影響 × 不確実性) で上位 5 つを選ぶ
|
|
90
|
-
|
|
91
|
-
4. **逐次質問ループ(対話)**:
|
|
92
|
-
- 一度に**1 問だけ**提示する
|
|
93
|
-
- 択一形式の場合:
|
|
94
|
-
- 全選択肢を分析し、プロジェクトタイプのベストプラクティス・類似実装のパターン・リスク低減・仕様上の目標/制約に合う**最適な選択肢**を決める
|
|
95
|
-
- **推奨**を冒頭で理由付き(1〜2 文)で示す。形式: `**推奨:** 選択肢 [X] - <理由>`
|
|
96
|
-
- 続けてマークダウン表で全選択肢を表示する
|
|
97
|
-
- 表の後に「選択肢の文字(例: A)で返答するか、'yes' または 'recommended' で推奨を採用するか、独自の短い回答を入力できます」と書く
|
|
98
|
-
- 短答形式(意味のある離散選択肢がない場合):
|
|
99
|
-
- ベストプラクティスと文脈に基づいて**提案回答**を出す。形式: `**提案:** <回答> - <簡潔な理由>`
|
|
100
|
-
- 「形式: 短答(5 語以内)。'yes' または 'suggested' で提案を採用するか、独自の回答を入力できます」と出力する
|
|
101
|
-
- ユーザーが回答したら:
|
|
102
|
-
- "yes" / "recommended" / "suggested" なら、先の推奨/提案を回答として採用する
|
|
103
|
-
- それ以外は、選択肢のいずれかに対応しているか、5 語以内かを確認する
|
|
104
|
-
- 曖昧なら同一質問内で簡潔に聞き直す(質問数は増やさない)
|
|
105
|
-
- 問題なければ作業用メモリに記録し(まだディスクには書かない)、キューから次の質問へ進む
|
|
106
|
-
- 次のいずれかで質問を打ち切る: 重要な曖昧さが早く解消された / ユーザーが「完了」「十分」「もういい」などと合図 / 5 問に達した
|
|
107
|
-
- 今後の質問を事前に明かさない
|
|
108
|
-
- 最初から有効な質問がなければ、重要な曖昧さは検出されなかったと報告する
|
|
109
|
-
|
|
110
|
-
5. **回答ごとの反映(増分更新)**:
|
|
111
|
-
- 仕様のメモリ上の表現とファイル内容を保持する
|
|
112
|
-
- このセッションで最初に反映する回答のとき:
|
|
113
|
-
- `## 解消事項` セクションが存在するか確認し、なければ仕様テンプレートに従い最上位の文脈/概要セクションの直後に作成する
|
|
114
|
-
- その下に `### Session YYYY-MM-DD`(今日)の小見出しがなければ作成する
|
|
115
|
-
- 採用後すぐに箇条書きを追加: `- Q: <質問> → A: <確定した回答>`
|
|
116
|
-
- 解消内容を最も適切なセクションに反映する:
|
|
117
|
-
- 機能の曖昧さ → 機能要件の箇条書きを更新または追加
|
|
118
|
-
- ユーザー操作/アクターの区別 → ユーザーストーリーまたはアクターに役割・制約・シナリオを追記
|
|
119
|
-
- データ形状/エンティティ → データモデルを更新(フィールド・型・リレーションを順序を保って追加)、制約を簡潔に記載
|
|
120
|
-
- 非機能制約 → 非機能/品質属性セクションに測定可能な基準を追加・修正(曖昧な形容詞を指標や目標に変換)
|
|
121
|
-
- エッジケース/ネガティブフロー → エッジケース/エラー処理の下に箇条書きを追加(該当サブセクションがなければ作成)
|
|
122
|
-
- 用語の衝突 → 仕様全体で用語を統一し、必要なら元の表現は「(旧: "X")」と一度だけ残す
|
|
123
|
-
- 解消により以前の曖昧な記述が無効になる場合は、重複せずその記述を置き換え、矛盾する古い記述を残さない
|
|
124
|
-
- コンテキスト消失を防ぐため、**各反映の直後に**仕様ファイルを保存する(上書き)
|
|
125
|
-
- 書式を崩さず、無関係なセクションの順序や見出し階層を保つ
|
|
126
|
-
- 追記は最小限でテスト可能にし、叙述の拡散を避ける
|
|
127
|
-
|
|
128
|
-
6. **検証(各書き込み後および最終)**:
|
|
129
|
-
- 解消セッションには採用した回答ごとに 1 箇条(重複なし)
|
|
25
|
+
## 実行フロー
|
|
26
|
+
|
|
27
|
+
1. **JSON**
|
|
28
|
+
`.spec-runner/spec-runner.sh 次のステップ --json` を **1 回**。`feature/UC-N-xxx`。`FEATURE_SPEC`・`FEATURE_DIR` を使用。実装方針・タスクは **UC .md の一番下**。
|
|
29
|
+
JSON パース失敗 → 中止。「仕様策定」で UC ブランチ作成または checkout を案内。
|
|
30
|
+
シングルクォートはエスケープ(例: `'I'\''m Groot'`)。
|
|
31
|
+
|
|
32
|
+
2. **スキャン**
|
|
33
|
+
付録のカテゴリで曖昧さ・カバレッジをスキャンし各カテゴリに Clear / Partial / Missing。内部マップ作成(質問がない場合以外は生マップは出さない)。
|
|
34
|
+
Partial/Missing は **付録「質問候補の除外」** に該当しなければ質問候補へ。
|
|
35
|
+
|
|
36
|
+
3. **質問キュー(最大 5 問)**
|
|
37
|
+
一度に全部は出さない。制約:
|
|
38
|
+
- セッション合計 **最大 5 問**
|
|
39
|
+
- 各問は **2〜5 択** または **短答(5 語以内)**
|
|
40
|
+
- アーキテクチャ・データモデル・タスク・テスト・UX・運用・コンプライアンスに**大きく影響**するものだけ
|
|
41
|
+
- カテゴリのバランス、影響の大きい領域優先
|
|
42
|
+
- 既答・trivial・計画レベルの実行詳細は除外
|
|
43
|
+
- 5 カテゴリ以上未解決なら (影響×不確実性) で上位 5 つ
|
|
44
|
+
|
|
45
|
+
4. **逐次質問ループ**
|
|
46
|
+
- **1 問ずつ**提示
|
|
47
|
+
- **択一**: 最適肢を分析 → `**推奨:** 選択肢 [X] - <理由>` → 表で全選択肢 → 「A で返答 / yes・recommended で推奨採用 / 短い独自回答可」
|
|
48
|
+
- **短答**: `**提案:** <回答> - <理由>` → yes・suggested で採用可
|
|
49
|
+
- 回答処理: yes/recommended/suggested → 採用。それ以外は択一対応・5 語以内を確認。曖昧は同一問内で聞き直し(問数増やさない)。OK ならメモリに記録(まだディスクに全面反映しない)
|
|
50
|
+
- 打ち切り: 重要曖昧が早く解消 / ユーザー「完了」「十分」等 / 5 問到達。今後の問は事前に明かさない。有効な問が無ければ「重要な曖昧は検出されなかった」と報告
|
|
51
|
+
|
|
52
|
+
5. **回答ごとの反映(増分)**
|
|
53
|
+
- メモリとファイル内容を保持
|
|
54
|
+
- 初回反映時: `## 解消事項` が無ければ概要直後に作成。`### Session YYYY-MM-DD` を今日で作成
|
|
55
|
+
- 採用直後: `- Q: <質問> → A: <回答>` を追記
|
|
56
|
+
- 内容を適切セクションへ(機能→機能要件、操作→ストーリー/アクター、データ→データモデル、非機能→測定可能な基準、エッジ→エッジケース、用語→統一・旧表記は一度だけ (旧: "X"))
|
|
57
|
+
- 古い曖昧記述は置換し矛盾を残さない。**各反映の直後にファイル保存**。見出し階層維持。新規見出しは **`## 解消事項`**, **`### Session YYYY-MM-DD`** のみ可
|
|
58
|
+
|
|
59
|
+
6. **検証(各書き込み後・最終)**
|
|
60
|
+
- 解消セッションは採用回答ごと 1 箇条(重複なし)
|
|
130
61
|
- 質問数(採用分)≤ 5
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
62
|
+
- 更新セクションに解消済みの曖昧プレースホルダが残っていない
|
|
63
|
+
- 矛盾なし、Markdown 有効、用語一貫
|
|
64
|
+
|
|
65
|
+
7. **書き戻し**
|
|
66
|
+
`FEATURE_SPEC` に保存
|
|
67
|
+
|
|
68
|
+
8. **完了報告**
|
|
69
|
+
質問数・回答数・仕様パス・変更セクション一覧・カテゴリカバレッジ表(Resolved / Deferred / Clear / Outstanding)。Outstanding/Deferred 残りは「実装計画」か再「曖昧さ解消」を推奨。次コマンドを明示
|
|
70
|
+
|
|
71
|
+
## 動作ルール
|
|
72
|
+
|
|
73
|
+
- 意味のある曖昧がない: 「正式な解消に値する重要な曖昧さは検出されませんでした」と次へ
|
|
74
|
+
- 仕様ファイルがない: 「仕様策定」を案内(ここでは新規仕様を作らない)
|
|
75
|
+
- 質問は合計 5 を超えない(聞き直しは新規に数えない)
|
|
76
|
+
- 機能の明確さを妨げない限り技術スタックの推測質問は避ける
|
|
77
|
+
- 「ストップ」「完了」「進めて」等を尊重
|
|
78
|
+
- 質問不要なら簡潔なカバレッジ概要(全 Clear)で次へ
|
|
79
|
+
- 5 問で未解決が残る場合は Deferred を理由付きで明示
|
|
80
|
+
|
|
81
|
+
## 付録: スキャンカテゴリ
|
|
82
|
+
|
|
83
|
+
| カテゴリ | 見ること |
|
|
84
|
+
|----------|----------|
|
|
85
|
+
| 機能スコープと振る舞い | コア目標・成功基準、スコープ外、ロール・ペルソナ |
|
|
86
|
+
| ドメインとデータモデル | エンティティ・属性・リレ、ID・一意性、ライフサイクル、データ量仮定 |
|
|
87
|
+
| インタラクションと UX | ジャーニー、エラー/空/ローディング、a11y・i18n |
|
|
88
|
+
| 非機能 | 性能、スケール、信頼性・可用性、観測性、セキュリティ・プライバシー、コンプライアンス |
|
|
89
|
+
| 連携と外部依存 | 外部 API・障害モード、I/O 形式、プロトコル仮定 |
|
|
90
|
+
| エッジと障害 | ネガティブ、レート制限、競合解決 |
|
|
91
|
+
| 制約とトレードオフ | 技術制約、却下した代替案 |
|
|
92
|
+
| 用語と一貫性 | 正規用語、避ける同義語 |
|
|
93
|
+
| 完了のシグナル | 受入のテスト可能性、測定可能な Done |
|
|
94
|
+
| その他 | TODO、未解決決定、曖昧形容詞(堅牢・直感的等) |
|
|
95
|
+
|
|
96
|
+
**質問候補から外す場合**: 解消しても実装・検証戦略が大きく変わらない / 情報は計画フェーズに回す方がよい(内部メモ)
|
|
157
97
|
|
|
158
98
|
---
|
|
159
|
-
|
|
99
|
+
**次**: 完了後、次のステップへ進む。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 判断記録(UCごと)
|
|
2
|
+
|
|
3
|
+
> ファイル名: `UC-N-MMDD-題名.md`(例: `UC-1-0317-要件解釈.md`)
|
|
4
|
+
> 置き場所: `docs/02_ユースケース仕様/<カテゴリ>/判断記録/`
|
|
5
|
+
|
|
6
|
+
## 結論(Decision)
|
|
7
|
+
|
|
8
|
+
- [要確認: 決定内容を一文で]
|
|
9
|
+
|
|
10
|
+
## 背景(Context)
|
|
11
|
+
|
|
12
|
+
- [要確認: なぜこの判断が必要になったか]
|
|
13
|
+
|
|
14
|
+
## 選択肢(Options)
|
|
15
|
+
|
|
16
|
+
- **案A**: [要確認: 説明]
|
|
17
|
+
- **案B**: [要確認: 説明]
|
|
18
|
+
- (任意)**案C**: [要確認: 説明]
|
|
19
|
+
|
|
20
|
+
## 判断理由(Rationale)
|
|
21
|
+
|
|
22
|
+
- [要確認: 採用理由(制約・トレードオフ)]
|
|
23
|
+
|
|
24
|
+
## 影響範囲(Impact)
|
|
25
|
+
|
|
26
|
+
- **仕様書**: `docs/02_ユースケース仕様/<カテゴリ>/UC-N-題名.md` のどの節に反映したか
|
|
27
|
+
- **ドメイン**: 影響がある場合は `docs/03_ドメイン設計/` の更新点
|
|
28
|
+
- **アーキ**: 横断判断なら `docs/04_アーキテクチャ/設計判断記録/` へ
|
|
29
|
+
|
|
30
|
+
## 未解決(Open Questions)
|
|
31
|
+
|
|
32
|
+
- [要確認: 未解決事項があれば]
|
|
33
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "フェーズ完了状態の単一ソース。初期状態ではすべて未完了。レビュー状態もここで管理する。インストール時に .spec-runner/phase-locks.json へコピーされる(既にある場合はスキップ)。",
|
|
3
|
+
"charter": {
|
|
4
|
+
"completed": false,
|
|
5
|
+
"locked_at": null,
|
|
6
|
+
"reviewed_by": null
|
|
7
|
+
},
|
|
8
|
+
"domain": {
|
|
9
|
+
"completed": false,
|
|
10
|
+
"locked_at": null,
|
|
11
|
+
"reviewed_by": null
|
|
12
|
+
},
|
|
13
|
+
"architecture": {
|
|
14
|
+
"completed": false,
|
|
15
|
+
"locked_at": null,
|
|
16
|
+
"reviewed_by": null
|
|
17
|
+
},
|
|
18
|
+
"infra": {
|
|
19
|
+
"completed": false,
|
|
20
|
+
"locked_at": null,
|
|
21
|
+
"reviewed_by": null
|
|
22
|
+
},
|
|
23
|
+
"test_design": {
|
|
24
|
+
"completed": false,
|
|
25
|
+
"locked_at": null,
|
|
26
|
+
"reviewed_by": null
|
|
27
|
+
},
|
|
28
|
+
"uc_reviewed": []
|
|
29
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# ドメインモデル
|
|
2
|
+
|
|
3
|
+
## 境界づけられたコンテキスト(Bounded Context)
|
|
4
|
+
|
|
5
|
+
- [CONTEXT_1]: [CONTEXT_1_DESC]
|
|
6
|
+
|
|
7
|
+
## 主要概念(高レベル)
|
|
8
|
+
|
|
9
|
+
- [CONCEPT_1]
|
|
10
|
+
- [CONCEPT_2]
|
|
11
|
+
|
|
12
|
+
## 関係(ざっくりでよい)
|
|
13
|
+
|
|
14
|
+
- [RELATION_1]
|
|
15
|
+
- [RELATION_2]
|
|
16
|
+
|
|
17
|
+
## 不変条件(Invariants)
|
|
18
|
+
|
|
19
|
+
- [INVARIANT_1]
|
|
20
|
+
- [INVARIANT_2]
|
|
21
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# ユビキタス言語辞書
|
|
2
|
+
|
|
3
|
+
## 用語(Terms)
|
|
4
|
+
|
|
5
|
+
| 用語 | 定義 | 同義語/別名 | 例 | 備考 |
|
|
6
|
+
|------|------|-------------|----|------|
|
|
7
|
+
| [TERM_1] | [DEFINITION_1] | [SYNONYM_1] | [EXAMPLE_1] | |
|
|
8
|
+
| [TERM_2] | [DEFINITION_2] | [SYNONYM_2] | [EXAMPLE_2] | |
|
|
9
|
+
|
|
10
|
+
## 禁止語(Forbidden)
|
|
11
|
+
|
|
12
|
+
同義語の乱立や解釈ズレを防ぐため、以下の語は使わない(または、使う場合はこの辞書に登録してからにする)。
|
|
13
|
+
|
|
14
|
+
- [FORBIDDEN_1](代替: [PREFERRED_1])
|
|
15
|
+
- [FORBIDDEN_2](代替: [PREFERRED_2])
|
|
16
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 憲章(プロジェクト憲章)
|
|
2
|
+
|
|
3
|
+
## 基本情報
|
|
4
|
+
|
|
5
|
+
- プロジェクト名: [PROJECT_NAME](不明なら `[要確認: PROJECT_NAME]`)
|
|
6
|
+
- 概要(1〜3行): [SUMMARY](不明なら `[要確認: SUMMARY]`)
|
|
7
|
+
- 批准日(YYYY-MM-DD): [RATIFICATION_DATE](不明なら `[要確認: RATIFICATION_DATE]`)
|
|
8
|
+
- 最終改正日(YYYY-MM-DD): [LAST_AMENDED_DATE](不明なら `[要確認: LAST_AMENDED_DATE]`)
|
|
9
|
+
- バージョン: [CONSTITUTION_VERSION](不明なら `[要確認: CONSTITUTION_VERSION]`)
|
|
10
|
+
|
|
11
|
+
## 目的・ビジョン
|
|
12
|
+
|
|
13
|
+
[VISION]
|
|
14
|
+
|
|
15
|
+
## 非交渉要件(守るべき原則)
|
|
16
|
+
|
|
17
|
+
### 原則1: [PRINCIPLE_1_NAME]
|
|
18
|
+
|
|
19
|
+
- MUST: [PRINCIPLE_1_RULES]
|
|
20
|
+
- 理由: [PRINCIPLE_1_RATIONALE]
|
|
21
|
+
|
|
22
|
+
### 原則2: [PRINCIPLE_2_NAME]
|
|
23
|
+
|
|
24
|
+
- MUST: [PRINCIPLE_2_RULES]
|
|
25
|
+
- 理由: [PRINCIPLE_2_RATIONALE]
|
|
26
|
+
|
|
27
|
+
## スコープ
|
|
28
|
+
|
|
29
|
+
### 対象(In scope)
|
|
30
|
+
|
|
31
|
+
- [IN_SCOPE_1]
|
|
32
|
+
- [IN_SCOPE_2]
|
|
33
|
+
|
|
34
|
+
### 対象外(Out of scope)
|
|
35
|
+
|
|
36
|
+
- [OUT_OF_SCOPE_1]
|
|
37
|
+
- [OUT_OF_SCOPE_2]
|
|
38
|
+
|
|
39
|
+
## 技術スタック(暫定でよい)
|
|
40
|
+
|
|
41
|
+
- 言語/ランタイム: [LANG_RUNTIME]
|
|
42
|
+
- 主要フレームワーク: [FRAMEWORK]
|
|
43
|
+
- データストア: [DATASTORE]
|
|
44
|
+
- インフラ: [INFRA]
|
|
45
|
+
|
|
46
|
+
## ガバナンス
|
|
47
|
+
|
|
48
|
+
- 変更提案: [CHANGE_PROCESS]
|
|
49
|
+
- レビューと批准: [REVIEW_PROCESS]
|
|
50
|
+
- バージョン運用: セマンティックバージョニング(MAJOR/MINOR/PATCH)
|
|
51
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 集約
|
|
2
|
+
|
|
3
|
+
> 重要: 各集約に **対応テーブル**(`docs/05_インフラ設計/schema.dbml` との対応)を必ず書く。
|
|
4
|
+
|
|
5
|
+
## 集約一覧
|
|
6
|
+
|
|
7
|
+
- [AGGREGATE_1]
|
|
8
|
+
- [AGGREGATE_2]
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## [AGGREGATE_1]
|
|
13
|
+
|
|
14
|
+
### 概要
|
|
15
|
+
|
|
16
|
+
[AGGREGATE_1_DESC]
|
|
17
|
+
|
|
18
|
+
### エンティティ/値オブジェクト
|
|
19
|
+
|
|
20
|
+
- エンティティ: [ENTITY_1]
|
|
21
|
+
- 値オブジェクト: [VO_1]
|
|
22
|
+
|
|
23
|
+
### 不変条件
|
|
24
|
+
|
|
25
|
+
- [INVARIANT_1]
|
|
26
|
+
|
|
27
|
+
### 対応テーブル(schema.dbml)
|
|
28
|
+
|
|
29
|
+
| テーブル | 役割 | 備考 |
|
|
30
|
+
|----------|------|------|
|
|
31
|
+
| `table_name_1` | [ROLE_1] | |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## [AGGREGATE_2]
|
|
36
|
+
|
|
37
|
+
### 概要
|
|
38
|
+
|
|
39
|
+
[AGGREGATE_2_DESC]
|
|
40
|
+
|
|
41
|
+
### 対応テーブル(schema.dbml)
|
|
42
|
+
|
|
43
|
+
| テーブル | 役割 | 備考 |
|
|
44
|
+
|----------|------|------|
|
|
45
|
+
| `table_name_2` | [ROLE_2] | |
|
|
46
|
+
|