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.
Files changed (39) hide show
  1. package/README.md +16 -9
  2. package/bin/spec-runner.js +112 -144
  3. package/package.json +1 -6
  4. package/templates/.spec-runner/hooks/pre-commit +25 -11
  5. package/templates/.spec-runner/project.json.example +10 -8
  6. package/templates/.spec-runner/scripts/branch/uc-next-start.sh +100 -9
  7. package/templates/.spec-runner/scripts/check.sh +396 -13
  8. package/templates/.spec-runner/scripts/spec-runner-core.sh +286 -157
  9. package/templates/.spec-runner/scripts/test/require-tests-green.sh +7 -63
  10. package/templates/.spec-runner/steps/steps.json +171 -0
  11. package/templates/.spec-runner/steps//343/201/235/343/201/256/344/273/226/344/275/234/346/245/255.md +25 -13
  12. package/templates/.spec-runner/steps//343/202/277/343/202/271/343/202/257/344/270/200/350/246/247.md +67 -104
  13. 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
  14. package/templates/.spec-runner/steps//343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.md +41 -34
  15. 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
  16. package/templates/.spec-runner/steps//344/273/225/346/247/230/347/255/226/345/256/232.md +161 -207
  17. package/templates/.spec-runner/steps//345/210/206/346/236/220.md +64 -127
  18. package/templates/.spec-runner/steps//345/256/237/350/243/205.md +67 -79
  19. package/templates/.spec-runner/steps//345/256/237/350/243/205/350/250/210/347/224/273.md +56 -56
  20. package/templates/.spec-runner/steps//346/206/262/347/253/240.md +67 -46
  21. package/templates/.spec-runner/steps//346/233/226/346/230/247/343/201/225/350/247/243/346/266/210.md +88 -148
  22. 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
  23. 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
  24. package/templates/.spec-runner/templates/grade-history.json +5 -0
  25. package/templates/.spec-runner/templates/phase-locks.json +29 -0
  26. 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
  27. 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
  28. package/templates/.spec-runner/templates//346/206/262/347/253/240.md +51 -0
  29. package/templates/.spec-runner/templates//351/233/206/347/264/204.md +46 -0
  30. package/templates/.spec-runner/scripts/branch/create-uc-branch.sh +0 -105
  31. package/templates/.spec-runner/scripts/branch/uc-next-id.sh +0 -17
  32. package/templates/.spec-runner/scripts/check/drift.sh +0 -66
  33. package/templates/.spec-runner/scripts/check/health.sh +0 -103
  34. package/templates/.spec-runner/scripts/check/naming.sh +0 -51
  35. package/templates/.spec-runner/scripts/check/schema-drift.sh +0 -74
  36. package/templates/.spec-runner/scripts/check/schema-sync.sh +0 -153
  37. package/templates/.spec-runner/scripts/lib/uc-context.sh +0 -75
  38. package/templates/.spec-runner/scripts/openapi/openapi-generate.sh +0 -207
  39. package/templates/.spec-runner/scripts/setup/init-project.sh +0 -152
@@ -1,74 +1,95 @@
1
- > **Phase 0: CHARTER(憲章策定)**成果物は **`docs/01_憲章/憲章.md`** のみ(spec.md セクション 2 に準拠)。
2
- > **初回またはプロジェクト変更時**: **初期化**(`.spec-runner/scripts/setup/init-project.sh`)で、テストコマンド・命名規則・必須ドキュメントを対話しながら設定できる。設定は **`.spec-runner/project.json` に集約**される。
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
- - **`docs/` や `docs/01_憲章/` が存在しない場合**: このフェーズで **`docs/01_憲章/` を新規作成**し、その中に `憲章.md` を配置する。spec-runner はフェーズごとにフォルダを1つずつ作っていく流れを想定している。
7
- - **他フェーズのフォルダ(`docs/02_ドメイン設計/` 等)が存在する場合でも、憲章策定時はそれらの既存ドキュメントからプロジェクト内容を推測しないこと。**憲章はユーザー入力と対話のみで策定**し、既存ドキュメントに合わせて書き換えない。
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
- **`docs/01_憲章/憲章.md`** のプロジェクト憲章を更新する。このファイルは角括弧のプレースホルダ(例: `[PROJECT_NAME]`, `[PRINCIPLE_1_NAME]`)を含む場合がある。作業内容は (a) 具体的な値を収集・導出する、(b) テンプレートを正確に埋める、(c) 変更を依存成果物に反映させる、の三つである。
34
+ - **他フェーズのフォルダ**(`docs/03_ドメイン設計/` 等)が既にあっても、**その既存ドキュメントからプロジェクト内容を推測しない**。憲章は**ユーザー入力と対話のみ**で策定し、既存ドキュメントに合わせて書き換えない。
35
+
36
+ ## 概要
20
37
 
21
- **注**: `docs/01_憲章/憲章.md` がまだない場合は、spec.md Phase 0 テンプレート(目的・ビジョン、非交渉要件、技術スタック、投資判断、スコープ外、ガバナンス)に沿って新規作成する。
38
+ - 角括弧プレースホルダ(例: `[PROJECT_NAME]`, `[PRINCIPLE_1_NAME]`)を (a) 収集・導出 (b) テンプレを正確に埋める (c) 依存成果物へ反映、の三つで進める。
39
+ - まだ無い場合は spec.md Phase 0 テンプレ(目的・ビジョン、非交渉要件、技術スタック、投資判断、スコープ外、ガバナンス)に沿って新規作成する。
22
40
 
23
- ### 実行フロー
41
+ ## 実行フロー
24
42
 
25
- 1. **既存の憲章を読み込む**: `docs/01_憲章/憲章.md` が**存在する場合のみ**読み、`[ALL_CAPS_IDENTIFIER]` 形式のプレースホルダをすべて特定する。**存在しない場合は**、spec.md の Phase 0 テンプレートに沿って新規作成する(上記「フォルダの作成」に従い `docs/01_憲章/` を作成してから `憲章.md` を書く)。**重要**: ユーザーがテンプレートより少ない/多い原則を求める場合がある。数が指定されていればそれに従い、一般的なテンプレートに沿って文書を更新する。
43
+ 1. **既存憲章の読み込み**
44
+ `docs/01_憲章/憲章.md` が**ある場合のみ**読み、`[ALL_CAPS_IDENTIFIER]` 形式のプレースホルダをすべて特定。**無い場合**は Phase 0 テンプレに沿って新規作成(フォルダ作成ルールに従う)。
45
+ **重要**: ユーザーがテンプレより少ない/多い原則を求める場合がある。数が指定されていればそれに従い、一般的なテンプレに沿って更新する。
26
46
 
27
- 2. **プレースホルダへの値の収集・導出**:
28
- - ユーザー入力(会話)で値が与えられていればそれを使う
29
- - なければ既存リポジトリ(README・docs・過去の憲章)から推測する
30
- - ガバナンスの日付: `RATIFICATION_DATE` は当初の採択日(不明なら質問するか TODO)、`LAST_AMENDED_DATE` は変更があれば今日、なければ前回のまま
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/02_ドメイン設計/` や `docs/03_アーキテクチャ/` が存在するときだけ、それらの文書が更新した憲章の原則と矛盾していないか確認する。存在しないフェーズのフォルダは無視する。
45
- - README.md spec-runner のガイダンスに、変更した原則への参照更新が必要であれば案内する
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. 完成した憲章を **`docs/01_憲章/憲章.md`** に上書きする。**憲章ファイルの先頭に HTML コメントの「同期影響レポート」や `status: reviewed` は付けない**。レビュー状態は `.spec-runner/phase-locks.json` のみで管理する。
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
- - 推奨コミットメッセージ(例: `docs: 憲章を vX.Y.Z に改正(原則追加とガバナンス更新)`)
75
+ - 推奨コミットメッセージ例: `docs: 憲章を vX.Y.Z に改正(原則追加とガバナンス更新)`
59
76
 
60
- ### 書式・スタイル
77
+ ## 成果物・検証
61
78
 
62
- - 見出しはテンプレートと同一(レベルを上げ下げしない)
63
- - 理由は 100 文字以内を目安に折り返すが、不自然な改行は避ける
64
- - セクション間は空行 1
65
- - 行末の空白を避ける
79
+ - [ ] 説明のない角括弧トークンが残っていない
80
+ - [ ] バージョン行が変更内容と一致
81
+ - [ ] 日付は ISO `YYYY-MM-DD`
82
+ - [ ] 原則は宣言的・テスト可能。曖昧な「should」は必要に応じ MUST/SHOULD と理由へ
66
83
 
67
- ユーザーが一部だけ更新(例: 1 原則の修正)を依頼した場合も、検証とバージョン決定は行う。
84
+ ユーザーが一部だけ更新を依頼した場合も、検証とバージョン決定は行う。
85
+ 欠けている重要情報(例: 批准日が本当に不明)は `TODO(<フィールド名>): 説明` を本文に挿入し、サマリでフォローアップを案内。
86
+ **新規テンプレは作らない**。常に **`docs/01_憲章/憲章.md`** を操作する。
68
87
 
69
- 重要な情報が欠けている場合(例: 批准日が本当に不明)は `TODO(<フィールド名>): 説明` を本文に挿入し、ユーザーへのサマリでフォローアップを案内する。
88
+ ## 付録: 書式・スタイル
70
89
 
71
- 新規テンプレートは作らない。常に **`docs/01_憲章/憲章.md`** を操作する。
90
+ - 見出しはテンプレと同一(レベルを上げ下げしない)
91
+ - 理由は 100 文字目安で折り返すが、不自然な改行は避ける
92
+ - セクション間は空行 1 行、行末空白を避ける
72
93
 
73
94
  ---
74
- 完了したら次のステップに進む。
95
+ **次**: 完了後、次のステップへ進む。
@@ -1,159 +1,99 @@
1
+ ---
2
+ step_id: clarify
3
+ phase: 3
4
+ note: UC 仕様の前後で曖昧さを解消
5
+ ---
6
+
7
+ # 曖昧さ解消(品質フロー)
1
8
 
2
- > **曖昧さ解消**(品質フロー)Phase 3(UC 仕様書)の前後で、曖昧な箇所を 1 問ずつ解消して文書に反映します。
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
- 1. リポジトリルートから `.spec-runner/scripts/lib/uc-context.sh --json --paths-only` を**1回**実行する。現在ブランチが feature/UC-NNN-xxx であること。最小限の JSON から以下をパースする:
21
- - `FEATURE_SPEC`(docs/05_ユースケース仕様/<カテゴリ>/UC-NNN-xxx.md)
22
- - `FEATURE_DIR`(カテゴリフォルダ。実装方針・タスクは UC の .md の一番下に記載)
23
- - JSON のパースに失敗したら中止し、「仕様策定」で UC ブランチを作成するか、feature/UC-NNN-xxx にチェックアウトするよう案内する
24
- - 引数にシングルクォートを含む場合はエスケープ(例: 'I'\''m Groot')またはダブルクォートを使う
25
-
26
- 2. 現在の仕様ファイルを読み込む。以下の分類で曖昧さ・カバレッジをスキャンし、各カテゴリに Clear / Partial / Missing を付ける。優先度付け用の内部カバレッジマップを作成する(質問がない場合以外は生のマップは出力しない)。
27
-
28
- **機能スコープと振る舞い**
29
- - コアのユーザー目標と成功基準
30
- - スコープ外の明示
31
- - ユーザーロール・ペルソナの区別
32
-
33
- **ドメインとデータモデル**
34
- - エンティティ・属性・リレーション
35
- - 識別子と一意性ルール
36
- - ライフサイクル/状態遷移
37
- - データ量・スケールの仮定
38
-
39
- **インタラクションと UX フロー**
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
- - マークダウン構造は有効。新規見出しは `## 解消事項`, `### Session YYYY-MM-DD` のみ可
134
- - 用語の一貫性: 更新した全セクションで同じ正規用語を使う
135
-
136
- 7. 更新した仕様を `FEATURE_SPEC` に書き戻す。
137
-
138
- 8. 完了報告(質問ループ終了または早期終了後):
139
- - 質問数と回答数
140
- - 更新した仕様のパス
141
- - 変更したセクション名の一覧
142
- - 各カテゴリのカバレッジ概要表(Resolved / Deferred / Clear / Outstanding)
143
- - Outstanding または Deferred が残っている場合、「実装計画」に進むか、後で再度「曖昧さ解消」を実行するかを推奨する
144
- - 推奨する次のコマンド
145
-
146
- ### 動作ルール
147
-
148
- - 意味のある曖昧さがない(または潜在的な質問の影響が小さい)場合:「正式な解消に値する重要な曖昧さは検出されませんでした」と返し、次に進むよう提案する
149
- - 仕様ファイルがない場合: 先に「仕様策定」を実行するよう案内する(ここでは新規仕様を作成しない)
150
- - 質問は合計 5 問を超えない(同一質問の聞き直しは新規質問に数えない)
151
- - 機能の明確さを妨げない限り、技術スタックの推測質問は避ける
152
- - ユーザーの早期終了(「ストップ」「完了」「進めて」など)を尊重する
153
- - カバレッジが十分で質問が不要な場合は、簡潔なカバレッジ概要(全カテゴリ Clear)を出して次へ進むよう提案する
154
- - 5 問に達した時点で未解決の重要カテゴリが残っている場合は、Deferred に理由付きで明示する
155
-
156
- 優先付けの文脈: $ARGUMENTS
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
+
@@ -1,6 +1,4 @@
1
- # UC-NNN: {ユースケース名}
2
-
3
- status: draft
1
+ # UC-N: {ユースケース名}
4
2
 
5
3
  ## 概要
6
4
 
@@ -0,0 +1,5 @@
1
+ {
2
+ "_comment": "グレード履歴。インストール時に .spec-runner/grade-history.json へコピーされる(既にある場合はスキップ)。",
3
+ "current_grade": "LOOP1",
4
+ "history": []
5
+ }
@@ -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
+