@aramassa/ai-rules 0.9.5 → 0.9.7
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/artifact/agents/agent-creation.agent.md +8 -0
- package/artifact/instructions/git-rules.md +8 -0
- package/artifact/instructions/rules/test/e2e-cmd.md +323 -0
- package/artifact/prompts/development/apply-fix.prompt.md +254 -0
- package/artifact/prompts/development/fix-implementation.prompt.md +438 -0
- package/artifact/prompts/development/plan-fix.prompt.md +25 -4
- package/artifact/prompts/github-copilot/copilot-agent-environment.prompt.md +462 -0
- package/package.json +1 -1
- package/presets/prompts/apply-fix.yaml +16 -0
- package/presets/prompts/fix-implementation.yaml +16 -0
- package/presets/prompts/github-copilot-agent.yaml +15 -0
- package/presets/prompts/plan-fix.yaml +1 -0
|
@@ -304,6 +304,14 @@ In case of naming conflicts, lowest level takes precedence:
|
|
|
304
304
|
2. Organization-level agent
|
|
305
305
|
3. Enterprise-level agent (lowest priority)
|
|
306
306
|
|
|
307
|
+
### Automation Considerations
|
|
308
|
+
|
|
309
|
+
**Avoid using `/dev/null` in agent prompts or tool configurations:**
|
|
310
|
+
- Using `/dev/null` can cause automation workflows to stop or hang
|
|
311
|
+
- This is particularly problematic in CI/CD pipelines and automated testing
|
|
312
|
+
- Instead, use proper output handling or logging mechanisms
|
|
313
|
+
- If output suppression is needed, use tool-specific options or environment configurations
|
|
314
|
+
|
|
307
315
|
## MCP Server Configuration (Organization/Enterprise Only)
|
|
308
316
|
|
|
309
317
|
### Basic MCP Server Setup
|
|
@@ -145,3 +145,11 @@ main
|
|
|
145
145
|
2. **CI/CD安定性**: パイプラインの失敗率低下
|
|
146
146
|
3. **開発効率**: 明確なプロセス定義による作業手順統一
|
|
147
147
|
4. **パッケージ品質**: npm publishable な状態の維持
|
|
148
|
+
|
|
149
|
+
## ブランチのクリーンアップ(リモートで削除済みのみ)
|
|
150
|
+
|
|
151
|
+
リモートで削除されたブランチだけをローカルから削除し、ローカルでのみ存在するブランチは残す。
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
git fetch --prune && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -D
|
|
155
|
+
```
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: test
|
|
3
|
+
category: e2e-test
|
|
4
|
+
focus: command-line-testing
|
|
5
|
+
applyTo: "todo_plans/**/e2e-cmd.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# E2E コマンドラインテスト計画ガイドライン
|
|
9
|
+
|
|
10
|
+
## 概要
|
|
11
|
+
|
|
12
|
+
このドキュメントは、`todo_plans/${ISSUE_NUMBER}/e2e-cmd.md` ファイルに記載すべき E2E テストの追加/更新/削除内容に関するガイドラインです。
|
|
13
|
+
|
|
14
|
+
## 基本原則
|
|
15
|
+
|
|
16
|
+
### コマンドライン完結の原則
|
|
17
|
+
|
|
18
|
+
**E2E テストは、原則としてコマンドライン(CLI)上で完結するもののみを対象とします。**
|
|
19
|
+
|
|
20
|
+
**対象となるテスト**:
|
|
21
|
+
- CLI ツールの動作確認
|
|
22
|
+
- API サーバーの HTTP リクエスト/レスポンス検証(curl、httpie などを使用)
|
|
23
|
+
- ビルドプロセスの実行確認
|
|
24
|
+
- スクリプトの実行と出力検証
|
|
25
|
+
- ファイル操作の確認
|
|
26
|
+
|
|
27
|
+
**対象外となるテスト**:
|
|
28
|
+
- ブラウザ UI のインタラクション(Playwright、Selenium などを使うもの)
|
|
29
|
+
- デスクトップアプリケーションの GUI 操作
|
|
30
|
+
- モバイルアプリケーションのテスト
|
|
31
|
+
- コマンドラインから実行できないインタラクティブな操作
|
|
32
|
+
|
|
33
|
+
### なぜコマンドライン完結なのか
|
|
34
|
+
|
|
35
|
+
- **再現性**: コマンドは完全に記録でき、誰でも同じ手順で実行可能
|
|
36
|
+
- **自動化**: CI/CD パイプラインで容易に実行可能
|
|
37
|
+
- **保守性**: テストスクリプトがシンプルで理解しやすい
|
|
38
|
+
- **環境依存性の最小化**: ブラウザやGUIツールのバージョン差異を避けられる
|
|
39
|
+
|
|
40
|
+
## e2e-cmd.md の記載内容
|
|
41
|
+
|
|
42
|
+
### ファイル構成
|
|
43
|
+
|
|
44
|
+
`todo_plans/${ISSUE_NUMBER}/e2e-cmd.md` ファイルには、以下の内容を記載します:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
# E2E テスト計画: [機能名]
|
|
48
|
+
|
|
49
|
+
## 追加すべきテスト
|
|
50
|
+
|
|
51
|
+
### テスト1: [テスト名]
|
|
52
|
+
- **目的**: [何を検証するか]
|
|
53
|
+
- **対象ファイル**: [プロジェクトルートからのフルパス]
|
|
54
|
+
- **コマンド**:
|
|
55
|
+
```bash
|
|
56
|
+
# セットアップ
|
|
57
|
+
npm run build
|
|
58
|
+
|
|
59
|
+
# テスト実行
|
|
60
|
+
./dist/cli.js command --option value
|
|
61
|
+
|
|
62
|
+
# 期待する結果
|
|
63
|
+
# - 終了コード: 0
|
|
64
|
+
# - 標準出力: "Success message"
|
|
65
|
+
```
|
|
66
|
+
- **検証ポイント**:
|
|
67
|
+
- [ ] 終了コードが正しい
|
|
68
|
+
- [ ] 標準出力/標準エラー出力が期待通り
|
|
69
|
+
- [ ] ファイル生成が正しく行われる
|
|
70
|
+
|
|
71
|
+
## 更新すべきテスト
|
|
72
|
+
|
|
73
|
+
### テスト2: [既存テスト名]
|
|
74
|
+
- **現在の問題**: [なぜ更新が必要か]
|
|
75
|
+
- **対象ファイル**: docs-ai/e2e-test/[既存ファイル名]
|
|
76
|
+
- **変更内容**:
|
|
77
|
+
- 変更前: `old command`
|
|
78
|
+
- 変更後: `new command --new-option`
|
|
79
|
+
- **理由**: [変更理由]
|
|
80
|
+
|
|
81
|
+
## 削除すべきテスト
|
|
82
|
+
|
|
83
|
+
### テスト3: [削除するテスト名]
|
|
84
|
+
- **対象ファイル**: docs-ai/e2e-test/[ファイル名]
|
|
85
|
+
- **削除理由**: [なぜ不要になったか]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 記載のポイント
|
|
89
|
+
|
|
90
|
+
#### 1. 追加すべきテスト
|
|
91
|
+
|
|
92
|
+
新機能や改善により、新たに動作確認が必要になったテストを記載します。
|
|
93
|
+
|
|
94
|
+
**必須項目**:
|
|
95
|
+
- テスト名(何をテストするか明確に)
|
|
96
|
+
- 目的(このテストで何を保証するか)
|
|
97
|
+
- 対象ファイル(プロジェクトルートからのフルパス)
|
|
98
|
+
- 実行コマンド(コピペで実行可能な形式)
|
|
99
|
+
- 検証ポイント(チェックリスト形式)
|
|
100
|
+
|
|
101
|
+
**良い例**:
|
|
102
|
+
```markdown
|
|
103
|
+
### テスト: CLI のヘルプ表示
|
|
104
|
+
|
|
105
|
+
- **目的**: CLI が正しくヘルプメッセージを表示することを確認
|
|
106
|
+
- **対象ファイル**: packages/cli/dist/index.js
|
|
107
|
+
- **コマンド**:
|
|
108
|
+
```bash
|
|
109
|
+
cd /home/runner/work/ai-rules/ai-rules
|
|
110
|
+
./packages/cli/dist/index.js --help
|
|
111
|
+
```
|
|
112
|
+
- **検証ポイント**:
|
|
113
|
+
- [ ] 終了コード 0
|
|
114
|
+
- [ ] 使用方法が表示される
|
|
115
|
+
- [ ] オプション一覧が表示される
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**悪い例**:
|
|
119
|
+
```markdown
|
|
120
|
+
### ヘルプのテスト
|
|
121
|
+
- ヘルプが表示されることを確認
|
|
122
|
+
- コマンド: `cli --help`
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### 2. 更新すべきテスト
|
|
126
|
+
|
|
127
|
+
既存の E2E テストの変更が必要な場合に記載します。
|
|
128
|
+
|
|
129
|
+
**記載すべき内容**:
|
|
130
|
+
- 既存テストファイルのフルパス(docs-ai/e2e-test/ 配下)
|
|
131
|
+
- 変更前後のコマンド
|
|
132
|
+
- 変更理由
|
|
133
|
+
|
|
134
|
+
**例**:
|
|
135
|
+
```markdown
|
|
136
|
+
### テスト: presets コマンドの引数変更
|
|
137
|
+
|
|
138
|
+
- **現在の問題**: 新しいオプション `--format` が追加されたが、既存テストでカバーされていない
|
|
139
|
+
- **対象ファイル**: docs-ai/e2e-test/presets-command-e2e.md
|
|
140
|
+
- **変更内容**:
|
|
141
|
+
- 変更前: `./dist/cli.js presets`
|
|
142
|
+
- 変更後: `./dist/cli.js presets --format json`
|
|
143
|
+
- **理由**: JSON 形式の出力を検証するため
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### 3. 削除すべきテスト
|
|
147
|
+
|
|
148
|
+
不要になったテストや、機能削除により実行できなくなったテストを記載します。
|
|
149
|
+
|
|
150
|
+
**記載すべき内容**:
|
|
151
|
+
- 削除対象ファイルのフルパス
|
|
152
|
+
- 削除理由
|
|
153
|
+
|
|
154
|
+
**例**:
|
|
155
|
+
```markdown
|
|
156
|
+
### テスト: 旧形式の config ファイル読み込み
|
|
157
|
+
|
|
158
|
+
- **対象ファイル**: docs-ai/e2e-test/legacy-config-e2e.md
|
|
159
|
+
- **削除理由**: 旧形式のサポートを終了したため、このテストは不要
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## コマンド記述のベストプラクティス
|
|
163
|
+
|
|
164
|
+
### 1. 絶対パスの使用
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# ✅ 良い例: プロジェクトルートからの明示的なパス
|
|
168
|
+
cd /home/runner/work/ai-rules/ai-rules
|
|
169
|
+
./dist/cli.js command
|
|
170
|
+
|
|
171
|
+
# ❌ 悪い例: 相対パスのみ
|
|
172
|
+
./cli.js command
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 2. 環境変数の明示
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# ✅ 良い例: 必要な環境変数を明示
|
|
179
|
+
NODE_ENV=test ./dist/cli.js test-command
|
|
180
|
+
|
|
181
|
+
# ❌ 悪い例: 環境変数が暗黙的
|
|
182
|
+
./dist/cli.js test-command
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 3. 前提条件の記載
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# ✅ 良い例: セットアップ手順を含める
|
|
189
|
+
# 前提: ビルド済みであること
|
|
190
|
+
npm run build
|
|
191
|
+
|
|
192
|
+
# テスト実行
|
|
193
|
+
./dist/cli.js command
|
|
194
|
+
|
|
195
|
+
# ❌ 悪い例: 前提条件が不明
|
|
196
|
+
./dist/cli.js command
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 4. 期待結果の明記
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# ✅ 良い例: 期待する出力を明記
|
|
203
|
+
# 期待する結果:
|
|
204
|
+
# - 終了コード: 0
|
|
205
|
+
# - 標準出力に "Success" を含む
|
|
206
|
+
# - ファイル dist/output.json が生成される
|
|
207
|
+
|
|
208
|
+
# ❌ 悪い例: 期待結果が不明
|
|
209
|
+
./dist/cli.js command
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 5. エラーケースの検証
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# ✅ 良い例: エラーケースも記載
|
|
216
|
+
# エラーケース: 無効な引数
|
|
217
|
+
./dist/cli.js command --invalid-option ; echo "exit code: $?"
|
|
218
|
+
# 期待: 終了コード 1、エラーメッセージ出力
|
|
219
|
+
|
|
220
|
+
# ❌ 悪い例: 正常系のみ
|
|
221
|
+
./dist/cli.js command
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## E2E テストドキュメントへの反映
|
|
225
|
+
|
|
226
|
+
`todo_plans/${ISSUE_NUMBER}/e2e-cmd.md` に記載した内容は、実装完了後に `docs-ai/e2e-test/` ディレクトリ配下の適切なファイルに反映します。
|
|
227
|
+
|
|
228
|
+
### 反映先の決定
|
|
229
|
+
|
|
230
|
+
- **既存機能の拡張**: 既存の E2E テストファイルに追記
|
|
231
|
+
- **新機能**: 新しい E2E テストファイルを作成(命名規則: `[機能名]-e2e.md`)
|
|
232
|
+
- **大規模な変更**: 既存ファイルを分割または再構成
|
|
233
|
+
|
|
234
|
+
### 反映時の注意点
|
|
235
|
+
|
|
236
|
+
1. **ファイルパスはプロジェクトルートからのフルパス**で記載
|
|
237
|
+
2. **コマンドはコピペで実行可能**な形式で記載
|
|
238
|
+
3. **セクション構成**は既存ファイルに合わせる:
|
|
239
|
+
- 前提条件
|
|
240
|
+
- 全体ビルド・テスト
|
|
241
|
+
- パッケージ別テスト
|
|
242
|
+
- コマンドライン検証
|
|
243
|
+
- エラーケーステスト
|
|
244
|
+
- クリーンアップ
|
|
245
|
+
|
|
246
|
+
## チェックリスト
|
|
247
|
+
|
|
248
|
+
e2e-cmd.md を作成する際の確認事項:
|
|
249
|
+
|
|
250
|
+
- [ ] すべてのテストがコマンドライン上で完結する
|
|
251
|
+
- [ ] ファイルパスはプロジェクトルートからのフルパスで記載されている
|
|
252
|
+
- [ ] コマンドがコピペで実行可能である
|
|
253
|
+
- [ ] 期待結果(終了コード、出力内容など)が明記されている
|
|
254
|
+
- [ ] セットアップ手順が含まれている
|
|
255
|
+
- [ ] クリーンアップ手順が必要な場合は記載されている
|
|
256
|
+
- [ ] 既存の E2E テストファイルとの関連が明確である
|
|
257
|
+
|
|
258
|
+
## 関連ドキュメント
|
|
259
|
+
|
|
260
|
+
- **E2E テストガイドライン**: artifact/instructions/rules/test/e2e-cli-execution.md
|
|
261
|
+
- **E2E テストディレクトリ**: docs-ai/e2e-test/README.md
|
|
262
|
+
- **計画ワークフロー**: artifact/prompts/development/plan-fix.prompt.md
|
|
263
|
+
|
|
264
|
+
## 例
|
|
265
|
+
|
|
266
|
+
### 完全な e2e-cmd.md の例
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
# E2E テスト計画: presets コマンド拡張
|
|
270
|
+
|
|
271
|
+
## 追加すべきテスト
|
|
272
|
+
|
|
273
|
+
### テスト1: JSON 形式での出力
|
|
274
|
+
|
|
275
|
+
- **目的**: presets コマンドが JSON 形式で出力できることを確認
|
|
276
|
+
- **対象ファイル**: packages/cli/dist/cli.js
|
|
277
|
+
- **コマンド**:
|
|
278
|
+
```bash
|
|
279
|
+
cd /home/runner/work/ai-rules/ai-rules
|
|
280
|
+
npm run build
|
|
281
|
+
./dist/cli.js presets --format json
|
|
282
|
+
```
|
|
283
|
+
- **検証ポイント**:
|
|
284
|
+
- [ ] 終了コード 0
|
|
285
|
+
- [ ] 標準出力が有効な JSON である
|
|
286
|
+
- [ ] JSON に "presets" 配列が含まれる
|
|
287
|
+
|
|
288
|
+
### テスト2: サブディレクトリのプリセット検出
|
|
289
|
+
|
|
290
|
+
- **目的**: presets/ 配下のサブディレクトリ内のプリセットも検出できることを確認
|
|
291
|
+
- **対象ファイル**: packages/cli/dist/cli.js
|
|
292
|
+
- **コマンド**:
|
|
293
|
+
```bash
|
|
294
|
+
cd /home/runner/work/ai-rules/ai-rules
|
|
295
|
+
npm run build
|
|
296
|
+
|
|
297
|
+
# サブディレクトリを作成してテスト
|
|
298
|
+
mkdir -p presets/custom
|
|
299
|
+
echo "test: true" > presets/custom/test.yaml
|
|
300
|
+
|
|
301
|
+
./dist/cli.js presets
|
|
302
|
+
|
|
303
|
+
# クリーンアップ
|
|
304
|
+
rm -rf presets/custom
|
|
305
|
+
```
|
|
306
|
+
- **検証ポイント**:
|
|
307
|
+
- [ ] 終了コード 0
|
|
308
|
+
- [ ] "custom/test.yaml" がリストに含まれる
|
|
309
|
+
|
|
310
|
+
## 更新すべきテスト
|
|
311
|
+
|
|
312
|
+
### テスト3: 既存の presets 一覧表示テスト
|
|
313
|
+
|
|
314
|
+
- **現在の問題**: 新しい `--format` オプションが追加されたが、既存テストでカバーされていない
|
|
315
|
+
- **対象ファイル**: docs-ai/e2e-test/presets-command-e2e.md
|
|
316
|
+
- **変更内容**:
|
|
317
|
+
- セクション「基本的な presets 一覧表示」の後に、「JSON 形式での出力」セクションを追加
|
|
318
|
+
- **理由**: 新機能のテストを既存の E2E テストファイルに統合
|
|
319
|
+
|
|
320
|
+
## 削除すべきテスト
|
|
321
|
+
|
|
322
|
+
なし
|
|
323
|
+
```
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: prompt
|
|
3
|
+
name: apply-fix
|
|
4
|
+
category: workflow
|
|
5
|
+
focus: implementation-application
|
|
6
|
+
description: "計画済みの修正をrepoルールに沿って適用。skel先行更新、構造検証、テスト運用、docs更新、PR/Issueコメントで進捗共有を標準化。"
|
|
7
|
+
agent: agent
|
|
8
|
+
---
|
|
9
|
+
# prompt apply-fix ワークフロー
|
|
10
|
+
|
|
11
|
+
## 概要
|
|
12
|
+
|
|
13
|
+
計画(Issue/planブランチ/Draft PR)と、実装完了後の締め作業(e2e実行/PR本文追記/Checks登録)の間にある「実装中」の作業を、この prompt で標準化します。
|
|
14
|
+
|
|
15
|
+
この prompt の主目的は、計画済みの修正を repo 固有ルール(skel先行更新・構造検証・テスト制約・docs更新・change_plans運用)を破らずに適用し、実装完了後の締め作業を実行できる状態まで到達することです。
|
|
16
|
+
|
|
17
|
+
## 目的
|
|
18
|
+
|
|
19
|
+
- 実装の適用(コード/テスト)を安全な順序で進める
|
|
20
|
+
- `skel/` を先行更新し、`test/skeleton-structure-validation.test.ts` で構造一致を担保する
|
|
21
|
+
- テスト運用ルール(特に `it.each` 禁止)を順守する
|
|
22
|
+
- `docs/` と必要に応じて `docs-ai/e2e-test/` を更新する
|
|
23
|
+
- Git 連携できる場合、PR と Issue に進捗・判断・結果を「頻繁に」コメントして追跡可能性を上げる
|
|
24
|
+
- 冗長コードを見つけたら `@TODO` を付け、後日リファクタリング候補として明示する(ただしスコープ外の大改修はしない)
|
|
25
|
+
|
|
26
|
+
## 前提条件
|
|
27
|
+
|
|
28
|
+
- 計画が完了している(Issue/planブランチ/Draft PR が存在)
|
|
29
|
+
- 作業ブランチは `plan/{issue_number}` を base にした `agent/*` である
|
|
30
|
+
- プロジェクトのテスト/ビルド/静的解析(該当する場合)が実行可能
|
|
31
|
+
- GitHub 連携(`gh` 認証)は任意だが、可能ならコメント運用を行う
|
|
32
|
+
|
|
33
|
+
## この prompt がやること / やらないこと
|
|
34
|
+
|
|
35
|
+
### やること
|
|
36
|
+
|
|
37
|
+
- 計画に従った実装(コード・テスト)の適用
|
|
38
|
+
- `skel/` の先行更新と構造検証
|
|
39
|
+
- docs 更新(必要に応じて `docs-ai/e2e-test/` の手順整備まで)
|
|
40
|
+
- 進捗ログ(`change_plans/`)の更新
|
|
41
|
+
- PR/Issue への進捗コメント(可能な場合)
|
|
42
|
+
|
|
43
|
+
### やらないこと
|
|
44
|
+
|
|
45
|
+
- Issue 作成・plan ブランチ作成・plan PR 作成(計画段階の領域)
|
|
46
|
+
- 実装完了後の e2e 実行、PR本文の実装完了レポート追記、Checks 登録(実装完了後の締め作業の領域)
|
|
47
|
+
|
|
48
|
+
## ワークフロー
|
|
49
|
+
|
|
50
|
+
### Step 1: 現状確認(ブランチ/PR/差分)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# 現在のブランチ
|
|
54
|
+
git branch --show-current
|
|
55
|
+
|
|
56
|
+
# PR番号(存在する場合)
|
|
57
|
+
PR_NUMBER=$(gh pr view --json number -q '.number' 2>/dev/null || true)
|
|
58
|
+
echo "PR Number: ${PR_NUMBER}"
|
|
59
|
+
|
|
60
|
+
# 変更ファイル一覧
|
|
61
|
+
git --no-pager diff --name-only origin/main...HEAD
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**確認ポイント**:
|
|
65
|
+
- [ ] `agent/*` ブランチで作業している
|
|
66
|
+
- [ ] 変更ファイル一覧が意図どおり
|
|
67
|
+
|
|
68
|
+
### Step 2: 実装開始ログ(change_plans)を用意
|
|
69
|
+
|
|
70
|
+
この repo では、作業中の計画・進捗は `change_plans/` に置き、完了後は削除します(Git履歴で追跡可能)。
|
|
71
|
+
|
|
72
|
+
ただし計画段階の運用では `todo_plans/${ISSUE_NUMBER}/index.md` が Issue 本文の正本です。
|
|
73
|
+
本タスクの進捗ログは `change_plans/` に作り、`todo_plans/${ISSUE_NUMBER}/index.md` は「要点の正本」として維持します。
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
DATE=$(date +%Y%m%d)
|
|
77
|
+
ISSUE_NUMBER=$(gh issue view --json number -q '.number' 2>/dev/null || true)
|
|
78
|
+
|
|
79
|
+
# gh が使えない場合は ISSUE_NUMBER を手で埋める
|
|
80
|
+
# ISSUE_NUMBER=123
|
|
81
|
+
|
|
82
|
+
CHANGE_PLAN="change_plans/${DATE}_issue-${ISSUE_NUMBER}_apply-fix.md"
|
|
83
|
+
|
|
84
|
+
if [ ! -f "$CHANGE_PLAN" ]; then
|
|
85
|
+
cat > "$CHANGE_PLAN" <<'EOF'
|
|
86
|
+
# apply-fix 実装ログ
|
|
87
|
+
|
|
88
|
+
## 進捗
|
|
89
|
+
- [ ] skel更新
|
|
90
|
+
- [ ] 構造検証
|
|
91
|
+
- [ ] 実装
|
|
92
|
+
- [ ] テスト
|
|
93
|
+
- [ ] docs更新
|
|
94
|
+
|
|
95
|
+
## 判断・メモ
|
|
96
|
+
|
|
97
|
+
## skel差分(patch)
|
|
98
|
+
|
|
99
|
+
EOF
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
echo "$CHANGE_PLAN"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Step 2.1: 詳細ログ(検証結果/調査/判断根拠)を `todo_plans/${ISSUE_NUMBER}/` に残す
|
|
106
|
+
|
|
107
|
+
- PR/Issue のコメントは「最初に自然文で3行」を必須にする(読む負担を増やさない)。
|
|
108
|
+
- その後の追記は状況に応じてよいが、**原則7行以内**に抑える。
|
|
109
|
+
- コマンド出力や長い実行ログは PR/Issue に貼らず、`todo_plans/${ISSUE_NUMBER}/` 配下にファイルとして残し、コメントから参照する。
|
|
110
|
+
- 実装中に調べた内容や、実装手法の選択根拠(なぜその方針にしたか)も、同様に `todo_plans/${ISSUE_NUMBER}/` 配下に残す。
|
|
111
|
+
|
|
112
|
+
**推奨ファイル(例)**:
|
|
113
|
+
- `todo_plans/${ISSUE_NUMBER}/verification.md`: 実行した確認内容・結果(長くてよい)
|
|
114
|
+
- `todo_plans/${ISSUE_NUMBER}/research.md`: 調査メモ・選択根拠(長くてよい)
|
|
115
|
+
|
|
116
|
+
### Step 3: skel を先に更新(ロジック修正前)
|
|
117
|
+
|
|
118
|
+
- ロジックの修正・テストの修正に入る前に、`skel/` を更新して「構造設計図」を先に確定します。
|
|
119
|
+
- `skel/` の変更差分は patch 形式で取得し、Step 2 の `change_plans/*` に貼り付けます。
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# 例: skel差分(patch)を確認して change_plans に貼る
|
|
123
|
+
git --no-pager diff -- skel | cat
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Step 4: 構造検証テストだけ先に実行
|
|
127
|
+
|
|
128
|
+
この repo では、まず `test/skeleton-structure-validation.test.ts` **だけ**を実行して、構造が一致していることを確認します。
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# プロジェクトのテストランナーで「構造検証テスト」だけを実行
|
|
132
|
+
<test-command> <structure-validation-test-only>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**参考(このリポジトリの例)**:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm test -- skeleton-structure-validation.test.ts --run
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**確認ポイント**:
|
|
142
|
+
- [ ] skel/test と test の describe/it 構造が一致している
|
|
143
|
+
- [ ] skel/src と src の構造が一致している
|
|
144
|
+
|
|
145
|
+
### Step 5: テスト方針(TDD / 禁止事項 / 停止条件)
|
|
146
|
+
|
|
147
|
+
- 修正対象が特定できたら、まずテストを書く(TDD)。
|
|
148
|
+
- **`it.each` は使用禁止**(skel構造検証ができなくなる)。
|
|
149
|
+
- テストが失敗した場合は、原因と修正方針をまとめ、合意が取れるまで先に進まない。
|
|
150
|
+
|
|
151
|
+
### Step 6: 実装を適用(最小変更・根本原因)
|
|
152
|
+
|
|
153
|
+
- できるだけ最小の差分で、根本原因に対処する。
|
|
154
|
+
- 既存のAPI/CLI互換性を意識し、破壊的変更がある場合は計画と Issue/PR に明記する。
|
|
155
|
+
- 実装中に冗長なコードを見つけた場合は、今回のスコープ外であれば削らずに `@TODO` を付けて後日対応に回す。
|
|
156
|
+
|
|
157
|
+
### Step 7: docs 更新(docs/ と docs-ai/e2e-test/)
|
|
158
|
+
|
|
159
|
+
- 変更内容が利用者に影響する場合は `docs/` を更新する。
|
|
160
|
+
- 動作確認の再現手順が必要な場合は `docs-ai/e2e-test/` を追加/更新する。
|
|
161
|
+
- ここでは「手順整備」まで(実行と結果記録は実装完了後の締め作業で行う)。
|
|
162
|
+
- ここでは「手順整備」まで(実行と結果記録は実装完了後の締め作業で行う)。
|
|
163
|
+
|
|
164
|
+
### Step 8: 最小のローカル検証
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# 構造検証(再確認)
|
|
168
|
+
<test-command> <structure-validation-test-only>
|
|
169
|
+
|
|
170
|
+
# 可能なら、影響範囲のテストも実行
|
|
171
|
+
<test-command>
|
|
172
|
+
|
|
173
|
+
# 変更がビルド成果物に影響する場合
|
|
174
|
+
<build-command>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**参考(このリポジトリの例)**:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npm test -- skeleton-structure-validation.test.ts --run
|
|
181
|
+
npm test
|
|
182
|
+
npm run root:build
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Step 9: コミット / PR・Issue コメント(頻繁に)
|
|
186
|
+
|
|
187
|
+
- コミットはレビュー可能な粒度で積む(例: `skel` → `test` → `impl` → `docs`)。
|
|
188
|
+
- GitHub 連携できる場合、以下のタイミングで PR と Issue にコメントする:
|
|
189
|
+
- 重要な判断変更(仕様・方針・スコープ)
|
|
190
|
+
- テスト戦略確定、テスト結果
|
|
191
|
+
- ブロッカー発生と解消
|
|
192
|
+
- マイルストーン(skel完了/実装完了/docs完了)
|
|
193
|
+
|
|
194
|
+
#### コメントの定型(先頭3行は自然文)
|
|
195
|
+
|
|
196
|
+
コメントは「最初に自然文で3行」を必須にし、その後の追記は状況に応じて行います(原則7行以内)。
|
|
197
|
+
|
|
198
|
+
長いコマンドや出力を載せたい場合は、**自然文サマリのみ**をコメントに書き、実行ログや詳細は `todo_plans/${ISSUE_NUMBER}/` 配下に保存して参照します。
|
|
199
|
+
|
|
200
|
+
(例:5行)
|
|
201
|
+
|
|
202
|
+
1行目: 今回の変更で「何を」したかを書きます。
|
|
203
|
+
2行目: 現在の進捗と、次にやることを書きます。
|
|
204
|
+
3行目: 影響範囲・注意点(なければ「影響なし」)を書きます。
|
|
205
|
+
補足: 検証は○○を実施しました。
|
|
206
|
+
詳細: todo_plans/${ISSUE_NUMBER}/verification.md / todo_plans/${ISSUE_NUMBER}/research.md
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# 進捗コメント(PR)
|
|
210
|
+
if [ -n "$PR_NUMBER" ]; then
|
|
211
|
+
gh pr comment "$PR_NUMBER" --body "進捗: [skel/実装/テスト/docs] の状況を更新しました。次は [次の作業] に進みます。"
|
|
212
|
+
fi
|
|
213
|
+
|
|
214
|
+
# 進捗コメント(Issue)
|
|
215
|
+
if [ -n "$ISSUE_NUMBER" ]; then
|
|
216
|
+
gh issue comment "$ISSUE_NUMBER" --body "進捗: [skel/実装/テスト/docs]。変更点/判断: ..."
|
|
217
|
+
fi
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Step 10: 完了条件(実装完了後の締め作業に引き渡せる状態)
|
|
221
|
+
|
|
222
|
+
- [ ] 変更がコミット済み(作業ブランチに反映されている)
|
|
223
|
+
- [ ] `npm test -- skeleton-structure-validation.test.ts --run` が通る
|
|
224
|
+
- [ ] 必要な `docs/` 更新が完了している
|
|
225
|
+
- [ ] 必要な `docs-ai/e2e-test/` が存在する(影響がある場合)
|
|
226
|
+
- [ ] `change_plans/*` に進捗と skel差分patch が残っている(完了後の削除は、merge/完了確認後に実施)
|
|
227
|
+
- [ ] 必要に応じて `todo_plans/${ISSUE_NUMBER}/verification.md` と `todo_plans/${ISSUE_NUMBER}/research.md` が更新されている
|
|
228
|
+
|
|
229
|
+
## コマンド一覧(まとめ)
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# 1) 現状確認
|
|
233
|
+
git branch --show-current
|
|
234
|
+
git --no-pager diff --name-only origin/main...HEAD
|
|
235
|
+
|
|
236
|
+
# 2) skel → 構造検証
|
|
237
|
+
<test-command> <structure-validation-test-only>
|
|
238
|
+
|
|
239
|
+
# 3) テスト/実装/ドキュメント
|
|
240
|
+
<test-command>
|
|
241
|
+
<build-command>
|
|
242
|
+
|
|
243
|
+
# 4) PR/Issue コメント
|
|
244
|
+
gh pr comment <PR_NUMBER> --body "..."
|
|
245
|
+
gh issue comment <ISSUE_NUMBER> --body "..."
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**参考(このリポジトリの例)**:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
npm test -- skeleton-structure-validation.test.ts --run
|
|
252
|
+
npm test
|
|
253
|
+
npm run root:build
|
|
254
|
+
```
|