@sk8metal/michi-cli 0.13.0 → 0.14.1

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 (46) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +27 -8
  3. package/dist/src/commands/setup-existing.d.ts.map +1 -1
  4. package/dist/src/commands/setup-existing.js +19 -74
  5. package/dist/src/commands/setup-existing.js.map +1 -1
  6. package/package.json +1 -1
  7. package/templates/claude/agents/design-reviewer/AGENT.md +0 -497
  8. package/templates/claude/agents/e2e-first-planner/AGENT.md +0 -410
  9. package/templates/claude/agents/mermaid-validator/AGENT.md +0 -257
  10. package/templates/claude/agents/oss-license-checker/AGENT.md +0 -265
  11. package/templates/claude/agents/pr-resolver/AGENT.md +0 -208
  12. package/templates/claude/agents/pr-size-monitor/AGENT.md +0 -330
  13. package/templates/claude/agents/stable-version-auditor/AGENT.md +0 -279
  14. package/templates/claude/commands/kiro/kiro-spec-impl.md +0 -257
  15. package/templates/claude/commands/kiro/kiro-spec-tasks.md +0 -370
  16. package/templates/claude/commands/michi/confluence-sync.md +0 -44
  17. package/templates/claude/commands/michi/design-review.md +0 -70
  18. package/templates/claude/commands/michi/e2e-plan.md +0 -117
  19. package/templates/claude/commands/michi/license-check.md +0 -84
  20. package/templates/claude/commands/michi/pr-resolve.md +0 -157
  21. package/templates/claude/commands/michi/project-switch.md +0 -42
  22. package/templates/claude/commands/michi/spec-design.md +0 -78
  23. package/templates/claude/commands/michi/spec-impl.md +0 -889
  24. package/templates/claude/commands/michi/spec-tasks.md +0 -156
  25. package/templates/claude/commands/michi/test-planning.md +0 -174
  26. package/templates/claude/commands/michi/validate-design.md +0 -58
  27. package/templates/claude/commands/michi/version-audit.md +0 -95
  28. package/templates/claude/commands/michi-multi-repo/impl-all.md +0 -293
  29. package/templates/claude/commands/michi-multi-repo/propagate-specs.md +0 -284
  30. package/templates/claude/commands/michi-multi-repo/spec-design.md +0 -359
  31. package/templates/claude/commands/michi-multi-repo/spec-init.md +0 -228
  32. package/templates/claude/commands/michi-multi-repo/spec-requirements.md +0 -198
  33. package/templates/claude/commands/michi-multi-repo/spec-review.md +0 -261
  34. package/templates/claude/rules/atlassian-integration.md +0 -35
  35. package/templates/claude/rules/michi-core.md +0 -54
  36. package/templates/claude/skills/design-review/SKILL.md +0 -648
  37. package/templates/claude/skills/e2e-first-planning/SKILL.md +0 -360
  38. package/templates/claude/skills/mermaid-validator/SKILL.md +0 -261
  39. package/templates/claude/skills/oss-license/SKILL.md +0 -232
  40. package/templates/claude/skills/stable-version/SKILL.md +0 -252
  41. package/templates/claude-agent/rules/code-size-monitor.md +0 -26
  42. package/templates/claude-agent/rules/code-size-rules.md +0 -32
  43. package/templates/michi/cc-sdd-overrides/README.md +0 -58
  44. package/templates/michi/cc-sdd-overrides/settings/rules/design-review-michi.md +0 -53
  45. package/templates/michi/cc-sdd-overrides/settings/templates/specs/init.json +0 -24
  46. package/templates/michi/cc-sdd-overrides/settings/templates/specs/tasks.md +0 -446
@@ -1,889 +0,0 @@
1
- /---
2
- name: /michi:spec-impl
3
- description: Execute spec tasks using TDD methodology with quality automation (Michi version)
4
- allowed-tools: Task, Bash, Read, Write, Edit, MultiEdit, Grep, Glob, LS, WebFetch, WebSearch
5
- argument-hint: <feature-name> [task-numbers] [--mutation] [--skip-license] [--skip-version] [--skip-design]
6
- ---
7
-
8
- # Michi: Spec Implementation with Quality Automation
9
-
10
- ## Base Command Reference
11
- @.claude/commands/kiro/spec-impl.md
12
-
13
- ## Development Guidelines
14
-
15
- {{DEV_GUIDELINES}}
16
-
17
- ---
18
-
19
- ## Michi Extension: Quality Automation & Parallel Execution
20
-
21
- このコマンドは cc-sdd 標準の `/kiro:spec-impl` を拡張し、以下のMichi固有機能を追加します:
22
-
23
- ### 追加機能
24
- 1. **事前品質監査(Phase 1)**: サブエージェント並行実行でライセンス・バージョンリスクを早期検出
25
- 2. **自動修正ループ(Phase 2)**: type-check、lint、test を自動修正(最大5回)
26
- 3. **事後品質レビュー(Phase 3)**: コードレビュー、デザインレビュー(Frontend時)
27
- 4. **最終品質ゲート(Phase 4)**: カバレッジ95%、Mutation Testing(オプション)
28
- 5. **タスク完了マーク(Phase 4.5)**: tasks.mdのチェックボックス更新
29
- 6. **タスク完了後の処理(Phase 5)**: スペックのarchive移動を確認・実行
30
-
31
- ### コマンドシグネチャ
32
-
33
- ```bash
34
- /michi:spec-impl <feature-name> [task-numbers] [options]
35
-
36
- Arguments:
37
- feature-name 機能名(必須)
38
- task-numbers タスク番号(オプション、例: "1.1" or "1,2,3")
39
-
40
- Options:
41
- --mutation Mutation Testing を実行(Phase 4)
42
- --skip-license ライセンスチェックをスキップ
43
- --skip-version バージョンチェックをスキップ
44
- --skip-design デザインレビューをスキップ(Frontend検出時)
45
- ```
46
-
47
- ---
48
-
49
- ## 実行フロー
50
-
51
- ```plaintext
52
- Phase 0: コンテキストロード(kiro:spec-impl継承)
53
-
54
- Phase 1: 事前品質監査(Michi拡張)
55
- ├─ oss-license-checker(並行)
56
- ├─ stable-version-auditor(並行)
57
- └─ Frontend検出判定(並行)
58
-
59
- Phase 2: TDD実装サイクル(kiro:spec-impl継承 + 自動修正ループ拡張)
60
- RED → GREEN → REFACTOR → VERIFY(最大5回)
61
-
62
- Phase 3: 事後品質レビュー(Michi拡張)
63
- ├─ コードレビュー(常に)
64
- └─ デザインレビュー(Frontend時のみ)
65
-
66
- Phase 4: 最終検証(Michi拡張)
67
- type-check + lint + test + coverage 95% + Mutation Testing(オプション)
68
-
69
- Phase 4.4: PRサイズチェック(Michi拡張)
70
- 500行超過時 → ユーザー確認 → PR作成
71
-
72
- Phase 4.5: タスク完了マーク(Michi拡張)
73
- tasks.md のチェックボックス更新
74
-
75
- Phase 5: タスク完了後の処理(Michi拡張)
76
- Archive確認 → ユーザー選択 → Archive実行 or スキップ
77
- ```
78
-
79
- ---
80
-
81
- ## Phase 1: 事前品質監査(Michi拡張)
82
-
83
- ### 目的
84
- 実装前にライセンス・バージョンリスクを早期検出し、Critical問題を解決する。
85
-
86
- ### 実行手順
87
-
88
- #### Step 1.1: オプション解析
89
-
90
- ```bash
91
- SKIP_LICENSE=false
92
- SKIP_VERSION=false
93
- SKIP_DESIGN=false
94
- MUTATION=false
95
-
96
- if echo "$@" | grep -q -- '--skip-license'; then
97
- SKIP_LICENSE=true
98
- fi
99
-
100
- if echo "$@" | grep -q -- '--skip-version'; then
101
- SKIP_VERSION=true
102
- fi
103
-
104
- if echo "$@" | grep -q -- '--skip-design'; then
105
- SKIP_DESIGN=true
106
- fi
107
-
108
- if echo "$@" | grep -q -- '--mutation'; then
109
- MUTATION=true
110
- fi
111
-
112
- # レポート出力用の変数初期化
113
- COMPLETED_TASKS=0
114
- TOTAL_TASKS=0
115
- OSS_LICENSE_STATUS="UNKNOWN"
116
- VERSION_AUDIT_STATUS="UNKNOWN"
117
- DESIGN_REVIEW_STATUS="SKIPPED"
118
- CODE_REVIEW_CRITICAL=0
119
- DESIGN_REVIEW_CRITICAL=0
120
- ```
121
-
122
- #### Step 1.2: サブエージェント並行起動
123
-
124
- **重要**: 以下の3つのタスクは独立しているため、並行実行する。単一メッセージで複数のTaskツール呼び出しを行う。
125
-
126
- ```markdown
127
- ## サブエージェント並行起動(Phase 1)
128
-
129
- Phase 1では以下の3つのサブエージェントを並行起動する:
130
-
131
- ### 1. oss-license-checker
132
- ```yaml
133
- Task tool:
134
- subagent_type: oss-license-checker
135
- prompt: |
136
- プロジェクトの依存パッケージライセンスを監査してください。
137
-
138
- **監査対象**:
139
- - package.json / package-lock.json(Node.js)
140
- - requirements.txt / pyproject.toml(Python)
141
- - build.gradle / pom.xml(Java)
142
- - composer.json(PHP)
143
-
144
- **検出すべきライセンス**:
145
- - 🔴 Critical: GPL, AGPL, SSPL → 即時停止
146
- - 🟡 Warning: LGPL, MPL → 警告表示
147
-
148
- **出力形式**:
149
- - Critical件数: X件
150
- - Warning件数: Y件
151
- - 代替パッケージ提案(Critical時)
152
- ```
153
-
154
- ### 2. stable-version-auditor
155
- ```yaml
156
- Task tool:
157
- subagent_type: stable-version-auditor
158
- prompt: |
159
- プロジェクトの技術スタックバージョンを監査してください。
160
-
161
- **監査対象**:
162
- - Node.js version(package.json, .nvmrc, Dockerfile)
163
- - Python version(pyproject.toml, .python-version)
164
- - Java version(pom.xml, build.gradle)
165
-
166
- **検出すべきリスク**:
167
- - 🔴 Critical: EOL済み → 即時停止
168
- - 🟡 Warning: EOL 6ヶ月以内 → 警告表示
169
- - 🟢 Info: 最新LTSでない → 情報表示
170
-
171
- **出力形式**:
172
- - Critical件数: X件
173
- - Warning件数: Y件
174
- - アップグレードパス提案(Critical時)
175
- ```
176
-
177
- ### 3. Frontend検出
178
- ```bash
179
- # Frontend変更を検出
180
- FRONTEND_DETECTED=false
181
-
182
- # 対象ファイル拡張子
183
- if find . -type f \( \
184
- -name "*.tsx" -o \
185
- -name "*.jsx" -o \
186
- -name "*.vue" -o \
187
- -name "*.svelte" \
188
- \) | head -1 | grep -q .; then
189
- FRONTEND_DETECTED=true
190
- fi
191
-
192
- # CSSファイル
193
- if find . -type f \( \
194
- -name "*.css" -o \
195
- -name "*.scss" -o \
196
- -name "*.sass" -o \
197
- -name "*.less" \
198
- \) | head -1 | grep -q .; then
199
- FRONTEND_DETECTED=true
200
- fi
201
-
202
- # Tailwind設定
203
- if [ -f "tailwind.config.js" ] || [ -f "tailwind.config.ts" ]; then
204
- FRONTEND_DETECTED=true
205
- fi
206
-
207
- # Frontendディレクトリ
208
- if [ -d "components" ] || [ -d "pages" ] || [ -d "views" ]; then
209
- FRONTEND_DETECTED=true
210
- fi
211
-
212
- echo "Frontend detected: $FRONTEND_DETECTED"
213
- ```
214
-
215
-
216
- #### Step 1.3: 結果集約とゲート判定
217
-
218
- ```bash
219
- # 結果集約
220
- TOTAL_CRITICAL=0
221
- TOTAL_WARNING=0
222
-
223
- # oss-license-checker結果
224
- if [ "$OSS_LICENSE_CRITICAL" -gt 0 ]; then
225
- TOTAL_CRITICAL=$((TOTAL_CRITICAL + OSS_LICENSE_CRITICAL))
226
- fi
227
-
228
- # stable-version-auditor結果
229
- if [ "$VERSION_AUDIT_CRITICAL" -gt 0 ]; then
230
- TOTAL_CRITICAL=$((TOTAL_CRITICAL + VERSION_AUDIT_CRITICAL))
231
- fi
232
-
233
- # ゲート判定
234
- if [ "$TOTAL_CRITICAL" -gt 0 ]; then
235
- echo "🔴 Critical issues detected: $TOTAL_CRITICAL"
236
- echo ""
237
- echo "以下の対応が必要です:"
238
- echo "1. 禁止ライセンス(GPL/AGPL/SSPL)を使用しているパッケージを代替"
239
- echo "2. EOL済みバージョンをアップグレード"
240
- echo ""
241
- echo "次のアクション:"
242
- echo "A) 代替パッケージ/アップグレードを実施する"
243
- echo "B) 詳細レポートを確認する"
244
- echo "C) 実装を中止する"
245
-
246
- # ユーザー確認
247
- read -p "どの対応を希望しますか? (A/B/C): " ACTION
248
-
249
- if [ "$ACTION" != "A" ]; then
250
- echo "実装を中止します"
251
- exit 1
252
- fi
253
- else
254
- echo "✅ Phase 1: 事前品質監査 完了(Critical: 0, Warning: $TOTAL_WARNING)"
255
- fi
256
- ```
257
-
258
- ---
259
-
260
- ## Phase 2: TDD実装サイクル(自動修正ループ拡張)
261
-
262
- ### 目的
263
- kiro:spec-implの基本TDDサイクルに自動修正ループを追加する。
264
-
265
- ### Step 2.1: RED - 失敗するテストを書く
266
-
267
- ```markdown
268
- - 次の小さな機能のテストを書く
269
- - テストは失敗する(まだコードが存在しない)
270
- - 説明的なテスト名を使用する
271
- ```
272
-
273
- ### Step 2.2: GREEN - 最小限のコードを書く
274
-
275
- ```markdown
276
- - テストを通過させる最もシンプルな実装を行う
277
- - このテストを通過させることだけに集中する
278
- - 過度な設計を避ける
279
- ```
280
-
281
- ### Step 2.3: REFACTOR - クリーンアップ
282
-
283
- ```markdown
284
- - コード構造と可読性を改善する
285
- - 重複を削除する
286
- - 適切な設計パターンを適用する
287
- - リファクタリング後もすべてのテストが通過することを確認する
288
- ```
289
-
290
- ### Step 2.4: VERIFY - 品質チェック(自動修正ループ)
291
-
292
- ```bash
293
- # 各タスク実装後、品質チェックを実行
294
- ITERATION=0
295
- MAX_ITERATIONS=5
296
-
297
- while [ $ITERATION -lt $MAX_ITERATIONS ]; do
298
- echo "=== 品質チェック(試行 $((ITERATION + 1))/$MAX_ITERATIONS)==="
299
-
300
- # Type Check
301
- if ! npm run type-check 2>&1 | tee /tmp/type-check.log; then
302
- echo "❌ Type check failed"
303
- TYPE_CHECK_FAILED=true
304
- else
305
- echo "✅ Type check passed"
306
- TYPE_CHECK_FAILED=false
307
- fi
308
-
309
- # Lint
310
- if ! npm run lint 2>&1 | tee /tmp/lint.log; then
311
- echo "❌ Lint failed"
312
- LINT_FAILED=true
313
- else
314
- echo "✅ Lint passed"
315
- LINT_FAILED=false
316
- fi
317
-
318
- # Test
319
- if ! npm run test:run 2>&1 | tee /tmp/test.log; then
320
- echo "❌ Test failed"
321
- TEST_FAILED=true
322
- else
323
- echo "✅ Test passed"
324
- TEST_FAILED=false
325
- fi
326
-
327
- # 全て成功したらループ終了
328
- if [ "$TYPE_CHECK_FAILED" = false ] && [ "$LINT_FAILED" = false ] && [ "$TEST_FAILED" = false ]; then
329
- echo "✅ 全ての品質チェックが成功しました"
330
- break
331
- fi
332
-
333
- # 自動修正を試行
334
- echo "⚙️ 自動修正を試行します..."
335
-
336
- if [ "$LINT_FAILED" = true ]; then
337
- echo "🔧 Lint自動修正を実行"
338
- npm run lint:fix
339
- fi
340
-
341
- if [ "$TYPE_CHECK_FAILED" = true ]; then
342
- echo "🔧 型エラーを分析中..."
343
- fi
344
-
345
- if [ "$TEST_FAILED" = true ]; then
346
- echo "🔧 テスト失敗を分析中..."
347
- echo "⚠️ 注意: テストは仕様。仕様変更の場合のみテストを修正"
348
- fi
349
-
350
- ITERATION=$((ITERATION + 1))
351
- done
352
-
353
- # 最大試行回数に達した場合
354
- if [ $ITERATION -eq $MAX_ITERATIONS ]; then
355
- echo "❌ 自動修正ループが最大試行回数($MAX_ITERATIONS)に達しました"
356
- echo ""
357
- echo "以下の問題が残っています:"
358
- [ "$TYPE_CHECK_FAILED" = true ] && echo "- Type check失敗"
359
- [ "$LINT_FAILED" = true ] && echo "- Lint失敗"
360
- [ "$TEST_FAILED" = true ] && echo "- Test失敗"
361
- echo ""
362
- echo "次のアクション:"
363
- echo "A) 手動で修正を続ける"
364
- echo "B) 現在のタスクをスキップ"
365
- echo "C) 実装を中止"
366
-
367
- # ユーザー確認
368
- read -p "どの対応を希望しますか? (A/B/C): " ACTION
369
-
370
- if [ "$ACTION" = "C" ]; then
371
- echo "実装を中止します"
372
- exit 1
373
- fi
374
- fi
375
- ```
376
-
377
- ---
378
-
379
- ## Phase 3: 事後品質レビュー(Michi拡張)
380
-
381
- ### 目的
382
- 実装完了後、コードレビューとデザインレビュー(Frontend時)を実行する。
383
-
384
- ### Step 3.1: コードレビュー(常に実行)
385
-
386
- ```markdown
387
- ## コードレビュー実行
388
-
389
- Task tool:
390
- subagent_type: review-cq
391
- prompt: |
392
- 実装完了したコードをレビューしてください。
393
-
394
- **レビュー対象機能**: $1
395
-
396
- **レビュー観点**:
397
- - コード品質: 可読性、保守性、DRY原則
398
- - セキュリティ: 入力検証、XSS、SQLインジェクション
399
- - パフォーマンス: アルゴリズム効率、メモリ使用量
400
- - テスト: テストカバレッジ、テストの質
401
-
402
- **重要度分類**:
403
- - 🔴 Critical: 即時修正必須
404
- - 🟡 Warning: 対応推奨
405
- - 🟢 Info: 改善提案
406
-
407
- **出力形式**:
408
- - Critical件数: X件
409
- - Warning件数: Y件
410
- - 修正推奨箇所の詳細リスト
411
- ```
412
-
413
- ### Step 3.2: デザインレビュー(Frontend検出時のみ)
414
-
415
- ```bash
416
- # Frontend検出結果に基づいて実行
417
- if [ "$FRONTEND_DETECTED" = true ] && [ "$SKIP_DESIGN" = false ]; then
418
- echo "=== Frontend変更を検出 → デザインレビューを実行 ==="
419
- ```
420
-
421
- ```markdown
422
- Task tool:
423
- subagent_type: design-reviewer
424
- prompt: |
425
- Frontend実装をレビューしてください。
426
-
427
- **レビュー対象URL**: http://localhost:3000(開発サーバーが起動している前提)
428
-
429
- **レビュー観点**:
430
- - アクセシビリティ(WCAG 2.1)
431
- - レスポンシブデザイン(375px, 768px, 1280px)
432
- - UXパターン
433
- - パフォーマンス(Core Web Vitals)
434
-
435
- **実行手順**:
436
- 1. Playwright MCPでページアクセス
437
- 2. 各ブレークポイントでスクリーンショット取得
438
- 3. アクセシビリティツリー分析
439
- 4. コントラスト比チェック
440
- 5. LCP/CLS測定
441
-
442
- **出力先**: docs/tmp/design-review-report.md
443
- ```
444
-
445
- ```bash
446
- else
447
- echo "✅ Frontend変更なし → デザインレビューをスキップ"
448
- fi
449
- ```
450
-
451
- ### Step 3.3: レビューループ(最大5回)
452
-
453
- ```bash
454
- # レビュー結果に基づいて自動修正
455
- REVIEW_ITERATION=0
456
- MAX_REVIEW_ITERATIONS=5
457
-
458
- while [ $REVIEW_ITERATION -lt $MAX_REVIEW_ITERATIONS ]; do
459
- echo "=== レビュー修正(試行 $((REVIEW_ITERATION + 1))/$MAX_REVIEW_ITERATIONS)==="
460
-
461
- # コードレビュー結果
462
- CODE_REVIEW_CRITICAL=$(cat /tmp/code-review.json | jq '.critical_count')
463
-
464
- # デザインレビュー結果(Frontend時のみ)
465
- if [ "$FRONTEND_DETECTED" = true ]; then
466
- DESIGN_REVIEW_CRITICAL=$(cat /tmp/design-review.json | jq '.critical_count')
467
- else
468
- DESIGN_REVIEW_CRITICAL=0
469
- fi
470
-
471
- # Critical問題がなければループ終了
472
- if [ "$CODE_REVIEW_CRITICAL" -eq 0 ] && [ "$DESIGN_REVIEW_CRITICAL" -eq 0 ]; then
473
- echo "✅ レビュー完了(Critical: 0)"
474
- break
475
- fi
476
-
477
- # 自動修正を試行
478
- echo "⚙️ レビュー指摘事項を自動修正中..."
479
-
480
- REVIEW_ITERATION=$((REVIEW_ITERATION + 1))
481
- done
482
-
483
- # 最大試行回数に達した場合
484
- if [ $REVIEW_ITERATION -eq $MAX_REVIEW_ITERATIONS ]; then
485
- echo "❌ レビュー修正ループが最大試行回数($MAX_REVIEW_ITERATIONS)に達しました"
486
- echo ""
487
- echo "次のアクション:"
488
- echo "A) 手動で修正を続ける"
489
- echo "B) 残りの問題を後回しにして続行"
490
- echo "C) 実装を中止"
491
-
492
- # ユーザー確認
493
- read -p "どの対応を希望しますか? (A/B/C): " ACTION
494
-
495
- if [ "$ACTION" = "C" ]; then
496
- echo "実装を中止します"
497
- exit 1
498
- fi
499
- fi
500
- ```
501
-
502
- ---
503
-
504
- ## Phase 4: 最終検証(Michi拡張)
505
-
506
- ### 目的
507
- 全品質基準を最終確認する。カバレッジ95%以上、Mutation Testing(オプション)を実施。
508
-
509
- ### Step 4.1: 品質チェック最終実行
510
-
511
- ```bash
512
- echo "=== Phase 4: 最終検証 ==="
513
-
514
- # 言語検出
515
- LANGUAGE="unknown"
516
- if [ -f "package.json" ]; then
517
- LANGUAGE="nodejs"
518
- elif [ -f "build.gradle" ]; then
519
- LANGUAGE="java"
520
- elif [ -f "pyproject.toml" ]; then
521
- LANGUAGE="python"
522
- elif [ -f "composer.json" ]; then
523
- LANGUAGE="php"
524
- fi
525
-
526
- echo "🔍 Detected language: $LANGUAGE"
527
-
528
- # 言語別品質チェック
529
- case "$LANGUAGE" in
530
- nodejs)
531
- echo "▶ Running Node.js quality checks..."
532
- npm run type-check
533
- if [ $? -ne 0 ]; then
534
- echo "❌ Type check failed"
535
- exit 1
536
- fi
537
-
538
- npm run lint
539
- if [ $? -ne 0 ]; then
540
- echo "❌ Lint failed"
541
- exit 1
542
- fi
543
-
544
- npm run test:coverage
545
- if [ $? -ne 0 ]; then
546
- echo "❌ Test failed"
547
- exit 1
548
- fi
549
-
550
- COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')
551
- ;;
552
-
553
- java)
554
- echo "▶ Running Java quality checks..."
555
- ./gradlew check
556
- if [ $? -ne 0 ]; then
557
- echo "❌ Gradle check failed"
558
- exit 1
559
- fi
560
-
561
- if [ -f "build/reports/jacoco/test/jacocoTestReport.xml" ]; then
562
- COVERAGE=$(grep -oP '<counter type="LINE"\s+missed="\K[0-9]+|covered="\K[0-9]+' build/reports/jacoco/test/jacocoTestReport.xml | \
563
- awk 'NR==1{m=$1} NR==2{c=$1} END {if(m+c>0) printf "%.1f", c*100/(m+c); else print 100}')
564
- else
565
- echo "⚠ JaCoCo report not found, skipping coverage check"
566
- COVERAGE=100
567
- fi
568
- ;;
569
-
570
- python)
571
- echo "▶ Running Python quality checks..."
572
- pytest --cov=. --cov-report=json --cov-fail-under=95
573
- if [ $? -ne 0 ]; then
574
- echo "❌ Pytest failed"
575
- exit 1
576
- fi
577
-
578
- COVERAGE=$(cat coverage.json | jq '.totals.percent_covered')
579
- ;;
580
-
581
- php)
582
- echo "▶ Running PHP quality checks..."
583
- ./vendor/bin/phpunit --coverage-clover=coverage/clover.xml
584
- if [ $? -ne 0 ]; then
585
- echo "❌ PHPUnit failed"
586
- exit 1
587
- fi
588
-
589
- if [ -f "coverage/clover.xml" ]; then
590
- TOTAL_STATEMENTS=$(grep -oP '<metrics.*?statements="\K[0-9]+' coverage/clover.xml | awk '{sum+=$1} END {print sum}')
591
- COVERED_STATEMENTS=$(grep -oP '<metrics.*?coveredstatements="\K[0-9]+' coverage/clover.xml | awk '{sum+=$1} END {print sum}')
592
- if [ -n "$TOTAL_STATEMENTS" ] && [ "$TOTAL_STATEMENTS" -gt 0 ]; then
593
- COVERAGE=$(echo "scale=1; $COVERED_STATEMENTS * 100 / $TOTAL_STATEMENTS" | bc)
594
- else
595
- COVERAGE=100
596
- fi
597
- else
598
- echo "⚠ Clover report not found, skipping coverage check"
599
- COVERAGE=100
600
- fi
601
- ;;
602
-
603
- *)
604
- echo "❌ Unsupported language: $LANGUAGE"
605
- exit 1
606
- ;;
607
- esac
608
-
609
- # カバレッジ判定(95%以上)
610
- if (( $(echo "$COVERAGE < 95" | bc -l) )); then
611
- echo "❌ Coverage failed: ${COVERAGE}% (required: 95%)"
612
- exit 1
613
- else
614
- echo "✅ Coverage passed: ${COVERAGE}%"
615
- fi
616
- ```
617
-
618
- ### Step 4.2: Mutation Testing(オプション)
619
-
620
- ```bash
621
- if [ "$MUTATION" = true ]; then
622
- echo "=== Mutation Testing ==="
623
-
624
- case "$LANGUAGE" in
625
- nodejs)
626
- echo "🔍 Node.js/TypeScript → Stryker"
627
- npx stryker run
628
- MUTATION_SCORE=$(cat reports/mutation/mutation.json | jq '.mutationScore')
629
- ;;
630
-
631
- java)
632
- echo "🔍 Java → PITest"
633
- ./gradlew pitest
634
- MUTATION_SCORE=$(cat build/reports/pitest/index.html | grep -oP 'mutation score: \K[0-9]+')
635
- ;;
636
-
637
- python)
638
- echo "🔍 Python → mutmut"
639
- mutmut run
640
- MUTATION_SCORE=$(mutmut show | grep -oP 'score: \K[0-9]+')
641
- ;;
642
-
643
- php)
644
- echo "🔍 PHP → Infection"
645
- ./vendor/bin/infection
646
- MUTATION_SCORE=$(cat infection.json | jq '.mutation_score')
647
- ;;
648
-
649
- *)
650
- echo "❌ Mutation Testing not supported for: $LANGUAGE"
651
- exit 1
652
- ;;
653
- esac
654
-
655
- # Mutation Score判定(80%以上)
656
- if (( $(echo "$MUTATION_SCORE < 80" | bc -l) )); then
657
- echo "❌ Mutation Testing failed: ${MUTATION_SCORE}% (required: 80%)"
658
- exit 1
659
- else
660
- echo "✅ Mutation Testing passed: ${MUTATION_SCORE}%"
661
- fi
662
- fi
663
- ```
664
-
665
- ### Step 4.3: 最終レポート出力
666
-
667
- ```bash
668
- echo ""
669
- echo "======================================"
670
- echo " /michi:spec-impl 実行結果"
671
- echo "======================================"
672
- echo ""
673
- echo "## サマリー"
674
- echo "- 機能名: $1"
675
- echo "- 実行タスク: ${COMPLETED_TASKS}/${TOTAL_TASKS} 完了"
676
- echo "- 最終ステータス: SUCCESS"
677
- echo ""
678
- echo "## 事前監査結果"
679
- echo "- OSS License: ${OSS_LICENSE_STATUS}"
680
- echo "- Version Audit: ${VERSION_AUDIT_STATUS}"
681
- echo "- Frontend検出: ${FRONTEND_DETECTED}"
682
- echo ""
683
- echo "## 品質チェック結果"
684
- echo "- Type Check: PASS"
685
- echo "- Lint: PASS"
686
- echo "- Test: PASS (Coverage: ${COVERAGE}%)"
687
- echo "- Code Review: PASS"
688
- echo "- Design Review: ${DESIGN_REVIEW_STATUS}"
689
- if [ "$MUTATION" = true ]; then
690
- echo "- Mutation Testing: PASS (Score: ${MUTATION_SCORE}%)"
691
- fi
692
- echo ""
693
- echo "======================================"
694
- ```
695
-
696
- ---
697
-
698
- ## Phase 4.4: PRサイズチェック(Michi拡張)
699
-
700
- ### 目的
701
- レビュアビリティを確保するため、PRサイズを監視し、500行を超えた場合にPR分割を提案する。
702
-
703
- ### Step 4.4.1: PRサイズ評価
704
-
705
- **重要**: このステップは品質チェック完了後、タスク完了マーク前に実行する。
706
-
707
- ```markdown
708
- Task tool:
709
- subagent_type: pr-size-monitor
710
- prompt: |
711
- 現在の変更量を確認し、PRサイズを評価してください。
712
-
713
- **機能名**: $1
714
-
715
- **閾値**: 500行(追加+削除、除外ファイル除く)
716
-
717
- **除外ファイル**:
718
- - ロックファイル: package-lock.json, yarn.lock, pnpm-lock.yaml,
719
- composer.lock, Gemfile.lock, poetry.lock, Cargo.lock, go.sum
720
- - 自動生成: dist/*, build/*, coverage/*, .next/*, *.min.js, *.min.css
721
-
722
- **実行手順**:
723
- 1. git diff --stat でベースブランチとの差分を取得
724
- 2. 除外ファイルを除いた行数を計算
725
- 3. 500行超過時:
726
- - 現在の変更量を報告
727
- - AskUserQuestionでPR作成を確認
728
- - 同意があれば自動でPR作成(commit, push, gh pr create)
729
- - 新しいブランチで残りの作業を継続
730
- 4. 500行未満: ✅ OK、Phase 4.5へ進行
731
- ```
732
-
733
- **サブエージェント呼び出しの流れ**:
734
-
735
- ```plaintext
736
- Phase 4.4 実行
737
-
738
- pr-size-monitor 起動
739
-
740
- 変更量計測(500行超過?)
741
- ├─ NO(500行未満): ✅ OK → Phase 4.5へ
742
- └─ YES(500行以上):
743
-
744
- AskUserQuestion(ユーザー確認)
745
- ├─ A) PR作成する → commit → push → gh pr create → 新ブランチ提案
746
- ├─ B) 作業続行 → 警告表示 → Phase 4.5へ
747
- └─ C) 分割戦略提案 → 分割案表示 → 再度ユーザー確認
748
- ```
749
-
750
- ---
751
-
752
- ## Phase 4.5: タスク完了マーク(Michi拡張)
753
-
754
- ### 目的
755
- 各タスク実装完了後、tasks.mdのチェックボックスを更新してタスクの進捗を記録する。
756
-
757
- ### Step 4.5.1: MARK COMPLETE - tasks.md更新
758
-
759
- ```bash
760
- # 品質チェックが成功したら、tasks.mdを更新
761
- echo "=== タスク完了をマーク ==="
762
-
763
- # tasks.mdのチェックボックスを更新
764
- # - [ ] タスク名 → - [x] タスク名
765
- TASK_FILE=".kiro/specs/$1/tasks.md"
766
-
767
- if [ -f "$TASK_FILE" ]; then
768
- # 現在のタスク番号に対応する行を更新
769
- # 例: "- [ ] 1.1 タスク説明" → "- [x] 1.1 タスク説明"
770
- sed -i '' "s/- \[ \] $TASK_NUMBER/- [x] $TASK_NUMBER/" "$TASK_FILE"
771
- echo "✅ tasks.md を更新しました: タスク $TASK_NUMBER を完了"
772
- else
773
- echo "⚠️ tasks.mdが見つかりません: $TASK_FILE"
774
- fi
775
- ```
776
-
777
- **重要**: タスクが完了したら、必ずtasks.mdのチェックボックスを更新する。
778
- - 未完了: `- [ ]`
779
- - 完了済: `- [x]`
780
-
781
- ---
782
-
783
- ## Phase 5: タスク完了後の処理(Michi拡張)
784
-
785
- ### 目的
786
- すべてのタスクが完了した場合、スペックをarchiveに移動する。
787
-
788
- ### Step 5.1: Archive確認とプロンプト
789
-
790
- ```bash
791
- echo ""
792
- echo "======================================"
793
- echo " タスク完了確認"
794
- echo "======================================"
795
- echo ""
796
- echo "すべてのタスクが完了しました。"
797
- echo ""
798
- echo "次のアクション:"
799
- echo "A) スペックをarchiveに移動する(推奨)"
800
- echo "B) 追加のタスクを実行する"
801
- echo "C) 何もしない"
802
- echo ""
803
-
804
- # ユーザー確認
805
- # 注: AskUserQuestionツールが利用可能な場合は、そちらを優先使用すること
806
- read -p "どの対応を希望しますか? (A/B/C): " ARCHIVE_ACTION
807
-
808
- if [ "$ARCHIVE_ACTION" = "A" ]; then
809
- echo "🗃️ スペックをarchiveに移動します..."
810
- npx @sk8metal/michi-cli spec:archive $1
811
-
812
- if [ $? -eq 0 ]; then
813
- echo "✅ スペックをarchiveに移動しました"
814
- echo ""
815
- echo "Archive先: .kiro/specs/.archive/$1/"
816
- echo "- spec.json"
817
- echo "- requirements.md"
818
- echo "- design.md"
819
- echo "- tasks.md"
820
- echo "- validation-reports/"
821
- else
822
- echo "❌ スペックのarchive移動に失敗しました"
823
- echo "手動で実行する場合: npx @sk8metal/michi-cli spec:archive $1"
824
- fi
825
- elif [ "$ARCHIVE_ACTION" = "B" ]; then
826
- echo "✅ 追加のタスクを実行できます"
827
- echo ""
828
- echo "次のコマンドを実行してください:"
829
- echo "/michi:spec-impl $1 [task-numbers]"
830
- else
831
- echo "✅ スペックはそのままにしておきます"
832
- echo ""
833
- echo "後でarchiveする場合: npx @sk8metal/michi-cli spec:archive $1"
834
- fi
835
- ```
836
-
837
- ### Step 5.2: Archive後の推奨アクション(参考情報)
838
-
839
- ```markdown
840
- スペックをarchiveに移動した後の推奨アクション:
841
-
842
- 1. **ドキュメント更新**
843
- - CHANGELOG.md に変更内容を記録
844
- - README.md を必要に応じて更新
845
-
846
- 2. **PR作成**
847
- - 実装ブランチをmainにマージするPRを作成
848
- - Phase Aテスト(unit, lint, build)を実行
849
-
850
- 3. **リリース準備** (Phase B)
851
- - 統合テスト、E2Eテスト、パフォーマンステスト、セキュリティテストを実行
852
- - `/michi:confluence-sync` でリリース手順書を作成
853
-
854
- 4. **次の機能開発**
855
- - `/kiro:spec-init "description"` で新しいスペックを作成
856
- ```
857
-
858
- ---
859
-
860
- ## 安全性ルール
861
-
862
- ### 必須確認ケース
863
-
864
- 1. **Phase 1でCritical検出時**: 必ずユーザー確認、代替案提示
865
- 2. **Phase 2で自動修正失敗時**: 最大5回試行後、ユーザー確認
866
- 3. **Phase 3でレビュー失敗時**: 最大5回修正後、ユーザー確認
867
- 4. **Phase 4でカバレッジ不足時**: 即時停止、ユーザー確認
868
- 5. **Phase 5でArchive実行時**: 必ずユーザー確認、明示的な承認
869
-
870
- ### 禁止事項
871
-
872
- - ❌ ユーザー確認なしでのパッケージ変更
873
- - ❌ ユーザー確認なしでのバージョン変更
874
- - ❌ テストの仕様変更(実装に合わせてテストを変更しない)
875
- - ❌ Critical問題を無視して処理を続行
876
-
877
- ---
878
-
879
- ## 参考資料
880
-
881
- ### Web調査結果(ベストプラクティス)
882
- - [TDD Best Practices 2025](https://www.nopaccelerate.com/test-driven-development-guide-2025/) - AI活用TDD
883
- - [Parallel Testing Guide](https://www.accelq.com/blog/parallel-testing/) - 並行実行のベストプラクティス
884
- - [AI Agent Orchestration](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns) - 並行実行パターン
885
-
886
- ### 関連コマンド
887
- - `/kiro:spec-impl` - ベースコマンド(TDD実装)
888
- - `/michi:spec-design` - 設計書生成(Phase 0.3-0.4ガイダンス付き)
889
- - `/michi:validate-design` - 設計レビュー(テスト計画確認付き)