cursor-sdd 1.0.14 → 1.0.16

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 (37) hide show
  1. package/bin/setup.ts +13 -159
  2. package/{new → now}/commands/check-design.md +17 -17
  3. package/{new → now}/commands/design.md +4 -1
  4. package/{new → now}/commands/difference-check.md +18 -18
  5. package/{new → now}/commands/init.md +15 -10
  6. package/now/commands/requirements-import.md +98 -0
  7. package/{new → now}/commands/requirements.md +26 -15
  8. package/{new → now}/commands/status.md +5 -8
  9. package/{new → now}/commands/tasks.md +4 -0
  10. package/now/rules/artifacts-generation.md +63 -0
  11. package/now/templates/artifacts/artifacts_rules.md +51 -0
  12. package/now/templates/artifacts/create-data-model.md +86 -0
  13. package/now/templates/artifacts/create-feature-list.md +45 -0
  14. package/now/templates/artifacts/create-table-definition.md +80 -0
  15. package/{new → now}/templates/specs/design.md +12 -0
  16. package/now/templates/specs/requirements-init.md +15 -0
  17. package/{new → now}/templates/specs/requirements.md +18 -0
  18. package/{new → now}/templates/specs/research.md +8 -0
  19. package/now/templates/specs/tasks.md +31 -0
  20. package/package.json +3 -6
  21. package/assign/README.md +0 -16
  22. package/assign/commands/README.md +0 -4
  23. package/assign/rules/README.md +0 -3
  24. package/assign/templates/README.md +0 -3
  25. package/new/templates/specs/requirements-init.md +0 -8
  26. package/new/templates/specs/tasks.md +0 -21
  27. /package/{new → now}/commands/impl.md +0 -0
  28. /package/{new → now}/rules/design-discovery-full.md +0 -0
  29. /package/{new → now}/rules/design-discovery-light.md +0 -0
  30. /package/{new → now}/rules/design-principles.md +0 -0
  31. /package/{new → now}/rules/design-review.md +0 -0
  32. /package/{new → now}/rules/ears-format.md +0 -0
  33. /package/{new → now}/rules/frontend.md +0 -0
  34. /package/{new → now}/rules/gap-analysis.md +0 -0
  35. /package/{new → now}/rules/tasks-generation.md +0 -0
  36. /package/{new → now}/rules/tasks-parallel-analysis.md +0 -0
  37. /package/{new → now}/templates/specs/init.json +0 -0
package/bin/setup.ts CHANGED
@@ -1,37 +1,26 @@
1
- #!/usr/bin/env tsx
1
+ #!/usr/bin/env node
2
2
  // @ts-nocheck
3
3
 
4
4
  const fs = require('fs');
5
5
  const path = require('path');
6
- const readline = require('readline');
7
6
 
8
- const isAuto = process.argv.includes('--auto');
9
7
  const isForce = process.argv.includes('--force');
10
- const isHelp = process.argv.includes('--help') || process.argv.includes('-h');
11
8
 
12
9
  // パッケージのルートディレクトリを取得
13
10
  const packageRoot = path.resolve(__dirname, '..');
14
- const SOURCE_BY_MODE = {
15
- new: path.join(packageRoot, 'new'),
16
- assign: path.join(packageRoot, 'assign'),
17
- };
11
+ const sourceDir = path.join(packageRoot, 'new');
12
+ const FOLDERS = ['commands', 'rules', 'templates'];
18
13
 
19
- // プロジェクトのルートを取得(node_modules の2つ上)
14
+ // プロジェクトのルートを取得
20
15
  function getProjectRoot() {
21
- let current = process.cwd();
22
-
23
- // npm install 経由の場合は INIT_CWD を使用
24
16
  if (process.env.INIT_CWD) {
25
17
  return process.env.INIT_CWD;
26
18
  }
27
-
28
- // node_modules から呼ばれた場合
29
19
  const nodeModulesIndex = __dirname.indexOf('node_modules');
30
20
  if (nodeModulesIndex !== -1) {
31
21
  return __dirname.substring(0, nodeModulesIndex);
32
22
  }
33
-
34
- return current;
23
+ return process.cwd();
35
24
  }
36
25
 
37
26
  const projectRoot = getProjectRoot();
@@ -46,12 +35,10 @@ function copyRecursive(src, dest) {
46
35
  if (!fs.existsSync(dest)) {
47
36
  fs.mkdirSync(dest, { recursive: true });
48
37
  }
49
-
50
38
  for (const item of fs.readdirSync(src)) {
51
39
  copyRecursive(path.join(src, item), path.join(dest, item));
52
40
  }
53
41
  } else {
54
- // ファイルが既に存在する場合はスキップ(--force でない限り)
55
42
  if (fs.existsSync(dest) && !isForce) {
56
43
  console.log(` ⏭️ Skip (exists): ${path.relative(projectRoot, dest)}`);
57
44
  return;
@@ -61,138 +48,18 @@ function copyRecursive(src, dest) {
61
48
  }
62
49
  }
63
50
 
64
- function cleanTargetDir() {
65
- if (fs.existsSync(targetDir)) {
66
- fs.rmSync(targetDir, { recursive: true, force: true });
67
- }
68
- fs.mkdirSync(targetDir, { recursive: true });
69
- }
70
-
71
- function getArgValue(flag) {
72
- const idx = process.argv.indexOf(flag);
73
- if (idx === -1) return null;
74
- const next = process.argv[idx + 1];
75
- if (!next || next.startsWith('-')) return null;
76
- return next;
77
- }
78
-
79
- function normalizeMode(value) {
80
- if (!value) return null;
81
- const lower = value.toLowerCase();
82
- if (lower === 'assign' || lower === 'a') return 'assign';
83
- if (lower === 'new' || lower === 'n') return 'new';
84
- return null;
85
- }
86
-
87
- function printHelp() {
88
- console.log(`
89
- cursor-sdd - Cursor SDD セットアップ
90
-
91
- 使い方:
92
- npx cursor-sdd@latest [--mode new|assign] [--force]
93
-
94
- オプション:
95
- --mode <new|assign> コピーするテンプレートのモード(省略時: 対話可能なら選択 / 非対話は new)
96
- --force 既存の .cursor/ があっても上書き
97
- --auto 対話を無効化(npm install の postinstall など向け)
98
- -h, --help ヘルプ表示
99
-
100
- 例:
101
- npx cursor-sdd@latest --mode new
102
- npx cursor-sdd@latest --mode assign
103
- npx cursor-sdd@latest --mode assign --force
104
- `.trim());
105
- }
106
-
107
- function hasTTY() {
108
- if (process.stdout.isTTY && process.stdin.isTTY) return true;
109
- // npm install 時に stdin がパイプ扱いになる場合のため /dev/tty を確認
110
- try {
111
- fs.accessSync('/dev/tty', fs.constants.R_OK | fs.constants.W_OK);
112
- return true;
113
- } catch {
114
- return false;
115
- }
116
- }
117
-
118
- function createTTYInterface() {
119
- // stdin が非TTYでも /dev/tty を使って対話できるようにする
120
- const input = process.stdin.isTTY
121
- ? process.stdin
122
- : (() => {
123
- try {
124
- return fs.createReadStream('/dev/tty');
125
- } catch {
126
- return process.stdin;
127
- }
128
- })();
129
- const output = process.stdout; // 出力は常に標準出力に寄せる
130
- return readline.createInterface({ input, output });
131
- }
132
-
133
- function shouldPromptForMode(explicitMode) {
134
- // --auto 時はプロンプトを出さず default(new) に寄せる
135
- return !explicitMode && !isAuto && hasTTY() && !process.env.CI;
136
- }
137
-
138
- async function askMode() {
139
- const rl = createTTYInterface();
140
- const answer = await new Promise((resolve) => {
141
- rl.question('新規PJを立ち上げますか?既存PJにアサインしますか? [n]ew/[a]ssign (default: new): ', resolve);
142
- });
143
- rl.close();
144
- return normalizeMode(answer) || 'new';
145
- }
146
-
147
- function resolveMode() {
148
- const rawModeArg = getArgValue('--mode');
149
- const rawMode = rawModeArg || process.env.CURSOR_SDD_MODE;
150
- const explicitMode = normalizeMode(rawMode);
151
-
152
- // --mode が指定されているのに値が不正な場合は落とす(黙って default/new にならないように)
153
- if (rawModeArg && !explicitMode) {
154
- console.error(`\n❌ Invalid --mode value: ${rawModeArg}`);
155
- console.error(' Use --mode new or --mode assign\n');
156
- process.exit(1);
157
- }
158
- if (explicitMode) return Promise.resolve(explicitMode);
159
- if (shouldPromptForMode(explicitMode)) {
160
- return askMode();
161
- }
162
- return Promise.resolve('new');
163
- }
164
-
165
- function getFolders(sourceRoot) {
166
- if (!fs.existsSync(sourceRoot)) return [];
167
- return fs
168
- .readdirSync(sourceRoot)
169
- .filter((item) => fs.statSync(path.join(sourceRoot, item)).isDirectory());
170
- }
171
-
172
- function setup({ mode, sourceRoot, folders }) {
51
+ function setup() {
173
52
  console.log('\n🚀 Setting up Cursor SDD...\n');
174
- console.log(`📁 Target: ${targetDir}`);
175
- console.log(`🎚️ Mode: ${mode}\n`);
53
+ console.log(`📁 Target: ${targetDir}\n`);
176
54
 
177
- // 既存 .cursor がある場合はデフォルトで破壊しない(--force で上書き)
178
- if (fs.existsSync(targetDir) && !isForce) {
179
- console.log(`\n⚠️ ${path.relative(projectRoot, targetDir)} already exists. Skip setup.`);
180
- console.log(' 上書きする場合は --force を付けて実行してください。\n');
181
- return;
55
+ if (!fs.existsSync(targetDir)) {
56
+ fs.mkdirSync(targetDir, { recursive: true });
182
57
  }
183
58
 
184
- // ここからは安全にクリーンセットアップ
185
- cleanTargetDir();
186
-
187
- if (!folders.length) {
188
- console.log(`ℹ️ No folders to copy for mode: ${mode}.`);
189
- return;
190
- }
191
-
192
- // 各フォルダをコピー
193
- for (const folder of folders) {
194
- const src = path.join(sourceRoot, folder);
59
+ for (const folder of FOLDERS) {
60
+ const src = path.join(sourceDir, folder);
195
61
  const dest = path.join(targetDir, folder);
62
+ if (!fs.existsSync(src)) continue;
196
63
 
197
64
  console.log(`📂 ${folder}/`);
198
65
  copyRecursive(src, dest);
@@ -208,18 +75,5 @@ function setup({ mode, sourceRoot, folders }) {
208
75
  console.log(' /status - Check status\n');
209
76
  }
210
77
 
211
- (async () => {
212
- if (isHelp) {
213
- printHelp();
214
- return;
215
- }
216
- const mode = await resolveMode();
217
- const sourceRoot = SOURCE_BY_MODE[mode] || SOURCE_BY_MODE.new || packageRoot;
218
- const folders = getFolders(sourceRoot);
219
-
220
- setup({ mode, sourceRoot, folders });
221
- })().catch((err) => {
222
- console.error(err);
223
- process.exit(1);
224
- });
78
+ setup();
225
79
 
@@ -20,23 +20,23 @@ argument-hint: <feature-name:$1>
20
20
 
21
21
  ## 実行ステップ
22
22
 
23
- 1. **コンテキストの読み込み**:
24
- - `.cursor/$1/spec.json` から言語とメタデータを読み込み
25
- - `.cursor/$1/requirements.md` から要件を読み込み
26
- - `.cursor/$1/design.md` から設計ドキュメントを読み込み
27
-
28
- 2. **レビューガイドラインの読み込み**:
29
- - `.cursor/rules/design-review.md` からレビュー基準とプロセスを読み込み
30
-
31
- 3. **設計レビューの実行**:
32
- - design-review.md のプロセスに従う: 分析 → 重大な問題 → 強み → GO/NO-GO
33
- - 最も重要な懸念事項を最大3つに限定
34
- - ユーザーとインタラクティブにやり取り
35
- - spec.json で指定された言語で出力
36
-
37
- 4. **判定と次のステップの提供**:
38
- - 根拠を伴う明確な GO/NO-GO 判定
39
- - 判定に基づいた進め方のガイド
23
+ ### ステップ1: コンテキストの読み込み
24
+ - `.cursor/$1/spec.json` から言語とメタデータを読み込み
25
+ - `.cursor/$1/requirements.md` から要件を読み込み
26
+ - `.cursor/$1/design.md` から設計ドキュメントを読み込み
27
+
28
+ ### ステップ2: レビューガイドラインの読み込み
29
+ - `.cursor/rules/design-review.md` からレビュー基準とプロセスを読み込み
30
+
31
+ ### ステップ3: 設計レビューの実行
32
+ - design-review.md のプロセスに従う: 分析 → 重大な問題 → 強み → GO/NO-GO
33
+ - 最も重要な懸念事項を最大3つに限定
34
+ - ユーザーとインタラクティブにやり取り
35
+ - spec.json で指定された言語で出力
36
+
37
+ ### ステップ4: 判定と次のステップの提供
38
+ - 根拠を伴う明確な GO/NO-GO 判定
39
+ - 判定に基づいた進め方のガイド
40
40
 
41
41
  ## 重要な制約
42
42
  - **品質保証であり完璧追求ではない**: 許容可能なリスクを受け入れる
@@ -28,6 +28,9 @@ argument-hint: <feature-name:$1> [-y:$2]
28
28
  - `.cursor/rules/design-principles.md` から設計原則
29
29
  - `.cursor/templates/specs/research.md` から発見ログ構造
30
30
  - **`package.json`(プロジェクトルートに存在する場合)**: 既存の依存関係とバージョンを把握
31
+ - `.cursor/rules/artifacts-generation.md`(成果物の安全な初期作成ルール)を読み込み
32
+ - `.cursor/$1/artifacts/data-model.md` / `.cursor/$1/artifacts/table-definition.md` が無ければ、テンプレから **init 作成(上書き禁止)**
33
+ - テンプレ: `.cursor/templates/artifacts/create-data-model.md` / `.cursor/templates/artifacts/create-table-definition.md`
31
34
  - `.cursor/rules/frontend.md`(存在する場合)からフロントエンド設計原則
32
35
 
33
36
  **要件承認の検証**:
@@ -49,6 +52,7 @@ argument-hint: <feature-name:$1> [-y:$2]
49
52
  - dependencies / devDependencies を確認し、使用可能なライブラリをリストアップ
50
53
  - 既存パッケージのバージョンと互換性を検証
51
54
  - 不足している機能がある場合のみ、追加パッケージを検討
55
+ - **技術スタック記載ルール(必須)**: 設計ドキュメントの「技術スタック」セクションには、`package.json` から読み取った**実際のバージョン**を記載する(推測や汎用的なバージョンではなく、例: `next: "15.1.2"` なら "Next.js 15.1.2" と記載)
52
56
 
53
57
  3. **適切な発見プロセスの実行**:
54
58
 
@@ -185,4 +189,3 @@ spec.json で指定された言語で簡潔なサマリーを提供:
185
189
  - 既存の設計は参照として使用(マージモード)
186
190
 
187
191
  **注記**: タスク生成に進む前に設計の承認が必須。
188
- </output>
@@ -20,24 +20,24 @@ argument-hint: <feature-name:$1>
20
20
 
21
21
  ## 実行ステップ
22
22
 
23
- 1. **コンテキストの読み込み**:
24
- - `.cursor/$1/spec.json` から言語とメタデータを読み込み
25
- - `.cursor/$1/requirements.md` から要件を読み込み
26
-
27
- 2. **分析ガイドラインの読み込み**:
28
- - `.cursor/rules/gap-analysis.md` から包括的な分析フレームワークを読み込み
29
-
30
- 3. **ギャップ分析の実行**:
31
- - gap-analysis.md フレームワークに従って徹底的な調査を実施
32
- - Grep と Read ツールを使用して既存コードベースを分析
33
- - 必要に応じて WebSearch/WebFetch で外部依存関係を調査
34
- - 複数の実装アプローチ(拡張/新規/ハイブリッド)を評価
35
- - spec.json で指定された言語で出力
36
-
37
- 4. **分析ドキュメントの生成**:
38
- - gap-analysis.md の出力ガイドラインに従って包括的なギャップ分析を作成
39
- - トレードオフを含む複数の実行可能なオプションを提示
40
- - さらなる調査が必要な領域にフラグを立てる
23
+ ### ステップ1: コンテキストの読み込み
24
+ - `.cursor/$1/spec.json` から言語とメタデータを読み込み
25
+ - `.cursor/$1/requirements.md` から要件を読み込み
26
+
27
+ ### ステップ2: 分析ガイドラインの読み込み
28
+ - `.cursor/rules/gap-analysis.md` から包括的な分析フレームワークを読み込み
29
+
30
+ ### ステップ3: ギャップ分析の実行
31
+ - gap-analysis.md フレームワークに従って徹底的な調査を実施
32
+ - Grep と Read ツールを使用して既存コードベースを分析
33
+ - 必要に応じて WebSearch/WebFetch で外部依存関係を調査
34
+ - 複数の実装アプローチ(拡張/新規/ハイブリッド)を評価
35
+ - spec.json で指定された言語で出力
36
+
37
+ ### ステップ4: 分析ドキュメントの生成
38
+ - gap-analysis.md の出力ガイドラインに従って包括的なギャップ分析を作成
39
+ - トレードオフを含む複数の実行可能なオプションを提示
40
+ - さらなる調査が必要な領域にフラグを立てる
41
41
 
42
42
  ## 重要な制約
43
43
  - **決定より情報**: 最終的な実装選択ではなく、分析とオプションを提供
@@ -18,16 +18,21 @@ argument-hint: <project-description>
18
18
  ワークスペースのルートフォルダ名をプロジェクト名として使用し、仕様構造を初期化する。
19
19
 
20
20
  ## 実行ステップ
21
- 1. **プロジェクト名の取得**: ワークスペースのルートフォルダ名をプロジェクト名として使用
22
- 2. **ディレクトリ作成**: `.cursor/[ルートフォルダ名]/`
23
- 3. **テンプレートを使用してファイルを初期化**:
24
- - `.cursor/templates/specs/init.json` を読み込み
25
- - `.cursor/templates/specs/requirements-init.md` を読み込み
26
- - プレースホルダーを置換:
27
- - `{{FEATURE_NAME}}` → ルートフォルダ名(プロジェクト名)
28
- - `{{TIMESTAMP}}` → 現在の ISO 8601 タイムスタンプ
29
- - `{{PROJECT_DESCRIPTION}}` → $ARGUMENTS
30
- - `spec.json` と `requirements.md` を `.cursor/[ルートフォルダ名]/` に書き込み
21
+
22
+ ### ステップ1: プロジェクト名の取得
23
+ ワークスペースのルートフォルダ名をプロジェクト名として使用する。
24
+
25
+ ### ステップ2: ディレクトリ作成
26
+ `.cursor/[ルートフォルダ名]/` と `.cursor/[ルートフォルダ名]/artifacts/` を作成する。
27
+
28
+ ### ステップ3: テンプレートを使用してファイルを初期化
29
+ - `.cursor/templates/specs/init.json` を読み込み
30
+ - `.cursor/templates/specs/requirements-init.md` を読み込み
31
+ - プレースホルダーを置換:
32
+ - `{{FEATURE_NAME}}` → ルートフォルダ名(プロジェクト名)
33
+ - `{{TIMESTAMP}}` → 現在の日付(YYYY/MM/DD 形式)
34
+ - `{{PROJECT_DESCRIPTION}}` → $ARGUMENTS
35
+ - `spec.json` と `requirements.md` を `.cursor/[ルートフォルダ名]/` に書き込み
31
36
 
32
37
  ## 重要な制約
33
38
  - この段階で requirements/design/tasks を生成しない
@@ -0,0 +1,98 @@
1
+ <meta>
2
+ description: 既存の要件ドキュメントをインポート(/initで作成済みのrequirements.mdから読み取り)
3
+ argument-hint: <feature-name:$1>
4
+ </meta>
5
+
6
+ # 既存要件インポート
7
+
8
+ <background_information>
9
+ - **ミッション**: `/init` で作成された requirements.md に記載された既存要件を正式な要件として取り込み、spec駆動開発のフローに統合
10
+ - **成功基準**:
11
+ - `.cursor/$1/requirements.md` の「プロジェクト説明」セクションを要件として整形
12
+ - メタデータを更新してインポート状況を追跡
13
+ - 次のフェーズ(設計生成)への明確なパスを提供
14
+ - **前提**: `/init` 実行時に、ユーザーが社内要件をプロジェクト説明として入力済み
15
+ </background_information>
16
+
17
+ <instructions>
18
+ ## コアタスク
19
+ `/init` で作成された `.cursor/$1/requirements.md` の「プロジェクト説明」セクションを読み取り、正式な要件として整形・統合する。
20
+
21
+ ## 実行ステップ
22
+
23
+ ### ステップ1: 前提条件の確認
24
+ - `.cursor/$1/spec.json` が存在することを確認(/init 実行済み)
25
+ - `.cursor/$1/requirements.md` が存在することを確認
26
+ - 「## プロジェクト説明(入力)」セクションに内容があることを確認
27
+
28
+ ### ステップ2: 既存要件の読み込み
29
+ - `.cursor/$1/requirements.md` から「## プロジェクト説明(入力)」セクションの内容を抽出
30
+ - 要件の構造を解析(見出し、箇条書き、番号付きリスト等)
31
+ - 複数の要件項目がある場合は個別に識別
32
+
33
+ ### ステップ3: 要件の整形・統合
34
+ - 「## プロジェクト説明(入力)」セクションは維持
35
+ - 「## 要件」セクションにプロジェクト説明の内容を要件として整形・配置
36
+ - 元のフォーマットをできるだけ尊重しつつ、Markdown形式に整形
37
+ - **注意**: EARS フォーマットへの強制変換は行わない(元の記述を尊重)
38
+ - 要件には連番を付与(1, 2, 3...)
39
+
40
+ ### ステップ4: メタデータの更新
41
+ spec.json を以下のように更新:
42
+ - `phase: "requirements-imported"` を設定
43
+ - `approvals.requirements.generated: true` を設定
44
+ - `approvals.requirements.source: "imported"` を追加
45
+ - `updated_at` タイムスタンプを更新
46
+
47
+ ## 重要な制約
48
+ - 既存要件の内容を勝手に変更・削除しない
49
+ - プロジェクト説明セクションは維持(要件セクションにコピー)
50
+ - 元の記述スタイルをできるだけ保持
51
+ - インポート後のレビュー機会を提供
52
+
53
+ </instructions>
54
+
55
+ ## ツールガイダンス
56
+ - **Read** を使用: `.cursor/$1/spec.json`、`.cursor/$1/requirements.md`
57
+ - **Write** を使用: requirements.md の更新、spec.json の更新
58
+ - **Glob** を使用: ファイル存在確認
59
+
60
+ ## 出力説明
61
+ spec.json で指定された言語で以下を出力:
62
+
63
+ 1. **インポート結果サマリー**:
64
+ - 取り込んだ要件の概要(主要な要件領域を3-5項目で要約)
65
+ - 要件数
66
+ - フォーマット変換の内容(あれば)
67
+
68
+ 2. **更新されたファイル**:
69
+ - `.cursor/$1/requirements.md`
70
+ - `.cursor/$1/spec.json`
71
+
72
+ 3. **次のステップ**:
73
+ - 内容確認の案内
74
+ - `/design $1` で設計フェーズへ進む方法
75
+
76
+ **フォーマット要件**:
77
+ - Markdown見出しを使用
78
+ - ファイルパスはコードブロックに含める
79
+ - サマリーは簡潔に(300語以内)
80
+
81
+ ## 安全性とフォールバック
82
+
83
+ ### エラーシナリオ
84
+ - **spec.json が見つからない**: `/init` の実行を案内
85
+ - **requirements.md が見つからない**: `/init` の実行を案内
86
+ - **プロジェクト説明が空**: `/init` 時に要件を入力するよう案内
87
+ - **既に要件セクションに内容がある**: 上書きするか確認をユーザーに求める
88
+
89
+ ### 次のフェーズ: 設計生成
90
+
91
+ **インポート完了後**:
92
+ - `.cursor/$1/requirements.md` でインポートされた要件をレビュー
93
+ - 必要に応じて手動で調整
94
+ - `/design $1` で設計フェーズに進む
95
+
96
+ **修正が必要な場合**:
97
+ - requirements.md を直接編集
98
+ - または `/init` からやり直し
@@ -20,24 +20,24 @@ requirements.md のプロジェクト説明に基づいて、機能 **$1** の
20
20
 
21
21
  ## 実行ステップ
22
22
 
23
- 1. **コンテキストの読み込み**:
24
- - `.cursor/$1/spec.json` から言語とメタデータを読み込み
25
- - `.cursor/$1/requirements.md` からプロジェクト説明を読み込み
23
+ ### ステップ1: コンテキストの読み込み
24
+ - `.cursor/$1/spec.json` から言語とメタデータを読み込み
25
+ - `.cursor/$1/requirements.md` からプロジェクト説明を読み込み
26
26
 
27
- 2. **ガイドラインの読み込み**:
28
- - `.cursor/rules/ears-format.md` から EARS 構文ルールを読み込み
29
- - `.cursor/templates/specs/requirements.md` からドキュメント構造を読み込み
27
+ ### ステップ2: ガイドラインの読み込み
28
+ - `.cursor/rules/ears-format.md` から EARS 構文ルールを読み込み
29
+ - `.cursor/templates/specs/requirements.md` からドキュメント構造を読み込み
30
30
 
31
- 3. **要件の生成**:
32
- - プロジェクト説明に基づいて初期要件を作成
33
- - 関連機能を論理的な要件領域にグループ化
34
- - すべての受け入れ基準に EARS フォーマットを適用
35
- - spec.json で指定された言語を使用
31
+ ### ステップ3: 要件の生成
32
+ - プロジェクト説明に基づいて初期要件を作成
33
+ - 関連機能を論理的な要件領域にグループ化
34
+ - すべての受け入れ基準に EARS フォーマットを適用
35
+ - spec.json で指定された言語を使用
36
36
 
37
- 4. **メタデータの更新**:
38
- - `phase: "requirements-generated"` を設定
39
- - `approvals.requirements.generated: true` を設定
40
- - `updated_at` タイムスタンプを更新
37
+ ### ステップ4: メタデータの更新
38
+ - `phase: "requirements-generated"` を設定
39
+ - `approvals.requirements.generated: true` を設定
40
+ - `updated_at` タイムスタンプを更新
41
41
 
42
42
  ## 重要な制約
43
43
  - 何を(WHAT)にフォーカスし、どのように(HOW)は含めない(実装詳細なし)
@@ -45,6 +45,17 @@ requirements.md のプロジェクト説明に基づいて、機能 **$1** の
45
45
  - EARS文の適切な主語を選択(ソフトウェアにはシステム/サービス名)
46
46
  - 最初に初期バージョンを生成し、その後ユーザーフィードバックで反復(事前の連続質問なし)
47
47
  - requirements.md の要件見出しには先頭に数値IDのみを含めること(例: "Requirement 1"、"1."、"2 Feature ...")、"Requirement A" のようなアルファベットIDは使用しない
48
+
49
+ ## 成果物(artifacts)の自動作成
50
+
51
+ `/requirements` 実行時に、`.cursor/rules/artifacts-generation.md` を読み込み、
52
+ `.cursor/$1/artifacts/feature-list.md` を(無ければ)テンプレから作成する(**上書き禁止**)。
53
+
54
+ - テンプレ: `.cursor/templates/artifacts/create-feature-list.md`
55
+
56
+ ### 出力への追記
57
+ - 作成/スキップした成果物ファイルの一覧を、requirements 出力サマリーに含める。
58
+
48
59
  </instructions>
49
60
 
50
61
  ## ツールガイダンス
@@ -25,21 +25,18 @@ argument-hint: <feature-name:$1>
25
25
  - `.cursor/$1/` ディレクトリで利用可能なファイルを確認
26
26
 
27
27
  ### ステップ2: ステータスの分析
28
-
29
- **各フェーズを解析**:
30
28
  - **Requirements**: 要件と受け入れ基準の数をカウント
31
29
  - **Design**: アーキテクチャ、コンポーネント、ダイアグラムを確認
32
30
  - **Tasks**: 完了タスク vs 全タスクをカウント(`- [x]` vs `- [ ]` を解析)
33
31
  - **Approvals**: spec.json で承認状況を確認
34
32
 
35
33
  ### ステップ3: レポートの生成
36
-
37
34
  spec.json で指定された言語でレポートを作成し、以下をカバー:
38
- 1. **現在のフェーズと進捗**: ワークフローにおけるspecの位置
39
- 2. **完了状況**: 各フェーズの完了率
40
- 3. **タスク内訳**: タスクが存在する場合、完了/残りの数を表示
41
- 4. **次のアクション**: 次に何をすべきか
42
- 5. **ブロッカー**: 進捗を妨げる問題
35
+ - **現在のフェーズと進捗**: ワークフローにおけるspecの位置
36
+ - **完了状況**: 各フェーズの完了率
37
+ - **タスク内訳**: タスクが存在する場合、完了/残りの数を表示
38
+ - **次のアクション**: 次に何をすべきか
39
+ - **ブロッカー**: 進捗を妨げる問題
43
40
 
44
41
  ## 重要な制約
45
42
  - spec.json の言語を使用
@@ -26,6 +26,9 @@ argument-hint: <feature-name:$1> [-y:$2] [--sequential:$3]
26
26
  - `.cursor/$1/spec.json`、`requirements.md`、`design.md`
27
27
  - `.cursor/$1/tasks.md`(存在する場合、マージモード用)
28
28
  - `.cursor/rules/frontend.md`(フロントエンド実装制約)
29
+ - `.cursor/rules/artifacts-generation.md`(成果物の安全な初期作成ルール)
30
+ - `.cursor/$1/artifacts/feature-list.md` / `.cursor/$1/artifacts/data-model.md` / `.cursor/$1/artifacts/table-definition.md` を(存在すれば)読み込み
31
+ - 欠けている場合はテンプレから **init 作成(上書き禁止)** してから参照してよい
29
32
 
30
33
  **承認の検証**:
31
34
  - `-y` フラグが提供された場合($2 == "-y"): spec.json で要件と設計を自動承認
@@ -39,6 +42,7 @@ argument-hint: <feature-name:$1> [-y:$2] [--sequential:$3]
39
42
 
40
43
  読み込むファイルパターン:
41
44
  - .cursor/$1/*.{json,md}
45
+ - .cursor/$1/artifacts/*.md
42
46
  - .cursor/rules/tasks-generation.md
43
47
  - .cursor/rules/tasks-parallel-analysis.md(シーケンシャルモードが false の場合のみ含める)
44
48
  - .cursor/templates/specs/tasks.md
@@ -0,0 +1,63 @@
1
+ # 成果物(artifacts)生成ルール(AI 実行手順)
2
+
3
+ ## 目的
4
+ requirements / design / tasks の各フェーズで、設計の一次ソースとなる成果物(機能一覧・ERD・テーブル定義書)を **テンプレートから安全に初期作成** できるようにする。
5
+
6
+ ## 対象成果物(.cursor/<feature>/artifacts/ 配下)
7
+ - `feature-list.md`
8
+ - `data-model.md`
9
+ - `table-definition.md`
10
+
11
+ ## 記載ルール(必須)
12
+ ### data-model.md(ERD)
13
+ - Mermaid の `erDiagram` には、**登場する各テーブル/エンティティについてカラム定義ブロックを記載する**。
14
+ - 形式例: `M_USER { bigint id PK ... }`
15
+ - **PK/UK/FK(分かる範囲)を明示**する(少なくとも `id PK`、主要なユニークキー、参照カラムの `FK`)。
16
+ - `%%` から始まる行は Mermaid のコメントとして扱ってよい(図の読みやすさ向上目的)。
17
+ - `data-model.md` と `table-definition.md` の内容が矛盾しないようにする(命名・キー・参照関係)。
18
+
19
+ ## 生成の基本ポリシー(必須)
20
+ - **安全な init がデフォルト**: 既存ファイルは **絶対に上書きしない**
21
+ - 上書きが許されるのは、ユーザーが明示的に「上書きして」と指示した場合のみ
22
+ - 生成した後は、以降 **差分更新が基本**(全面書き換えしない)
23
+
24
+ ## フェーズ別の生成対象(推奨)
25
+ - **requirements 直後**: `.cursor/<feature>/artifacts/feature-list.md` を(無ければ)作成
26
+ - **design 前半〜中盤**: `.cursor/<feature>/artifacts/data-model.md` を(無ければ)作成
27
+ - **design 中盤〜終盤(tasks 前)**: `.cursor/<feature>/artifacts/table-definition.md` を(無ければ)作成
28
+ - **tasks**: 3成果物(存在する場合)を読み取り、タスクがスコープ逸脱しないようにする
29
+ - ただし、欠けている成果物がある場合は **テンプレから初期作成してもよい**(initのみ、上書き禁止)
30
+
31
+ ## テンプレートの場所
32
+ テンプレは `.cursor/templates/artifacts/` に置く。
33
+ - `.cursor/templates/artifacts/create-feature-list.md`
34
+ - `.cursor/templates/artifacts/create-data-model.md`
35
+ - `.cursor/templates/artifacts/create-table-definition.md`
36
+
37
+ ## プレースホルダー置換(必須)
38
+ テンプレ内の以下を置換して出力する。
39
+ - `{{PROJECT_NAME}}`
40
+ - 優先: リポジトリルートの `package.json` の `name`
41
+ - 代替: ルートフォルダ名
42
+ - `{{DATE}}`: `YYYY-MM-DD`(UTC)
43
+ - `{{TIMESTAMP}}`: `YYYY-MM-DDTHH:mm:ssZ`(UTC)
44
+ - `{{AUTHOR}}`: 未指定なら空文字(ユーザー指定があれば反映)
45
+
46
+ 互換性:
47
+ - テンプレ内に `{{SYSTEM_NAME}}` が残っていたら `{{PROJECT_NAME}}` と同値として扱う(同様に置換)。
48
+
49
+ ## 実行アルゴリズム(AI 向け・手順そのまま)
50
+ 1. **機能ディレクトリ判定**: `feature = $1` とし、出力先を `.cursor/$1/artifacts/` とする(無ければ作成)。
51
+ 2. **テンプレ読み込み**: 上記3テンプレを読み込む。
52
+ 3. **置換値決定**:
53
+ - `package.json` があれば `name` を読む(文字列かつ非空)
54
+ - `{{DATE}}`/`{{TIMESTAMP}}` は UTC の現在時刻で生成
55
+ - `{{AUTHOR}}` は未指定なら空
56
+ 4. **安全に作成**:
57
+ - 出力先(`.cursor/$1/artifacts/`)に同名ファイルが **存在する場合はスキップ**
58
+ - 存在しない場合のみ、置換済みの内容を書き込んで作成
59
+ 5. **結果サマリー**:
60
+ - 作成/スキップを一覧化して、コマンド出力サマリーに含める
61
+
62
+ ## 例(運用メモ)
63
+ - 通常は `/requirements` / `/design` / `/tasks` の実行に含めて初期作成する(既存は上書きしない)
@@ -0,0 +1,51 @@
1
+ # 成果物(機能一覧・ERD・テーブル定義書)運用ルール
2
+
3
+ ## 対象成果物(.cursor/<feature>/artifacts/ 配下)
4
+ - `.cursor/<feature>/artifacts/feature-list.md`
5
+ - `.cursor/<feature>/artifacts/data-model.md`
6
+ - `.cursor/<feature>/artifacts/table-definition.md`
7
+
8
+ ## プレースホルダー(テンプレ共通)
9
+ テンプレ(`.cursor/templates/artifacts/*.md`)は以下のプレースホルダーを使う。
10
+
11
+ - `{{PROJECT_NAME}}`: プロジェクト名(既定: `package.json.name`、無い場合はルートフォルダ名)
12
+ - `{{DATE}}`: `YYYY-MM-DD`(UTC)
13
+ - `{{TIMESTAMP}}`: `YYYY-MM-DDTHH:mm:ssZ`(UTC)
14
+ - `{{AUTHOR}}`: 記載者(任意。未指定なら空)
15
+
16
+ ## 作成/更新タイミング(推奨)
17
+ - **requirements 直後**: `.cursor/<feature>/artifacts/feature-list.md`
18
+ - MVP/Phase と UI/API/Batch を先に固定(design の前提を明確化)
19
+ - **design 前半〜中盤**: `.cursor/<feature>/artifacts/data-model.md`
20
+ - MVPの主要エンティティとFKを Mermaid + FK表で固定
21
+ - Mermaid の `erDiagram` には **カラム定義ブロック(PK/UK/FK)** を含める(登場するテーブルは原則ブロックも書く)
22
+ - **design 中盤〜終盤(tasks前)**: `.cursor/<feature>/artifacts/table-definition.md`
23
+ - 制約/インデックス/編集仕様まで“契約化”
24
+ - **tasks**: 3成果物(存在する場合)を読み取り、タスクがスコープ逸脱しないようにする
25
+
26
+ ## 生成方法(推奨)
27
+ AI コマンド(`/requirements` / `/design` / `/tasks`)が `.cursor/rules/artifacts-generation.md` に従って **安全に初期作成**(既存は上書きしない)する。
28
+
29
+ ## 更新ポリシー
30
+ - **差分更新が基本**(全面書き換えしない)
31
+ - **MVP優先**で埋め、Phase2以降は追記で拡張
32
+ - spec(`.cursor/<feature>/requirements.md` / `design.md`)と乖離したら、どちらを正にするか決めて同期(放置しない)
33
+
34
+ ## テンプレート
35
+ - `.cursor/templates/artifacts/create-feature-list.md`
36
+ - `.cursor/templates/artifacts/create-data-model.md`
37
+ - `.cursor/templates/artifacts/create-table-definition.md`
38
+
39
+ ## AI 自動作成ルール
40
+ - `.cursor/rules/artifacts-generation.md`
41
+
42
+ ## 共通スニペット(任意)
43
+ - `.cursor/templates/artifacts/change-history-section.md`(変更履歴の統一フォーマット)
44
+
45
+ ---
46
+
47
+ ## 変更履歴
48
+
49
+ | 日付 | バージョン | 変更者 | 変更内容 |
50
+ | ---- | ---------- | ------ | -------- |
51
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -0,0 +1,86 @@
1
+ # データモデル / ERD({{PROJECT_NAME}})
2
+
3
+ **目的**: 実装/レビュー/運用が同じ参照を見られるように、ドメイン境界とテーブル関係を Mermaid で固定する。
4
+ **作成/更新タイミング**: `/design` の前半(MVPの主要エンティティが見えたら)。詳細は `.cursor/templates/artifacts/artifacts_rules.md`。
5
+
6
+ ---
7
+
8
+ ## ER 図
9
+
10
+ **記載ルール(必須)**
11
+ - `erDiagram` 内で、関係線だけでなく **各テーブルのカラム定義ブロック**(PK/UK/FK)も記載する。
12
+ - PK/UK/FK は分かる範囲で明示する(最低限 `id PK`、主要UK、参照カラムの `FK`)。
13
+ - `%%` は Mermaid のコメントとして使用してよい。
14
+
15
+ ```mermaid
16
+ erDiagram
17
+ %% ここにエンティティ関係を記述
18
+ %% 例: M_USER ||--o{ T_SESSION : has
19
+
20
+ %% 関係線の例
21
+ M_USER ||--o{ T_SESSION : has
22
+ M_ITEM ||--o{ T_INVENTORY_BALANCE : has
23
+
24
+ %% カラム定義ブロックの例(PK/UK/FK を明示)
25
+ M_USER {
26
+ bigint id PK
27
+ varchar login_id UK
28
+ varchar display_name
29
+ varchar role "viewer/operator/admin"
30
+ timestamptz created_at
31
+ timestamptz updated_at
32
+ }
33
+
34
+ T_SESSION {
35
+ bigint id PK
36
+ bigint user_id FK
37
+ varchar token UK
38
+ timestamptz expires_at
39
+ }
40
+
41
+ M_ITEM {
42
+ bigint id PK
43
+ varchar sku_code UK
44
+ varchar name
45
+ varchar unit "pcs/box/etc"
46
+ boolean is_active
47
+ }
48
+ ```
49
+
50
+ ---
51
+
52
+ ## テーブル間の関係性
53
+
54
+ ### 外部キー制約一覧
55
+
56
+ | FK 制約名 | 参照元テーブル | 参照元カラム | 参照先テーブル | 参照先カラム | ON DELETE | ON UPDATE | 説明 |
57
+ | -------- | -------------- | ------------ | -------------- | ------------ | -------- | -------- | ---- |
58
+ | (例) fk_xxx | t_xxx | yyy_id | m_yyy | id | RESTRICT | CASCADE | |
59
+
60
+ ### テーブル間の依存関係
61
+
62
+ - **依存関係の要約**:
63
+ - (例)`m_user → t_session`: 1対多。ユーザーが無効なら新規セッション発行停止
64
+
65
+ ### データ整合性ルール
66
+
67
+ - **整合性方針(例)**:
68
+ 1. どのテーブルが“正(source of truth)”か
69
+ 2. 更新禁止/追記のみ(監査性)
70
+ 3. 冪等性(例: request_id UNIQUE)
71
+ 4. 論理削除/無効化方針
72
+ 5. 参照整合性(ON DELETE 方針)
73
+
74
+ ---
75
+
76
+ ## 参照
77
+ - **テーブル定義書**: `table-definition.md`
78
+ - **機能一覧**: `feature-list.md`
79
+
80
+ ---
81
+
82
+ ## 変更履歴
83
+
84
+ | 日付 | バージョン | 変更者 | 変更内容 |
85
+ | ---- | ---------- | ------ | -------- |
86
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -0,0 +1,45 @@
1
+ # 機能一覧({{PROJECT_NAME}})
2
+
3
+ **目的**: プロダクトのスコープ(MVP/Phase)と、UI/API/バッチの一覧を“合意の一次ソース”として固定する。
4
+ **作成/更新タイミング**: `/requirements` の直後(要件ドラフトが出たらまず作る)。詳細は `.cursor/templates/artifacts/artifacts_rules.md`。
5
+
6
+ ---
7
+
8
+ ## 画面機能
9
+
10
+ | 機能 ID | 画面名 | 説明 | 優先度 | Phase | 記載者 |
11
+ | ------- | ------ | ---- | ------ | ----- | ------ |
12
+ | UI-001 | (例)在庫一覧 | (例)SKU × ロケーション単位で在庫を一覧表示。検索/絞り込みを提供。 | High | MVP | |
13
+
14
+ **記載ルール**
15
+ - Phase は `MVP`, `Phase2`, `Phase3`… のように段階を明示
16
+ - 説明は「ユーザー価値 + 主要な入出力」まで(HOW は書かない)
17
+
18
+ ---
19
+
20
+ ## API 機能
21
+
22
+ | 機能 ID | API 名 | エンドポイント | メソッド | 説明 | レベル | 実装方法 | 優先度 | Phase | 記載者 |
23
+ | ------- | ------ | -------------- | -------- | ---- | ------ | -------- | ------ | ----- | ------ |
24
+ | API-001 | (例)在庫残一覧取得 | /v1/... | GET | (例)在庫残を一覧取得する。 | B | Server API | High | MVP | |
25
+
26
+ **レベル定義(例)**:
27
+ - **A**: 複雑なビジネスロジック/外部連携/非同期など
28
+ - **B**: 複数テーブル結合/集計/加工あり
29
+ - **C**: 単テーブルCRUD相当
30
+
31
+ ---
32
+
33
+ ## バッチ機能
34
+
35
+ | 機能 ID | バッチ名 | 実行タイミング | 説明 | 優先度 | Phase | 記載者 |
36
+ | ------- | -------- | -------------- | ---- | ------ | ----- | ------ |
37
+ | BT-001 | (例)在庫残集計 | 任意(例:1時間毎) | (例)台帳から在庫残を集計し高速化する。 | Low | MVP | |
38
+
39
+ ---
40
+
41
+ ## 変更履歴
42
+
43
+ | 日付 | バージョン | 変更者 | 変更内容 |
44
+ | ---- | ---------- | ------ | -------- |
45
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -0,0 +1,80 @@
1
+ # テーブル定義書({{PROJECT_NAME}})
2
+
3
+ **目的**: DBの“契約”を明文化し、実装・レビュー・移行でブレないようにする。
4
+ **作成/更新タイミング**: `/design` の中盤〜終盤(ERDのエンティティが固まったら)。詳細は `.cursor/templates/artifacts/artifacts_rules.md`。
5
+
6
+ ---
7
+
8
+ ## テーブル一覧
9
+
10
+ | テーブル物理名 | テーブル論理名 | 概要 | 種別 |
11
+ | -------------- | -------------- | ---- | ---- |
12
+ | (例) m_user | ユーザー | ユーザー情報 | マスタ |
13
+
14
+ ---
15
+
16
+ ## 共通カラム定義
17
+
18
+ > ここはプロジェクト標準を定義して、各テーブルの繰り返しを減らす。
19
+
20
+ | カラム名 | 論理名 | 型 | 制約 | デフォルト値 | 説明 |
21
+ | ------ | ------ | -- | ---- | ---------- | ---- |
22
+ | id | ID | bigint | PK | | |
23
+ | created_at | 作成日時 | timestamptz | NOT NULL | CURRENT_TIMESTAMP | |
24
+ | created_by | 作成者 | text | NULL | | |
25
+ | created_program | 作成プログラム | varchar(255) | NOT NULL | | |
26
+ | updated_at | 更新日時 | timestamptz | NOT NULL | CURRENT_TIMESTAMP | |
27
+ | updated_by | 更新者 | text | NULL | | |
28
+ | updated_program | 更新プログラム | varchar(255) | NOT NULL | | |
29
+ | patched_at | パッチ更新日時 | timestamptz | NULL | | |
30
+ | patched_by | パッチ更新者 | text | NULL | | |
31
+ | lock_no | ロック番号 | bigint | NOT NULL | 0 | 楽観ロック |
32
+
33
+ **論理削除カラム(必要なテーブルのみ)**
34
+
35
+ | カラム名 | 論理名 | 型 | 制約 | デフォルト値 | 説明 |
36
+ | ------- | ------ | -- | ---- | ---------- | ---- |
37
+ | deleted_at | 削除日時 | timestamptz | NULL | | NULL=有効 |
38
+
39
+ ---
40
+
41
+ ## テーブル詳細定義
42
+
43
+ ### (例)ユーザー(m_user)
44
+
45
+ **概要**:
46
+
47
+ #### テーブル定義
48
+
49
+ | カラム名 | 論理名 | 型 | 制約 | デフォルト値 | 説明 |
50
+ | ------ | ------ | -- | ---- | ---------- | ---- |
51
+ | id | ID | bigint | PK | | |
52
+
53
+ **インデックス**
54
+
55
+ | インデックス名 | カラム | 種別 | 備考 |
56
+ | ------------ | ------ | ---- | ---- |
57
+
58
+ **外部キー制約**
59
+
60
+ | FK 名 | 参照元カラム | 参照先テーブル | 参照先カラム | ON DELETE | ON UPDATE |
61
+ | ----- | ---------- | -------------- | ------------ | -------- | -------- |
62
+
63
+ #### データ編集仕様
64
+
65
+ | カラム名 | [操作 1:作成] | [操作 2:更新] | [操作 3:無効化/削除] |
66
+ | ------- | ------------- | ------------- | --------------------- |
67
+
68
+ #### RLS ポリシー(任意)
69
+
70
+ ```sql
71
+ -- 採用する場合のみ方針を書く
72
+ ```
73
+
74
+ ---
75
+
76
+ ## 変更履歴
77
+
78
+ | 日付 | バージョン | 変更者 | 変更内容 |
79
+ | ---- | ---------- | ------ | -------- |
80
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -20,6 +20,8 @@
20
20
  **ユーザー**: [対象ユーザーグループ]が[特定のワークフロー]でこれを利用する。
21
21
  **影響**(該当する場合): 現在の[システム状態]を[具体的な変更]によって変更する。
22
22
 
23
+ **成果物(推奨)**: 設計の一次ソースとして、可能な限り以下3つを作成/更新し、設計と矛盾させない。\n> - `.cursor/<feature>/artifacts/feature-list.md`\n> - `.cursor/<feature>/artifacts/data-model.md`\n> - `.cursor/<feature>/artifacts/table-definition.md`\n> テンプレートは `.cursor/templates/artifacts/` を参照。(初期作成ロジックは `.cursor/rules/artifacts-generation.md`)。
24
+
23
25
  ### ゴール
24
26
  - 主要目標1
25
27
  - 主要目標2
@@ -163,6 +165,8 @@ interface [ComponentName]Service {
163
165
 
164
166
  この機能で変更されるデータ環境の部分に焦点を当てる。
165
167
 
168
+ **注記**: データモデルは `data-model.md` / `table-definition.md` と整合している必要がある。設計内では決定事項と契約を要約し、詳細は成果物側を一次ソースとして参照してよい(ただし矛盾は許容しない)。
169
+
166
170
  ### ドメインモデル
167
171
  - 集約とトランザクション境界
168
172
  - エンティティ、値オブジェクト、ドメインイベント
@@ -273,3 +277,11 @@ _パフォーマンス目標、高負荷、またはスケーリングの懸念
273
277
  - メイン本文に情報を残すと可読性が損なわれる場合のみこのセクションを作成(例:非常に長いTypeScript定義、ベンダーオプションマトリックス、網羅的なスキーマテーブル)。意思決定のコンテキストはメインセクションに残し、設計を自己完結型に保つ。
274
278
  - 大きなスニペットをインラインで含めず、メインテキストから参考資料へのリンクを張る。
275
279
  - 背景調査ノートと比較は引き続き`research.md`に記載するが、その結論はメイン設計に要約する必要がある。
280
+
281
+ ---
282
+
283
+ ## 変更履歴
284
+
285
+ | 日付 | バージョン | 変更者 | 変更内容 |
286
+ | ---- | ---------- | ------ | -------- |
287
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -0,0 +1,15 @@
1
+ # 要件ドキュメント
2
+
3
+ ## プロジェクト説明(入力)
4
+ {{PROJECT_DESCRIPTION}}
5
+
6
+ ## 要件
7
+ <!-- /kiro:spec-requirements フェーズで生成 -->
8
+
9
+ ---
10
+
11
+ ## 変更履歴
12
+
13
+ | 日付 | バージョン | 変更者 | 変更内容 |
14
+ | ---- | ---------- | ------ | -------- |
15
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -24,3 +24,21 @@
24
24
  2. [イベント]かつ[条件]の場合、[システム]は[レスポンス/アクション]を行う
25
25
 
26
26
  <!-- 追加の要件は同じパターンに従う -->
27
+
28
+ ## 成果物(推奨)
29
+ このフェーズの出力を **設計の一次ソース** に落とし込むため、要件ドラフトが出た時点で以下を作成/更新する。
30
+
31
+ ※ 自動初期作成(上書き禁止)のルールは `.cursor/rules/artifacts-generation.md` を参照。
32
+
33
+ - `.cursor/<feature>/artifacts/feature-list.md`(MVP/Phase と UI/API/Batch の一覧)
34
+
35
+ テンプレート:
36
+ - `.cursor/templates/artifacts/create-feature-list.md`
37
+
38
+ ---
39
+
40
+ ## 変更履歴
41
+
42
+ | 日付 | バージョン | 変更者 | 変更内容 |
43
+ | ---- | ---------- | ------ | -------- |
44
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -59,3 +59,11 @@ _各決定についてサブセクションを繰り返す。_
59
59
  正規のリンクと引用を提供(公式ドキュメント、標準、ADR、内部ガイドライン)。
60
60
  - [タイトル](https://example.com) — 関連性の簡単なメモ
61
61
  - ...
62
+
63
+ ---
64
+
65
+ ## 変更履歴
66
+
67
+ | 日付 | バージョン | 変更者 | 変更内容 |
68
+ | ---- | ---------- | ------ | -------- |
69
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
@@ -0,0 +1,31 @@
1
+ # 実装計画
2
+
3
+ **成果物の参照(推奨)**: 可能であれば `.cursor/<feature>/artifacts/feature-list.md` / `.cursor/<feature>/artifacts/data-model.md` / `.cursor/<feature>/artifacts/table-definition.md` を前提に、タスクがスコープ逸脱しないように分解する(ただしタスクリスト自体にドキュメント作業は含めない)。
4
+
5
+ ## タスク形式テンプレート
6
+
7
+ 作業分解に適したパターンを使用:
8
+
9
+ ### メジャータスクのみ
10
+ - [ ] {{NUMBER}}. {{TASK_DESCRIPTION}}{{PARALLEL_MARK}}
11
+ - {{DETAIL_ITEM_1}} *(必要な場合のみ詳細を含める。タスクが単独で成立する場合は箇条書きを省略。)*
12
+ - _要件: {{REQUIREMENT_IDS}}_
13
+
14
+ ### メジャー + サブタスク構造
15
+ - [ ] {{MAJOR_NUMBER}}. {{MAJOR_TASK_SUMMARY}}
16
+ - [ ] {{MAJOR_NUMBER}}.{{SUB_NUMBER}} {{SUB_TASK_DESCRIPTION}}{{SUB_PARALLEL_MARK}}
17
+ - {{DETAIL_ITEM_1}}
18
+ - {{DETAIL_ITEM_2}}
19
+ - _要件: {{REQUIREMENT_IDS}}_ *(IDのみ。説明や括弧を追加しない。)*
20
+
21
+ **並列マーカー**: 並列実行可能なタスクにのみ` (P)`を付加。`--sequential`モードで実行する場合はマーカーを省略。
22
+
23
+ **オプションのテストカバレッジ**: 受け入れ基準に関連する延期可能なテスト作業のサブタスクの場合、チェックボックスを`- [ ]*`としてマークし、詳細の箇条書きで参照要件を説明。
24
+
25
+ ---
26
+
27
+ ## 変更履歴
28
+
29
+ | 日付 | バージョン | 変更者 | 変更内容 |
30
+ | ---- | ---------- | ------ | -------- |
31
+ | {{DATE}} | v1.0 | {{AUTHOR}} | 初版作成 |
package/package.json CHANGED
@@ -1,18 +1,15 @@
1
1
  {
2
2
  "name": "cursor-sdd",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "Cursor SDD (Spec-Driven Development) - AI-powered spec templates, rules and commands for Cursor IDE",
5
5
  "bin": {
6
6
  "cursor-sdd": "bin/setup.ts"
7
7
  },
8
8
  "files": [
9
9
  "bin",
10
- "new",
11
- "assign"
10
+ "now"
12
11
  ],
13
- "scripts": {
14
- "setup": "tsx bin/setup.ts"
15
- },
12
+ "scripts": {},
16
13
  "keywords": [
17
14
  "cursor",
18
15
  "cursor-ide",
package/assign/README.md DELETED
@@ -1,16 +0,0 @@
1
- # assign プロファイル
2
-
3
- 既存プロジェクトにアサインする際のカスタム `.cursor` 一式をここに配置します。
4
-
5
- - `assign/commands` … アサイン時専用のコマンド定義
6
- - `assign/rules` … アサイン時専用のルール
7
- - `assign/templates` … アサイン時専用のテンプレート
8
-
9
- `npx cursor-sdd@latest --mode assign` あるいは対話選択で `assign` を選ぶと、このフォルダ配下が `.cursor/` にコピーされます。
10
-
11
- 依存に入れる場合は、インストール後にセットアップを実行してください:
12
-
13
- ```bash
14
- npm i -D cursor-sdd
15
- npx cursor-sdd --mode assign
16
- ```
@@ -1,4 +0,0 @@
1
- # assign/commands
2
-
3
- アサイン時専用の Cursor コマンド定義を置く場所です。
4
- 既定の `/init` などとは別内容にしたい場合、このディレクトリを編集してください。
@@ -1,3 +0,0 @@
1
- # assign/rules
2
-
3
- アサイン時専用のルールを置く場所です。既存プロジェクトのガイドラインに合わせてここを編集してください。
@@ -1,3 +0,0 @@
1
- # assign/templates
2
-
3
- アサイン時専用のテンプレートを置く場所です。不要なら空のままでも構いません。
@@ -1,8 +0,0 @@
1
- # 要件ドキュメント
2
-
3
- ## プロジェクト説明(入力)
4
- {{PROJECT_DESCRIPTION}}
5
-
6
- ## 要件
7
- <!-- /kiro:spec-requirements フェーズで生成 -->
8
-
@@ -1,21 +0,0 @@
1
- # 実装計画
2
-
3
- ## タスク形式テンプレート
4
-
5
- 作業分解に適したパターンを使用:
6
-
7
- ### メジャータスクのみ
8
- - [ ] {{NUMBER}}. {{TASK_DESCRIPTION}}{{PARALLEL_MARK}}
9
- - {{DETAIL_ITEM_1}} *(必要な場合のみ詳細を含める。タスクが単独で成立する場合は箇条書きを省略。)*
10
- - _要件: {{REQUIREMENT_IDS}}_
11
-
12
- ### メジャー + サブタスク構造
13
- - [ ] {{MAJOR_NUMBER}}. {{MAJOR_TASK_SUMMARY}}
14
- - [ ] {{MAJOR_NUMBER}}.{{SUB_NUMBER}} {{SUB_TASK_DESCRIPTION}}{{SUB_PARALLEL_MARK}}
15
- - {{DETAIL_ITEM_1}}
16
- - {{DETAIL_ITEM_2}}
17
- - _要件: {{REQUIREMENT_IDS}}_ *(IDのみ。説明や括弧を追加しない。)*
18
-
19
- > **並列マーカー**: 並列実行可能なタスクにのみ` (P)`を付加。`--sequential`モードで実行する場合はマーカーを省略。
20
- >
21
- > **オプションのテストカバレッジ**: 受け入れ基準に関連する延期可能なテスト作業のサブタスクの場合、チェックボックスを`- [ ]*`としてマークし、詳細の箇条書きで参照要件を説明。
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes