spec-runner 1.0.7 → 1.0.9
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 +24 -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 +65 -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
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"note": "steps/*.md の『宣言(機械可読)』。md は実行テンプレ、こちらはルールと入出力の参照用。",
|
|
4
|
+
"common": {
|
|
5
|
+
"docs": {
|
|
6
|
+
"root": "docs",
|
|
7
|
+
"charter": "docs/01_憲章/憲章.md",
|
|
8
|
+
"uc_root": "docs/02_ユースケース仕様",
|
|
9
|
+
"domain_root": "docs/03_ドメイン設計",
|
|
10
|
+
"architecture_root": "docs/04_アーキテクチャ",
|
|
11
|
+
"infra_root": "docs/05_インフラ設計",
|
|
12
|
+
"api_root": "docs/06_API仕様",
|
|
13
|
+
"openapi": "docs/06_API仕様/openapi.yaml"
|
|
14
|
+
},
|
|
15
|
+
"commands": {
|
|
16
|
+
"check": ".spec-runner/scripts/check.sh",
|
|
17
|
+
"start_next_uc": ".spec-runner/scripts/branch/uc-next-start.sh"
|
|
18
|
+
},
|
|
19
|
+
"naming": {
|
|
20
|
+
"uc_id_regex": "^UC-[0-9]+$",
|
|
21
|
+
"uc_branch_regex": "^(?<prefix>[^/]+)/(?<uc>UC-[0-9]+)-(?<slug>[a-z0-9-]+)$",
|
|
22
|
+
"uc_spec_regex": "^UC-[0-9]+-.+\\.md$",
|
|
23
|
+
"decision_log_dir_name": "判断記録",
|
|
24
|
+
"decision_log_filename_pattern": "UC-N-MMDD-題名.md",
|
|
25
|
+
"decision_log_example": "UC-1-0317-要件解釈.md"
|
|
26
|
+
},
|
|
27
|
+
"clarification_policy": {
|
|
28
|
+
"marker_format": "[要確認: ...]",
|
|
29
|
+
"rule": "不明点は推測で確定せず、仕様/設計書内に [要確認: ...] として残す。",
|
|
30
|
+
"interactive_questions_max": 3,
|
|
31
|
+
"excess_handling": "質問として提示するのは最大3件。残りは『追加の要確認』として文書内に残す。"
|
|
32
|
+
},
|
|
33
|
+
"uc_to_domain_to_arch_flow": {
|
|
34
|
+
"order": ["charter", "uc_spec", "domain", "architecture"],
|
|
35
|
+
"note": "憲章の次は UC→ドメイン→アーキ。UC を入力にドメインを固め、ドメインを入力にアーキを固める。"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"steps": [
|
|
39
|
+
{
|
|
40
|
+
"id": "charter",
|
|
41
|
+
"name_ja": "憲章",
|
|
42
|
+
"phase": 0,
|
|
43
|
+
"md_file": "憲章.md",
|
|
44
|
+
"commands": [
|
|
45
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
46
|
+
],
|
|
47
|
+
"primary_outputs": ["docs/01_憲章/憲章.md"],
|
|
48
|
+
"notes": ["存在しない場合は .spec-runner/templates/憲章.md から生成する"]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "uc_spec",
|
|
52
|
+
"name_ja": "仕様策定",
|
|
53
|
+
"phase": 1,
|
|
54
|
+
"md_file": "仕様策定.md",
|
|
55
|
+
"commands": [
|
|
56
|
+
{ "id": "start_uc_branch", "command": ".spec-runner/scripts/branch/uc-next-start.sh" },
|
|
57
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
58
|
+
],
|
|
59
|
+
"primary_outputs": ["docs/02_ユースケース仕様/<カテゴリ>/UC-<N>-<題名>.md"],
|
|
60
|
+
"secondary_outputs_optional": ["docs/02_ユースケース仕様/<カテゴリ>/判断記録/UC-N-MMDD-題名.md"]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "domain",
|
|
64
|
+
"name_ja": "ドメイン設計",
|
|
65
|
+
"phase": 2,
|
|
66
|
+
"md_file": "ドメイン設計.md",
|
|
67
|
+
"commands": [
|
|
68
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
69
|
+
],
|
|
70
|
+
"primary_outputs": [
|
|
71
|
+
"docs/03_ドメイン設計/ユビキタス言語辞書.md",
|
|
72
|
+
"docs/03_ドメイン設計/ドメインモデル.md",
|
|
73
|
+
"docs/03_ドメイン設計/集約.md"
|
|
74
|
+
],
|
|
75
|
+
"notes": ["存在しない場合は .spec-runner/templates/ から生成する"]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "architecture_plan",
|
|
79
|
+
"name_ja": "実装計画",
|
|
80
|
+
"phase": 3,
|
|
81
|
+
"md_file": "実装計画.md",
|
|
82
|
+
"commands": [
|
|
83
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
84
|
+
],
|
|
85
|
+
"primary_outputs": ["docs/04_アーキテクチャ/*"],
|
|
86
|
+
"secondary_outputs_optional": ["docs/06_API仕様/openapi.yaml"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "infra_plan",
|
|
90
|
+
"name_ja": "インフラ詳細設計(Grade A)",
|
|
91
|
+
"phase": 4,
|
|
92
|
+
"md_file": "実装計画.md",
|
|
93
|
+
"commands": [
|
|
94
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
95
|
+
],
|
|
96
|
+
"primary_outputs": ["docs/05_インフラ設計/schema.dbml"]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "test_design",
|
|
100
|
+
"name_ja": "テスト設計",
|
|
101
|
+
"phase": 5,
|
|
102
|
+
"md_file": "テスト設計.md",
|
|
103
|
+
"commands": [
|
|
104
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
105
|
+
],
|
|
106
|
+
"primary_outputs": ["<test_design.dir>/**/UC-N-*.spec.*"]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "implement",
|
|
110
|
+
"name_ja": "実装",
|
|
111
|
+
"phase": 6,
|
|
112
|
+
"md_file": "実装.md",
|
|
113
|
+
"commands": [
|
|
114
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
115
|
+
],
|
|
116
|
+
"primary_outputs": ["src/**", "<tests green>"],
|
|
117
|
+
"notes": ["完了条件: require-tests-green.sh が exit 0"]
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "clarify",
|
|
121
|
+
"name_ja": "曖昧さ解消",
|
|
122
|
+
"phase": null,
|
|
123
|
+
"md_file": "曖昧さ解消.md",
|
|
124
|
+
"commands": [
|
|
125
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
126
|
+
],
|
|
127
|
+
"primary_outputs": ["docs/02_ユースケース仕様/<カテゴリ>/UC-<N>-<題名>.md (更新)"]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "analyze",
|
|
131
|
+
"name_ja": "分析",
|
|
132
|
+
"phase": null,
|
|
133
|
+
"md_file": "分析.md",
|
|
134
|
+
"commands": [
|
|
135
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
136
|
+
],
|
|
137
|
+
"primary_outputs": ["docs/02_ユースケース仕様/<カテゴリ>/UC-<N>-<題名>.md (更新)"]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"id": "checklist",
|
|
141
|
+
"name_ja": "チェックリスト",
|
|
142
|
+
"phase": 1,
|
|
143
|
+
"md_file": "チェックリスト.md",
|
|
144
|
+
"commands": [
|
|
145
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
146
|
+
],
|
|
147
|
+
"primary_outputs": ["docs/02_ユースケース仕様/<カテゴリ>/checklists/*.md (任意)"]
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "task_list",
|
|
151
|
+
"name_ja": "タスク一覧",
|
|
152
|
+
"phase": 1,
|
|
153
|
+
"md_file": "タスク一覧.md",
|
|
154
|
+
"commands": [
|
|
155
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
156
|
+
],
|
|
157
|
+
"primary_outputs": ["docs/02_ユースケース仕様/<カテゴリ>/UC-<N>-<題名>.md (## タスク / ## タスク一覧 更新)"]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "other_work",
|
|
161
|
+
"name_ja": "その他作業",
|
|
162
|
+
"phase": 1,
|
|
163
|
+
"md_file": "その他作業.md",
|
|
164
|
+
"commands": [
|
|
165
|
+
{ "id": "check", "command": ".spec-runner/scripts/check.sh" }
|
|
166
|
+
],
|
|
167
|
+
"primary_outputs": ["(branch scoped)"]
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
|
package/templates/.spec-runner/steps//343/201/235/343/201/256/344/273/226/344/275/234/346/245/255.md
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
step_id: other_work
|
|
3
|
+
phase: null
|
|
4
|
+
note: UC ブランチではない
|
|
5
|
+
---
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
# その他作業(CI/CD・インフラ・共通設定など)
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
**やること**: UC 以外の作業用ブランチ上で、通常開発フローで進める。spec-runner の UC ステップ(仕様策定〜実装)は**対象外**。
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
| 項目 | 内容 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **ブランチ** | `feature/<接頭辞>/xxx`(接頭辞は `project.json` の **naming.other_work_prefixes**。既定: work, infra, cicd) |
|
|
14
|
+
| **UC フロー** | このステップのまま **仕様策定〜実装は実行しない** |
|
|
15
|
+
| **参照** | 必要なら `.spec-runner/steps/実装計画.md` と docs/03, 04, 06 等 |
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
## ブランチの例
|
|
12
18
|
|
|
13
|
-
|
|
19
|
+
| ブランチ例 | 用途 |
|
|
20
|
+
|------------|------|
|
|
21
|
+
| `feature/cicd/github-actions` | CI/CD |
|
|
22
|
+
| `feature/infra/docker` | インフラ・コンテナ |
|
|
23
|
+
| `feature/work/setup-tooling` | 共通ツール |
|
|
14
24
|
|
|
15
|
-
|
|
16
|
-
- 必要に応じて **実装計画.md**(`.spec-runner/steps/実装計画.md`)を参照し、設計書(docs/03, docs/04, docs/06 等)に沿って作業する。
|
|
17
|
-
- 作業が終わったら main にマージするか、UC 用ブランチ(`feature/UC-NNN-xxx`)に切り替えて spec-runner を再実行する。
|
|
25
|
+
接頭辞は **project.json の naming.other_work_prefixes** に配列で記載。プロジェクトに合わせて追加・変更可。
|
|
18
26
|
|
|
19
27
|
## 注意
|
|
20
28
|
|
|
21
|
-
- phase-locks の `uc_reviewed` や UC
|
|
22
|
-
-
|
|
29
|
+
- phase-locks の `uc_reviewed` や UC 判定には**影響しない**。このブランチ用 lock は不要。
|
|
30
|
+
- 再度「次のステップ」を見たい場合は **UC ブランチに checkout** するか **main に戻る**。
|
|
31
|
+
- 作業完了後は main にマージするか、UC ブランチに切り替えて spec-runner を再実行。
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
**次**: UC 作業に戻る場合は適切なブランチへ。
|
package/templates/.spec-runner/steps//343/202/277/343/202/271/343/202/257/344/270/200/350/246/247.md
CHANGED
|
@@ -1,132 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
```text
|
|
6
|
-
$ARGUMENTS
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
(空でない場合)処理を進める前にユーザー入力を**必ず**考慮すること。
|
|
1
|
+
---
|
|
2
|
+
step_id: tasks
|
|
3
|
+
phase: planning
|
|
4
|
+
---
|
|
10
5
|
|
|
11
|
-
|
|
6
|
+
# タスク一覧(実装タスクの整理)
|
|
12
7
|
|
|
13
|
-
|
|
14
|
-
- プロジェクトルートに `.spec-runner/extensions.yml` が存在するか確認する(任意。なければスキップ)
|
|
15
|
-
- あれば `hooks.before_tasks` のエントリを読む
|
|
16
|
-
- YAML がパースできない・不正な場合はフック確認を静かにスキップして続行
|
|
17
|
-
- `enabled: true` のフックだけを対象にする
|
|
18
|
-
- 各フックの `condition` 式の解釈・評価は行わない(条件が空でなければフックをスキップし、評価は HookExecutor に任せる)
|
|
19
|
-
- 実行可能なフックごとに `optional` に応じて出力する:
|
|
20
|
-
- **任意フック**(`optional: true`): 拡張名・コマンド・説明・プロンプト・実行方法を表示
|
|
21
|
-
- **必須フック**(`optional: false`): 拡張名・実行するコマンドを表示し、結果を待ってから概要に進む
|
|
22
|
-
- 登録フックがなければ、または `.spec-runner/extensions.yml` がなければ静かにスキップする
|
|
8
|
+
**やること**: UC 仕様書の**一番下**に `## タスク` または `## タスク一覧` を追加・更新する。テスト設計は別ステップ。
|
|
23
9
|
|
|
24
|
-
|
|
10
|
+
| 項目 | 内容 |
|
|
11
|
+
|------|------|
|
|
12
|
+
| **検証** | 見出し・形式は **check.sh(健全性確認)** で検証 |
|
|
13
|
+
| **即実行可能性** | 各タスクは LLM が追加文脈なしで完了できる具体性 |
|
|
25
14
|
|
|
26
|
-
|
|
15
|
+
## ユーザー入力
|
|
27
16
|
|
|
28
|
-
|
|
17
|
+
`$ARGUMENTS`(空でなければ必ず考慮)。タスク整理の文脈にも。
|
|
29
18
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- data-model.md があればエンティティを抽出しユーザーストーリーにマッピングする
|
|
34
|
-
- contracts/ があればインターフェース契約をユーザーストーリーにマッピングする
|
|
35
|
-
- research.md があれば決定をセットアップタスクに反映する
|
|
36
|
-
- ユーザーストーリーごとにタスクを整理して生成する(下記タスク生成ルール参照)
|
|
37
|
-
- ユーザーストーリー完了順の依存グラフを作成する
|
|
38
|
-
- ストーリーごとに並列実行例を作成する
|
|
39
|
-
- タスクの完全性を検証する(各ユーザーストーリーに必要なタスクが揃い、独立してテスト可能であること)
|
|
19
|
+
```text
|
|
20
|
+
$ARGUMENTS
|
|
21
|
+
```
|
|
40
22
|
|
|
41
|
-
|
|
42
|
-
- UC の実装方針から正しい機能名
|
|
43
|
-
- Phase 1: セットアップタスク(プロジェクト初期化)
|
|
44
|
-
- Phase 2: 基盤タスク(全ユーザーストーリーの前提)
|
|
45
|
-
- Phase 3 以降: 優先度順でユーザーストーリーごとに 1 フェーズ
|
|
46
|
-
- 各フェーズにストーリー目標・独立したテスト基準・(依頼があれば)テスト・実装タスクを含める
|
|
47
|
-
- 最終フェーズ: 仕上げと横断的関心事
|
|
48
|
-
- 全タスクは下記チェックリスト形式に厳守する
|
|
49
|
-
- 各タスクに明確なファイルパスを付ける
|
|
50
|
-
- ストーリー完了順の依存セクション
|
|
51
|
-
- ストーリーごとの並列実行例
|
|
52
|
-
- 実装戦略セクション(MVP 優先・段階的リリース)
|
|
23
|
+
## 実行前チェック: 拡張フック(タスク生成前)
|
|
53
24
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- 形式検証: 全タスクがチェックリスト形式(チェックボックス・ID・ラベル・ファイルパス)に従っていることを確認する
|
|
25
|
+
- `.spec-runner/extensions.yml` の有無(無ければスキップ)
|
|
26
|
+
- `hooks.before_tasks`、YAML 不正は静かにスキップ
|
|
27
|
+
- `enabled: true` のみ。`condition` の評価はせず(HookExecutor に任せる)
|
|
28
|
+
- **optional: true** → 拡張名・コマンド・説明・プロンプト・実行方法を表示
|
|
29
|
+
- **optional: false** → コマンド実行し結果を待ってから続行
|
|
30
|
+
- フック無しはスキップ
|
|
61
31
|
|
|
62
|
-
|
|
32
|
+
## 実行フロー
|
|
63
33
|
|
|
64
|
-
|
|
34
|
+
1. **セットアップ**
|
|
35
|
+
`次のステップ --json`。`FEATURE_SPEC`・`FEATURE_DIR`。
|
|
65
36
|
|
|
66
|
-
|
|
37
|
+
2. **読込**
|
|
38
|
+
FEATURE_SPEC **必須**。`## 実装方針` から技術・構造。無ければ仕様と既存ファイルから推測。
|
|
67
39
|
|
|
68
|
-
|
|
40
|
+
3. **ワークフロー**
|
|
41
|
+
- 実装方針からスタック・構造(無ければ推測)
|
|
42
|
+
- spec.md から優先度付きユーザーストーリー
|
|
43
|
+
- data-model / contracts / research があれば反映
|
|
44
|
+
- ストーリーごとにタスク生成(**付録: 生成ルール**)
|
|
45
|
+
- 依存グラフ、並列例、完全性検証
|
|
69
46
|
|
|
70
|
-
|
|
47
|
+
4. **UC への書き込み**
|
|
48
|
+
FEATURE_SPEC **一番下**に `## タスク` または `## タスク一覧`。既存なら更新。
|
|
49
|
+
Phase 1 セットアップ → Phase 2 基盤 → Phase 3+ ストーリー順 → 最終フェーズ仕上げ。
|
|
50
|
+
チェックリスト形式厳守、ファイルパス付き、依存・並列例・実装戦略(MVP 等)。
|
|
71
51
|
|
|
72
|
-
|
|
52
|
+
5. **報告**
|
|
53
|
+
パス、タスク総数、ストーリー別件数、並列機会、テスト基準、推奨 MVP、形式検証結果。
|
|
73
54
|
|
|
74
|
-
|
|
55
|
+
6. **タスク追記後**
|
|
56
|
+
`hooks.after_tasks` があれば同様に表示/実行。
|
|
75
57
|
|
|
76
|
-
|
|
58
|
+
## 付録: チェックリスト形式(必須)
|
|
77
59
|
|
|
78
60
|
```text
|
|
79
61
|
- [ ] [TaskID] [P?] [Story?] 説明(ファイルパス付き)
|
|
80
62
|
```
|
|
81
63
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
**例**:
|
|
91
|
-
|
|
92
|
-
- ✅ 正: `- [ ] T001 実装計画に従いプロジェクト構造を作成する`
|
|
93
|
-
- ✅ 正: `- [ ] T005 [P] src/middleware/auth.py に認証ミドルウェアを実装する`
|
|
94
|
-
- ✅ 正: `- [ ] T012 [P] [US1] src/models/user.py に User モデルを作成する`
|
|
95
|
-
- ✅ 正: `- [ ] T014 [US1] src/services/user_service.py に UserService を実装する`
|
|
96
|
-
- ❌ 誤: `- [ ] User モデルを作成する`(ID とストーリーラベルがない)
|
|
97
|
-
- ❌ 誤: `T001 [US1] モデルを作成する`(チェックボックスがない)
|
|
98
|
-
- ❌ 誤: `- [ ] [US1] User モデルを作成する`(タスク ID がない)
|
|
99
|
-
- ❌ 誤: `- [ ] T001 [US1] モデルを作成する`(ファイルパスがない)
|
|
100
|
-
|
|
101
|
-
### タスクの整理
|
|
102
|
-
|
|
103
|
-
1. **ユーザーストーリー(spec.md)を主軸とする**:
|
|
104
|
-
- 各ユーザーストーリー(P1, P2, P3 ...)に 1 フェーズ
|
|
105
|
-
- ストーリーに関連するコンポーネントをすべてマッピング: モデル・サービス・インターフェース/UI・(依頼があれば)テスト
|
|
106
|
-
- ストーリー間の依存を記載する(多くのストーリーは独立)
|
|
64
|
+
| 要素 | ルール |
|
|
65
|
+
|------|--------|
|
|
66
|
+
| チェックボックス | 常に `- [ ]` |
|
|
67
|
+
| TaskID | T001, T002, … |
|
|
68
|
+
| [P] | 並列可のみ(別ファイル・未完了に非依存) |
|
|
69
|
+
| [Story] | ストーリーフェーズは [US1] 等。セットアップ・基盤・仕上げには付けない |
|
|
70
|
+
| 説明 | 明確なアクション + **正確なファイルパス** |
|
|
107
71
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
72
|
+
| 例 | 行 |
|
|
73
|
+
|----|-----|
|
|
74
|
+
| ✅ | `- [ ] T001 実装計画に従いプロジェクト構造を作成する` |
|
|
75
|
+
| ✅ | `- [ ] T005 [P] src/middleware/auth.py に認証ミドルウェアを実装する` |
|
|
76
|
+
| ✅ | `- [ ] T012 [P] [US1] src/models/user.py に User モデルを作成する` |
|
|
77
|
+
| ✅ | `- [ ] T014 [US1] src/services/user_service.py に UserService を実装する` |
|
|
78
|
+
| ❌ | User モデルを作成する(ID・ストーリーラベルなし) |
|
|
79
|
+
| ❌ | `T001 [US1] モデルを作成する`(チェックボックスなし) |
|
|
80
|
+
| ❌ | `- [ ] [US1] User モデルを作成する`(タスク ID なし) |
|
|
81
|
+
| ❌ | `- [ ] T001 [US1] モデルを作成する`(ファイルパスなし) |
|
|
111
82
|
|
|
112
|
-
|
|
113
|
-
- 各エンティティを、それを必要とするユーザーストーリーに対応づける
|
|
114
|
-
- 複数ストーリーで使うエンティティは、最初のストーリーまたはセットアップフェーズに含める
|
|
115
|
-
- リレーションは適切なストーリーフェーズのサービス層タスクで扱う
|
|
83
|
+
## 付録: タスク生成ルール
|
|
116
84
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
85
|
+
- **主軸**: spec.md のユーザーストーリー。ストーリーごと 1 フェーズ、コンポーネントをマッピング
|
|
86
|
+
- **契約**: 提供ストーリーに対応。TDD 依頼時は契約テスト [P] を実装前に
|
|
87
|
+
- **データモデル**: エンティティを必要ストーリーへ。共有は最初のストーリーまたはセットアップ
|
|
88
|
+
- **インフラ**: 共通 → Phase 1、基盤 → Phase 2、ストーリー固有 → そのストーリー内
|
|
121
89
|
|
|
122
|
-
|
|
90
|
+
**フェーズ**: Phase 1 セットアップ → Phase 2 基盤(全ストーリー前提)→ Phase 3+ P1,P2,…(テスト→モデル→サービス→EP→統合)→ 最終 仕上げ・横断
|
|
123
91
|
|
|
124
|
-
|
|
125
|
-
- **Phase 2**: 基盤(全ユーザーストーリーの前提。ユーザーストーリーより前に完了必須)
|
|
126
|
-
- **Phase 3 以降**: 優先度順のユーザーストーリー(P1, P2, P3 ...)
|
|
127
|
-
- 各ストーリー内: (依頼があれば)テスト → モデル → サービス → エンドポイント → 統合
|
|
128
|
-
- 各フェーズは独立してテスト可能な増分として完了させる
|
|
129
|
-
- **最終フェーズ**: 仕上げと横断的関心事
|
|
92
|
+
**テストタスク**: 機能仕様またはユーザーが TDD を依頼した場合のみ。
|
|
130
93
|
|
|
131
94
|
---
|
|
132
|
-
|
|
95
|
+
**次**: 完了後、次のステップへ進む。
|
|
@@ -1,106 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
- **実装方針・タスクは UC 仕様書(UC-NNN-xxx.md)の一番下に書く。** `## 実装方針` と `## タスク`(または `## タスク一覧`)の見出しで記載する。1 UC = 1 本の .md。
|
|
6
|
-
- **守られているか**は、健全性確認(`.spec-runner/scripts/check.sh` または `check/health.sh`)で検証する。見出しが無い場合は指摘され、完了とみなされない。
|
|
1
|
+
---
|
|
2
|
+
step_id: checklist
|
|
3
|
+
phase: quality
|
|
4
|
+
---
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
# チェックリスト(品質フロー)
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
**やること**: **要件品質**(完全性・明確性・測定可能性)のチェックリストを生成する。**実装や UI の動作確認ではない**。
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
- ❌ コード/実装が仕様と一致しているかのチェックではない
|
|
10
|
+
| 項目 | 内容 |
|
|
11
|
+
|------|------|
|
|
12
|
+
| **配置** | `## 実装方針` と `## タスク`(または `## タスク一覧`)は **UC-N-xxx.md の一番下**。健全性は `check.sh` で検証 |
|
|
13
|
+
| **比喩** | 仕様が「コード」ならチェックリストはその**ユニットテスト**(要件がよく書かれているか) |
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
- ✅ 「全カードタイプで視覚的階層の要件が定義されているか」(完全性)
|
|
20
|
-
- ✅ 「目立つ表示」が具体的なサイズ/位置で定量化されているか(明確さ)
|
|
21
|
-
- ✅ 「ホバー状態の要件が全インタラクティブ要素で一貫しているか」(一貫性)
|
|
22
|
-
- ✅ 「キーボード操作の要件が定義されているか」(カバレッジ)
|
|
23
|
-
- ✅ 「ロゴ画像の読み込み失敗時の挙動が仕様で定義されているか」(エッジケース)
|
|
15
|
+
## 確定事項
|
|
24
16
|
|
|
25
|
-
|
|
17
|
+
| ✅ チェックリストである | ❌ チェックリストでない |
|
|
18
|
+
|-------------------------|-------------------------|
|
|
19
|
+
| 要件の完全性・明確さ・一貫性・カバレッジを問う | ボタンクリック・API 200・エラー処理の動作確認 |
|
|
20
|
+
| 仕様で「何が定義されているか」を問う | コードが仕様と一致するか |
|
|
26
21
|
|
|
27
22
|
## ユーザー入力
|
|
28
23
|
|
|
24
|
+
`$ARGUMENTS`(空でなければ必ず考慮)
|
|
25
|
+
|
|
29
26
|
```text
|
|
30
27
|
$ARGUMENTS
|
|
31
28
|
```
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## 実行手順
|
|
36
|
-
|
|
37
|
-
1. **セットアップ**: リポジトリルートから `.spec-runner/scripts/lib/uc-context.sh --json --paths-only` を実行する。現在ブランチは feature/UC-NNN-xxx。JSON から FEATURE_SPEC(UC 仕様書)と FEATURE_DIR(カテゴリフォルダ。docs/05_ユースケース仕様/<カテゴリ>/)をパースする。パスは絶対パス。引数にシングルクォートを含む場合はエスケープ(例: 'I'\''m Groot')またはダブルクォートを使う。
|
|
38
|
-
|
|
39
|
-
2. **意図の明確化(動的)**: 事前のカタログではなく、ユーザーの表現と spec/plan/tasks から抽出したシグナルに基づき、最大 3 つの文脈的な確認質問を生成する。次の条件を満たすこと:
|
|
40
|
-
- 回答がチェックリストの内容を実質的に変える情報だけを聞く
|
|
41
|
-
- `$ARGUMENTS` で既に明確な質問は個別にスキップする
|
|
42
|
-
- 広さより精度を優先する
|
|
43
|
-
- 質問は Q1/Q2/Q3 で表示。回答後、代替/例外/復旧/非機能など 2 クラス以上が未明確なら、最大 2 問のフォローアップ(Q4/Q5)を 1 行の理由付きで出してよい。合計 5 問を超えない。ユーザーがこれ以上不要と言ったら増やさない。
|
|
44
|
-
|
|
45
|
-
3. **ユーザー要求の把握**: `$ARGUMENTS` と確認回答を合わせ、チェックリストのテーマ(例: セキュリティ・レビュー・デプロイ・UX)・必須項目・カテゴリの骨子を決める。spec/plan/tasks から不足文脈を推測する(捏造しない)。
|
|
46
|
-
|
|
47
|
-
4. **機能文脈の読み込み**: FEATURE_SPEC(UC 仕様書)を必須で読む。実装方針・タスクは **UC の .md の一番下**(## 実装方針、## タスク)に書かれている。**checklists は任意**。UC のみで進める場合はチェックリストを生成しない選択も可。
|
|
48
|
-
|
|
49
|
-
5. **チェックリストの生成(任意)— 「要件のユニットテスト」を作る**:
|
|
50
|
-
- チェックリストを用意する場合のみ: `FEATURE_DIR/checklists/` がなければ作成する
|
|
51
|
-
- ドメインに基づく短い説明的なファイル名(例: `ux.md`, `api.md`, `security.md`)で一意のファイルを生成する
|
|
52
|
-
- ファイルが存在しなければ新規作成し CHK001 から番号を振る。存在すれば既存内容を残し、最後の CHK ID の続きから追記する(例: 最後が CHK015 なら CHK016 から)。既存のチェックリスト内容は削除・上書きせず、常に追記する
|
|
53
|
-
|
|
54
|
-
**原則 — 実装ではなく要件をテストする**
|
|
55
|
-
各項目は**要件そのもの**について次を評価する:
|
|
56
|
-
- **完全性**: 必要な要件がすべてあるか
|
|
57
|
-
- **明確さ**: 要件が曖昧でなく具体的か
|
|
58
|
-
- **一貫性**: 要件同士が矛盾していないか
|
|
59
|
-
- **測定可能性**: 客観的に検証できるか
|
|
60
|
-
- **カバレッジ**: シナリオ/エッジケースが網羅されているか
|
|
61
|
-
|
|
62
|
-
**カテゴリ**: 要件品質の観点でグループ化する(要件の完全性・明確さ・一貫性・受入基準の品質・シナリオカバレッジ・エッジケース・非機能要件・依存と仮定・曖昧さと矛盾)。
|
|
63
|
-
|
|
64
|
-
**項目の書き方**:
|
|
65
|
-
- ❌ 誤: 「ランディングに 3 枚のカードが表示されることを確認する」「ホバーがデスクトップで動くことをテストする」→ 実装のテストになっている
|
|
66
|
-
- ✅ 正: 「 featured の枚数とレイアウトが仕様で明示されているか」「目立つ表示が具体的なサイズ/位置で定量化されているか」「ホバー状態の要件が全インタラクティブ要素で一貫しているか」
|
|
67
|
-
|
|
68
|
-
**項目構造**: 質問形式で要件品質を聞く。仕様/計画に**書かれている(いない)**ことに焦点。品質次元を [完全性/明確さ/一貫性/等] の括弧で付ける。既存要件の確認時は `[Spec §X.Y]`、不足の確認時は `[Gap]` を使う。
|
|
69
|
-
|
|
70
|
-
**禁止**: 「Verify」「Test」「Confirm」「Check」+ 実装の挙動で始める項目、コード実行・ユーザー操作・システム挙動への言及、「正しく表示される」「正しく動作する」、テストケース/テスト計画/QA 手順、実装詳細(フレームワーク・API・アルゴリズム)は**禁止**。
|
|
30
|
+
## 実行フロー
|
|
71
31
|
|
|
72
|
-
|
|
32
|
+
1. **セットアップ**
|
|
33
|
+
`次のステップ --json`。`FEATURE_SPEC`・`FEATURE_DIR`(`docs/02_.../<カテゴリ>/`)。
|
|
73
34
|
|
|
74
|
-
|
|
35
|
+
2. **動的な意図確認(最大 3 問 + フォローアップ最大 2)**
|
|
36
|
+
spec/plan/tasks からシグナル抽出。`$ARGUMENTS` で明確ならスキップ。Q1–Q3。2 クラス以上未明確なら Q4–Q5(合計 5 問上限)。ユーザーが不要なら増やさない。
|
|
75
37
|
|
|
76
|
-
|
|
38
|
+
3. **テーマ決定**
|
|
39
|
+
`$ARGUMENTS` と回答でテーマ(セキュリティ・UX 等)・必須項目・カテゴリ骨子。捏造しない。
|
|
77
40
|
|
|
78
|
-
|
|
41
|
+
4. **読込**
|
|
42
|
+
FEATURE_SPEC **必須**。実装方針・タスクは UC .md 一番下。**checklists は任意**。UC のみなら生成スキップ可。
|
|
79
43
|
|
|
80
|
-
|
|
44
|
+
5. **生成(任意)**
|
|
45
|
+
- `FEATURE_DIR/checklists/` を必要なら作成。短いファイル名(`ux.md`, `api.md`, `security.md`)
|
|
46
|
+
- 新規なら CHK001 から。既存は最後の ID の続きから**追記のみ**(削除・上書きしない)
|
|
81
47
|
|
|
82
|
-
|
|
48
|
+
**各項目の観点**: 完全性・明確さ・一貫性・測定可能性・カバレッジ
|
|
49
|
+
**カテゴリ例**: 完全性、明確さ、一貫性、受入品質、シナリオ、エッジ、非機能、依存・仮定、曖昧さ・矛盾
|
|
83
50
|
|
|
84
|
-
|
|
51
|
+
**書き方**: 質問形式。**禁止** — Verify/Test/Confirm + **実装挙動**、コード実行、正しく表示/動作、QA 手順、実装詳細。
|
|
52
|
+
**推奨** — 「[要件] が [シナリオ] で定義されているか」「[曖昧語] が基準で明確化されているか」等。
|
|
53
|
+
**トレーサビリティ**: 80% 以上に `[Spec §X.Y]` または `[Gap]` / `[曖昧さ]` / `[矛盾]` / `[仮定]`。
|
|
54
|
+
40 件超はリスクで優先・重複統合。
|
|
85
55
|
|
|
86
|
-
|
|
56
|
+
6. **構造**
|
|
57
|
+
H1・メタ・`##` カテゴリ内 `- [ ] CHK### …`(慣例がなければこの形)。
|
|
87
58
|
|
|
88
|
-
|
|
59
|
+
7. **報告**
|
|
60
|
+
パス・項目数・新規/追記・フォーカス要約。
|
|
89
61
|
|
|
90
|
-
|
|
62
|
+
**運用**: 実行ごとにタイプ別ファイルで追記。不要ファイルは人手で整理。
|
|
91
63
|
|
|
92
|
-
##
|
|
64
|
+
## 付録: タイプ例
|
|
93
65
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
66
|
+
| ファイル | 焦点 |
|
|
67
|
+
|----------|------|
|
|
68
|
+
| ux.md | 視覚階層、配置、インタラクション状態、a11y、画像失敗時フォールバック |
|
|
69
|
+
| api.md | エラー形式、レート制限、認証一貫、リトライ/タイムアウト |
|
|
70
|
+
| performance.md / security.md | 定量指標、クリティカルジャーニー、脅威・コンプライアンスが**仕様で定義されているか** |
|
|
97
71
|
|
|
98
|
-
|
|
99
|
-
- 「featured の枚数とレイアウトが明示されているか [完全性, Spec §FR-001]」
|
|
100
|
-
- 「ホバー状態の要件が全インタラクティブ要素で一貫して定義されているか [一貫性, Spec §FR-003]」
|
|
101
|
-
- 「視覚的階層の要件が客観的に測定できるか [測定可能性, Spec §FR-001]」
|
|
72
|
+
## 付録: アンチ例
|
|
102
73
|
|
|
103
|
-
|
|
74
|
+
| ❌ 実装テスト | ✅ 要件品質 |
|
|
75
|
+
|---------------|-------------|
|
|
76
|
+
| 3 枚のカードが表示されることを確認 | featured の枚数・レイアウトが仕様で明示されているか [完全性, Spec §…] |
|
|
77
|
+
| ホバーが動くことをテスト | ホバー要件が全インタラクティブ要素で一貫しているか [一貫性] |
|
|
104
78
|
|
|
105
79
|
---
|
|
106
|
-
|
|
80
|
+
**次**: 完了後、次のステップへ進む。
|