@einja/dev-cli 0.1.29 → 0.1.31

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 (51) hide show
  1. package/README.md +1 -0
  2. package/dist/commands/task-loop/index.d.ts.map +1 -1
  3. package/dist/commands/task-loop/index.js +128 -10
  4. package/dist/commands/task-loop/index.js.map +1 -1
  5. package/dist/commands/task-loop/lib/task-state-manager.d.ts +33 -2
  6. package/dist/commands/task-loop/lib/task-state-manager.d.ts.map +1 -1
  7. package/dist/commands/task-loop/lib/task-state-manager.js +74 -3
  8. package/dist/commands/task-loop/lib/task-state-manager.js.map +1 -1
  9. package/dist/commands/task-loop/lib/task-state-manager.test.js +252 -1
  10. package/dist/commands/task-loop/lib/task-state-manager.test.js.map +1 -1
  11. package/dist/commands/task-loop/lib/types.d.ts +18 -13
  12. package/dist/commands/task-loop/lib/types.d.ts.map +1 -1
  13. package/dist/commands/task-loop/lib/vibe-kanban-client.d.ts +24 -170
  14. package/dist/commands/task-loop/lib/vibe-kanban-client.d.ts.map +1 -1
  15. package/dist/commands/task-loop/lib/vibe-kanban-client.js +65 -244
  16. package/dist/commands/task-loop/lib/vibe-kanban-client.js.map +1 -1
  17. package/dist/commands/task-loop/lib/vibe-kanban-client.test.js +185 -127
  18. package/dist/commands/task-loop/lib/vibe-kanban-client.test.js.map +1 -1
  19. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.d.ts +47 -0
  20. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.d.ts.map +1 -1
  21. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +116 -0
  22. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
  23. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.d.ts +2 -0
  24. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.d.ts.map +1 -0
  25. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.js +293 -0
  26. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.js.map +1 -0
  27. package/package.json +1 -1
  28. package/presets/default/.claude/agents/einja/codex-agent.md +117 -0
  29. package/presets/default/.claude/agents/einja/specs/spec-requirements-generator.md +15 -6
  30. package/presets/default/.claude/hooks/einja/playwright-resize.sh +12 -2
  31. package/presets/default/.claude/settings.json +15 -0
  32. package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +4 -0
  33. package/presets/default/.claude/skills/einja-output-format/SKILL.md +21 -0
  34. package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +1 -1
  35. package/scaffolds/.mcp.json +6 -9
  36. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +4 -4
  37. package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +131 -100
  38. package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +4 -3
  39. package/scaffolds/instructions/task-vibe-kanban-loop.md +38 -17
  40. package/scaffolds/instructions/vercel-cli-reference.md +451 -0
  41. package/scaffolds/steering/README.md +1 -0
  42. package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +13 -1
  43. package/scaffolds/steering/development/backend-architecture.md +2 -1
  44. package/scaffolds/steering/development/database-guidelines.md +239 -0
  45. package/scaffolds/steering/development/frontend-development.md +80 -5
  46. package/scaffolds/steering/development/review-guidelines.md +5 -0
  47. package/scaffolds/steering/development-workflow.md +15 -1
  48. package/scaffolds/steering/infrastructure/deployment.md +27 -21
  49. package/scaffolds/steering/task-management.md +21 -0
  50. package/scaffolds/templates/README.md +11 -7
  51. package/scaffolds/templates/requirements.md.template +44 -32
@@ -12,7 +12,7 @@
12
12
  ユーザーがメールアドレスを入力してマジックリンクをリクエストし、メール内のリンクをクリックしてログイン完了までの一連のフローを検証する。
13
13
 
14
14
  ### 関連
15
- - **受け入れ条件**: AC1.1, AC1.2, AC1.3, AC1.4
15
+ - **受け入れ条件**: AC1.1, AC1.2, AC1.3, AC1.4, AC1.5, AC1.6, AC1.7, AC1.8, AC1.9
16
16
  - **関連タスク**: 1.1.1, 1.1.2, 1.1.3, 2.1.1
17
17
 
18
18
  ### 実施タイミング
@@ -44,7 +44,7 @@
44
44
  認証済みユーザーが自身のプロフィールを取得し、更新できることを検証する。
45
45
 
46
46
  ### 関連
47
- - **受け入れ条件**: AC2.1, AC2.2
47
+ - **受け入れ条件**: AC2.1, AC2.2, AC2.3
48
48
  - **関連タスク**: 1.2.1, 1.2.2
49
49
 
50
50
  ### 実施タイミング
@@ -72,7 +72,7 @@
72
72
  各種エラーケース(無効なメールアドレス、期限切れトークン、使用済みトークン等)が適切にハンドリングされることを検証する。
73
73
 
74
74
  ### 関連
75
- - **受け入れ条件**: AC1.2, AC1.3
75
+ - **受け入れ条件**: AC1.2, AC1.3, AC1.5, AC1.6
76
76
  - **関連タスク**: 1.1.2, 1.1.3, 2.1.1
77
77
 
78
78
  ### 実施タイミング
@@ -102,7 +102,7 @@
102
102
  新しいデバイスからログインした際にセキュリティ通知が送信され、セッション無効化ができることを検証する。
103
103
 
104
104
  ### 関連
105
- - **受け入れ条件**: AC3.1, AC3.2(Story 3に対応)
105
+ - **受け入れ条件**: AC3.1, AC3.2, AC3.3, AC3.4, AC3.5, AC3.6
106
106
  - **関連タスク**: 3.1.1, 3.1.2, 3.1.3
107
107
 
108
108
  ### 実施タイミング
@@ -252,6 +252,8 @@ graph TD
252
252
  ## ユーザーストーリー
253
253
 
254
254
  ### Story 1: マジックリンクのリクエスト
255
+ ユーザーがメールアドレスを入力するだけで、パスワード不要のログインリンクをリクエストできる。
256
+
255
257
  **As a** ユーザー
256
258
  **I want to** メールアドレスを入力してログインリンクを受け取りたい
257
259
  **So that** パスワードを覚える必要なくログインできる
@@ -259,44 +261,53 @@ graph TD
259
261
  #### 受け入れ基準
260
262
 
261
263
  ##### 機能要件
262
- - [ ] Given: ログインページにアクセスした
263
- When: 有効なメールアドレスを入力して送信
264
- Then: 成功メッセージが表示され、メールが送信される
265
- [検証レベル: Integration]
266
- - [ ] Given: ログインページにアクセスした
267
- When: 無効なメールアドレスを入力
268
- Then: エラーメッセージが表示される
269
- [検証レベル: Unit]
270
- - [ ] Given: マジックリンクをリクエスト済み
271
- When: 1分以内に再度リクエスト
272
- Then: レート制限エラーが表示される
273
- [検証レベル: Integration]
264
+ - [ ] **AC1.1**: 有効なメールアドレスで送信すると、成功メッセージが表示されメールが送信される
265
+ - Given: ログインページにアクセスした
266
+ - When: 有効なメールアドレスを入力して送信
267
+ - Then: 成功メッセージが表示され、メールが送信される
268
+ - 検証レベル: Integration
269
+ - [ ] **AC1.2**: 無効なメールアドレスを入力すると、エラーメッセージが表示される
270
+ - Given: ログインページにアクセスした
271
+ - When: 無効なメールアドレスを入力
272
+ - Then: エラーメッセージが表示される
273
+ - 検証レベル: Unit
274
+ - [ ] **AC1.3**: 1分以内の再リクエストでレート制限エラーが表示される
275
+ - Given: マジックリンクをリクエスト済み
276
+ - When: 1分以内に再度リクエスト
277
+ - Then: レート制限エラーが表示される
278
+ - 検証レベル: Integration
274
279
 
275
280
  ##### UIインタラクション要件
276
- - [ ] Given: ログイン画面を表示
277
- When: メールアドレスフィールドにフォーカス
278
- Then: フィールドが視覚的にフォーカス状態を示す(枠線の色変化など)
279
- [検証レベル: Browser]
280
- - [ ] Given: メールアドレスフィールドに入力
281
- When: 空欄のまま送信ボタンをクリック
282
- Then: フィールド下に「メールアドレスを入力してください」とエラー表示され、フィールドが赤枠になる
283
- [検証レベル: Browser]
284
- - [ ] Given: メールアドレスフィールドに入力
285
- When: 不正な形式(例: "test@")で送信ボタンをクリック
286
- Then: フィールド下に「有効なメールアドレスを入力してください」とエラー表示される
287
- [検証レベル: Browser]
288
- - [ ] Given: 有効なメールアドレスを入力
289
- When: 送信ボタンをクリック
290
- Then: ボタンが無効化され、ローディングスピナーが表示される
291
- [検証レベル: Browser]
292
- - [ ] Given: メール送信API実行中
293
- When: 3秒以上経過
294
- Then: 「メールを送信しています...」のメッセージが表示される
295
- [検証レベル: Browser]
296
- - [ ] Given: メール送信成功
297
- When: API応答受信
298
- Then: メール送信確認画面に遷移し、送信先アドレスが表示される
299
- [検証レベル: Browser]
281
+ - [ ] **AC1.4**: メールアドレスフィールドにフォーカスすると、視覚的にフォーカス状態を示す
282
+ - Given: ログイン画面を表示
283
+ - When: メールアドレスフィールドにフォーカス
284
+ - Then: フィールドが視覚的にフォーカス状態を示す(枠線の色変化など)
285
+ - 検証レベル: Browser
286
+ - [ ] **AC1.5**: 空欄のまま送信すると、必須エラーメッセージが表示される
287
+ - Given: メールアドレスフィールドに入力
288
+ - When: 空欄のまま送信ボタンをクリック
289
+ - Then: フィールド下に「メールアドレスを入力してください」とエラー表示され、フィールドが赤枠になる
290
+ - 検証レベル: Browser
291
+ - [ ] **AC1.6**: 不正な形式で送信すると、形式エラーメッセージが表示される
292
+ - Given: メールアドレスフィールドに入力
293
+ - When: 不正な形式(例: "test@")で送信ボタンをクリック
294
+ - Then: フィールド下に「有効なメールアドレスを入力してください」とエラー表示される
295
+ - 検証レベル: Browser
296
+ - [ ] **AC1.7**: 送信ボタンクリック後、ボタンが無効化されローディングスピナーが表示される
297
+ - Given: 有効なメールアドレスを入力
298
+ - When: 送信ボタンをクリック
299
+ - Then: ボタンが無効化され、ローディングスピナーが表示される
300
+ - 検証レベル: Browser
301
+ - [ ] **AC1.8**: API実行が3秒以上かかると、進捗メッセージが表示される
302
+ - Given: メール送信API実行中
303
+ - When: 3秒以上経過
304
+ - Then: 「メールを送信しています...」のメッセージが表示される
305
+ - 検証レベル: Browser
306
+ - [ ] **AC1.9**: メール送信成功後、確認画面に遷移し送信先アドレスが表示される
307
+ - Given: メール送信成功
308
+ - When: API応答受信
309
+ - Then: メール送信確認画面に遷移し、送信先アドレスが表示される
310
+ - 検証レベル: Browser
300
311
 
301
312
  #### 実装の優先順位
302
313
  P0 (必須)
@@ -304,6 +315,8 @@ P0 (必須)
304
315
  ---
305
316
 
306
317
  ### Story 2: マジックリンクによる認証
318
+ メール内のマジックリンクをクリックするだけで、パスワード不要の認証が完了する。
319
+
307
320
  **As a** ユーザー
308
321
  **I want to** メール内のリンクをクリックして認証を完了したい
309
322
  **So that** 素早く安全にログインできる
@@ -311,48 +324,58 @@ P0 (必須)
311
324
  #### 受け入れ基準
312
325
 
313
326
  ##### 機能要件
314
- - [ ] Given: 有効なマジックリンクを受信した
315
- When: リンクをクリック
316
- Then: 自動的にログインされ、ダッシュボードへリダイレクト
317
- [検証レベル: Integration]
318
- - [ ] Given: 期限切れのリンクを受信した
319
- When: リンクをクリック
320
- Then: 期限切れエラーが表示され、再送信オプションが提示される
321
- [検証レベル: Integration]
322
- - [ ] Given: 既に使用済みのリンクを受信した
323
- When: 再度リンクをクリック
324
- Then: 使用済みエラーが表示される
325
- [検証レベル: Integration]
327
+ - [ ] **AC2.1**: 有効なマジックリンクをクリックすると、自動ログインしダッシュボードへリダイレクトする
328
+ - Given: 有効なマジックリンクを受信した
329
+ - When: リンクをクリック
330
+ - Then: 自動的にログインされ、ダッシュボードへリダイレクト
331
+ - 検証レベル: Integration
332
+ - [ ] **AC2.2**: 期限切れのリンクをクリックすると、期限切れエラーと再送信オプションが表示される
333
+ - Given: 期限切れのリンクを受信した
334
+ - When: リンクをクリック
335
+ - Then: 期限切れエラーが表示され、再送信オプションが提示される
336
+ - 検証レベル: Integration
337
+ - [ ] **AC2.3**: 使用済みのリンクを再クリックすると、使用済みエラーが表示される
338
+ - Given: 既に使用済みのリンクを受信した
339
+ - When: 再度リンクをクリック
340
+ - Then: 使用済みエラーが表示される
341
+ - 検証レベル: Integration
326
342
 
327
343
  ##### UIインタラクション要件
328
- - [ ] Given: マジックリンクをクリック
329
- When: トークン検証画面に遷移
330
- Then: ローディングスピナーと「認証しています...」のメッセージが表示される
331
- [検証レベル: Browser]
332
- - [ ] Given: トークン検証実行中
333
- When: 検証処理が進行中
334
- Then: ユーザー操作(戻る、リロードなど)を防ぐ仕組みが作動する
335
- [検証レベル: Browser]
336
- - [ ] Given: トークン検証成功
337
- When: 認証完了
338
- Then: 「ログインしています...」のメッセージが表示され、3秒以内にダッシュボードへリダイレクト
339
- [検証レベル: Browser]
340
- - [ ] Given: トークンが期限切れ
341
- When: 検証失敗
342
- Then: エラー画面に遷移し、「リンクの有効期限が切れています」とメッセージ表示、「新しいリンクを送信」ボタンを表示
343
- [検証レベル: Browser]
344
- - [ ] Given: トークンが使用済み
345
- When: 検証失敗
346
- Then: エラー画面に遷移し、「このリンクは既に使用されています」とメッセージ表示、「新しいリンクを送信」ボタンを表示
347
- [検証レベル: Browser]
348
- - [ ] Given: トークンが無効
349
- When: 検証失敗
350
- Then: エラー画面に遷移し、「無効なリンクです」とメッセージ表示、「ログインページに戻る」ボタンを表示
351
- [検証レベル: Browser]
352
- - [ ] Given: エラー画面で「新しいリンクを送信」ボタンをクリック
353
- When: ボタン押下
354
- Then: ログイン画面に遷移し、前回使用したメールアドレスがプリフィルされる
355
- [検証レベル: Browser]
344
+ - [ ] **AC2.4**: マジックリンククリック後、検証画面でローディングスピナーが表示される
345
+ - Given: マジックリンクをクリック
346
+ - When: トークン検証画面に遷移
347
+ - Then: ローディングスピナーと「認証しています...」のメッセージが表示される
348
+ - 検証レベル: Browser
349
+ - [ ] **AC2.5**: トークン検証中はユーザー操作が防止される
350
+ - Given: トークン検証実行中
351
+ - When: 検証処理が進行中
352
+ - Then: ユーザー操作(戻る、リロードなど)を防ぐ仕組みが作動する
353
+ - 検証レベル: Browser
354
+ - [ ] **AC2.6**: トークン検証成功後、3秒以内にダッシュボードへリダイレクトする
355
+ - Given: トークン検証成功
356
+ - When: 認証完了
357
+ - Then: 「ログインしています...」のメッセージが表示され、3秒以内にダッシュボードへリダイレクト
358
+ - 検証レベル: Browser
359
+ - [ ] **AC2.7**: 期限切れトークンの場合、エラー画面で再送信ボタンが表示される
360
+ - Given: トークンが期限切れ
361
+ - When: 検証失敗
362
+ - Then: エラー画面に遷移し、「リンクの有効期限が切れています」とメッセージ表示、「新しいリンクを送信」ボタンを表示
363
+ - 検証レベル: Browser
364
+ - [ ] **AC2.8**: 使用済みトークンの場合、エラー画面で再送信ボタンが表示される
365
+ - Given: トークンが使用済み
366
+ - When: 検証失敗
367
+ - Then: エラー画面に遷移し、「このリンクは既に使用されています」とメッセージ表示、「新しいリンクを送信」ボタンを表示
368
+ - 検証レベル: Browser
369
+ - [ ] **AC2.9**: 無効なトークンの場合、エラー画面でログインページへの導線が表示される
370
+ - Given: トークンが無効
371
+ - When: 検証失敗
372
+ - Then: エラー画面に遷移し、「無効なリンクです」とメッセージ表示、「ログインページに戻る」ボタンを表示
373
+ - 検証レベル: Browser
374
+ - [ ] **AC2.10**: エラー画面から新しいリンクを送信すると、前回のメールアドレスがプリフィルされる
375
+ - Given: エラー画面で「新しいリンクを送信」ボタンをクリック
376
+ - When: ボタン押下
377
+ - Then: ログイン画面に遷移し、前回使用したメールアドレスがプリフィルされる
378
+ - 検証レベル: Browser
356
379
 
357
380
  #### 実装の優先順位
358
381
  P0 (必須)
@@ -360,6 +383,8 @@ P0 (必須)
360
383
  ---
361
384
 
362
385
  ### Story 3: セキュリティ通知
386
+ 新しいデバイスからのログイン時にセキュリティ通知を受け取り、不正アクセスを検知できる。
387
+
363
388
  **As a** ユーザー
364
389
  **I want to** 新しいデバイスからのログインを通知してもらいたい
365
390
  **So that** 不正アクセスを検知できる
@@ -367,32 +392,38 @@ P0 (必須)
367
392
  #### 受け入れ基準
368
393
 
369
394
  ##### 機能要件
370
- - [ ] Given: 新しいデバイスからマジックリンクでログイン
371
- When: 認証が成功
372
- Then: セキュリティ通知メールが送信される
373
- [検証レベル: Integration]
374
- - [ ] Given: セキュリティ通知を受信
375
- When: 身に覚えのないログイン
376
- Then: ワンクリックでセッションを無効化できる
377
- [検証レベル: Integration]
395
+ - [ ] **AC3.1**: 新しいデバイスからログイン成功時、セキュリティ通知メールが送信される
396
+ - Given: 新しいデバイスからマジックリンクでログイン
397
+ - When: 認証が成功
398
+ - Then: セキュリティ通知メールが送信される
399
+ - 検証レベル: Integration
400
+ - [ ] **AC3.2**: セキュリティ通知からワンクリックでセッションを無効化できる
401
+ - Given: セキュリティ通知を受信
402
+ - When: 身に覚えのないログイン
403
+ - Then: ワンクリックでセッションを無効化できる
404
+ - 検証レベル: Integration
378
405
 
379
406
  ##### UIインタラクション要件
380
- - [ ] Given: 新規デバイスからログイン成功
381
- When: ダッシュボード表示
382
- Then: 「新しいデバイスからのログインを検出しました」の通知バナーが表示される
383
- [検証レベル: Browser]
384
- - [ ] Given: セキュリティ通知メール受信
385
- When: メール内の「セッションを無効化」リンクをクリック
386
- Then: 確認画面が表示され、「このセッションを無効化しますか?」のメッセージと「無効化する」「キャンセル」ボタンが表示される
387
- [検証レベル: Browser]
388
- - [ ] Given: セッション無効化確認画面
389
- When: 「無効化する」ボタンをクリック
390
- Then: セッションが無効化され、「セッションを無効化しました」の成功メッセージが表示される
391
- [検証レベル: Browser]
392
- - [ ] Given: セッション無効化確認画面
393
- When: 「キャンセル」ボタンをクリック
394
- Then: 元の画面に戻り、セッションは維持される
395
- [検証レベル: Browser]
407
+ - [ ] **AC3.3**: 新規デバイスログイン後、ダッシュボードに通知バナーが表示される
408
+ - Given: 新規デバイスからログイン成功
409
+ - When: ダッシュボード表示
410
+ - Then: 「新しいデバイスからのログインを検出しました」の通知バナーが表示される
411
+ - 検証レベル: Browser
412
+ - [ ] **AC3.4**: セキュリティ通知メールからセッション無効化の確認画面が表示される
413
+ - Given: セキュリティ通知メール受信
414
+ - When: メール内の「セッションを無効化」リンクをクリック
415
+ - Then: 確認画面が表示され、「このセッションを無効化しますか?」のメッセージと「無効化する」「キャンセル」ボタンが表示される
416
+ - 検証レベル: Browser
417
+ - [ ] **AC3.5**: 確認画面で「無効化する」をクリックすると、セッションが無効化される
418
+ - Given: セッション無効化確認画面
419
+ - When: 「無効化する」ボタンをクリック
420
+ - Then: セッションが無効化され、「セッションを無効化しました」の成功メッセージが表示される
421
+ - 検証レベル: Browser
422
+ - [ ] **AC3.6**: 確認画面で「キャンセル」をクリックすると、セッションは維持される
423
+ - Given: セッション無効化確認画面
424
+ - When: 「キャンセル」ボタンをクリック
425
+ - Then: 元の画面に戻り、セッションは維持される
426
+ - 検証レベル: Browser
396
427
 
397
428
  #### 実装の優先順位
398
429
  P1 (重要)
@@ -8,8 +8,9 @@
8
8
 
9
9
  本ドキュメントは、サンプル機能の実装タスク一覧です。以下のユーザーストーリーを実装します:
10
10
 
11
- - **Story 1**: ユーザー認証機能の実装(AC1.1-AC1.4
12
- - **Story 2**: プロフィール管理機能の実装(AC2.1-AC2.3
11
+ - **Story 1**: マジックリンクのリクエスト(AC1.1-AC1.9
12
+ - **Story 2**: マジックリンクによる認証(AC2.1-AC2.10
13
+ - **Story 3**: セキュリティ通知(AC3.1-AC3.6)
13
14
 
14
15
  **タスク階層構造:**
15
16
  - Phase(フェーズ): 1, 2...(単一の数字)
@@ -110,7 +111,7 @@
110
111
  - デプロイ可能な状態であることを確認
111
112
  - **要件**: Story 1, Story 2
112
113
  - **依存関係**: 1.1.3, 1.2.2
113
- - **完了条件**: フェーズ1の全タスクグループが完了し、受け入れ基準**AC1.1-AC1.3、AC2.1-AC2.2**を満たすこと。認証機能・プロフィール管理機能が正常動作し、全E2Eテストが成功、Biomeエラー0件を維持していること
114
+ - **完了条件**: フェーズ1の全タスクグループが完了し、受け入れ基準**AC1.1-AC1.3、AC2.1-AC2.3**を満たすこと。認証機能・プロフィール管理機能が正常動作し、全E2Eテストが成功、Biomeエラー0件を維持していること
114
115
  - **対応設計**: design.md 全セクション
115
116
  - **シナリオテスト**: シナリオ1 全Step(リグレッション確認)
116
117
 
@@ -7,6 +7,8 @@ GitHub Issue からタスクを自動選定し、Vibe-Kanban に登録して連
7
7
 
8
8
  **⚠️ 重要**: 着手可能なタスクを全て並列で Doing に移し、Done 状態の変化を監視して次のタスクを開始するループ処理。
9
9
 
10
+ **親Issue/サブIssue 構造**: Phase ごとに Vibe-Kanban 上で **親Issue** を作成し、着手可能なタスクグループは親Issueの配下に **サブIssue** として登録します。Phase内の全サブIssueが完了すると、PR作成・マージを経て親Issueが自動でDoneになります。
11
+
10
12
  ---
11
13
 
12
14
  ## 使用方法
@@ -166,7 +168,7 @@ PR をマージすると:
166
168
 
167
169
  ```
168
170
  ┌─────────────────────────────────────────────────────────────┐
169
- │ PR マージ
171
+ │ PR マージ(サブIssue分)
170
172
  │ ↓ │
171
173
  │ Vibe-Kanban: タスク → Done(自動) │
172
174
  │ ↓ │
@@ -174,8 +176,10 @@ PR をマージすると:
174
176
  │ ↓ │
175
177
  │ GitHub Issue: チェックボックス更新(自動) │
176
178
  │ ↓ │
177
- │ Phase 全タスク完了?
178
- │ ├─ Yes → Phase ブランチを Issue ブランチにマージ
179
+ │ Phase 全タスク(サブIssue)完了?
180
+ │ ├─ Yes → Issue用Workspace作成
181
+ │ │ → PR作成・マージ(Phase → Issue ブランチ) │
182
+ │ │ → 親Issue 自動Done(タイムアウト2分でフォールバック)│
179
183
  │ └─ No → スキップ │
180
184
  │ ↓ │
181
185
  │ 次のタスクが自動開始 │
@@ -245,9 +249,10 @@ graph TD
245
249
  T1[Issue取得・解析]
246
250
  T2[ブランチ作成]
247
251
  T3[Vibe-Kanban 接続]
248
- T4[タスク作成・開始指示]
252
+ T3a[Phase毎に親Issue作成]
253
+ T4[サブIssue作成・開始指示]
249
254
  T5[15秒ポーリング]
250
- T6{Done検知?}
255
+ T6{Done検知?<br/>※親Issue除外}
251
256
  T7[GitHub Issue<br/>チェックボックス更新]
252
257
  T8[次のタスク開始指示]
253
258
  T9{全完了?}
@@ -276,7 +281,8 @@ graph TD
276
281
  U1 --> T1
277
282
  T1 --> T2
278
283
  T2 --> T3
279
- T3 --> T4
284
+ T3 --> T3a
285
+ T3a --> T4
280
286
  T4 --> V1
281
287
  V1 --> V2
282
288
  V2 --> C1
@@ -331,10 +337,12 @@ sequenceDiagram
331
337
  Script->>GitHub: Issue 取得・解析
332
338
  Script->>Script: ブランチ作成(issue/123, issue/123-phase1...)
333
339
  Script->>Vibe: MCP 接続
340
+ Script->>Script: REST API ヘルスチェック(probeCapability)
341
+ Script->>Vibe: Phase毎に親Issue作成(MCP create_issue)
334
342
 
335
- Note over Script: 【タスク開始】
343
+ Note over Script: 【サブIssue開始】
336
344
  Script->>Script: 着手可能タスク選定
337
- Script->>Vibe: タスク作成
345
+ Script->>Vibe: サブIssue作成(MCP create_issue + REST PATCH parent_issue_id)
338
346
  Script->>Vibe: start_task_attempt(実行開始指示)
339
347
  Vibe->>Claude: Claude Code 起動
340
348
 
@@ -357,11 +365,16 @@ sequenceDiagram
357
365
 
358
366
  Note over Script: 【ポーリング検知】
359
367
  loop 15秒ごと
360
- Script->>Vibe: タスク状態取得
361
- alt Done 増加検知
368
+ Script->>Vibe: タスク状態取得(親Issue除外)
369
+ alt Done 増加検知(サブIssue)
362
370
  Script->>GitHub: Issue チェックボックス更新
371
+ alt Phase内全サブIssue完了
372
+ Script->>Vibe: 親Issue用Workspace作成
373
+ Script->>GitHub: PR作成・マージ(Phase→Issue)
374
+ Note over Vibe: PRマージ検知 → 親Issue自動Done<br/>(タイムアウト2分でフォールバック)
375
+ end
363
376
  Script->>Script: 新たに着手可能なタスク選定
364
- Script->>Vibe: 次のタスク作成・開始
377
+ Script->>Vibe: 次のサブIssue作成・開始
365
378
  Vibe->>Claude: Claude Code 起動(次タスク)
366
379
  end
367
380
  end
@@ -378,7 +391,8 @@ sequenceDiagram
378
391
  | 開始 | `pnpm task:loop` 実行 | 👤 ユーザー |
379
392
  | 初期化 | Issue 取得、ブランチ作成 | 🔄 task:loop |
380
393
  | 初期化 | Vibe-Kanban 接続 | 🔄 task:loop |
381
- | タスク開始 | タスク作成・開始指示 | 🔄 task:loop |
394
+ | Phase初期化 | Phase毎に親Issue作成 | 🔄 task:loop |
395
+ | タスク開始 | サブIssue作成・開始指示(parent_issue_id設定) | 🔄 task:loop |
382
396
  | タスク開始 | Claude Code 起動 | 📋 Vibe-Kanban |
383
397
  | 実装 | コード実装、テスト、コミット | 🤖 Claude Code |
384
398
  | 実装 | 作業完了報告 | 🤖 Claude Code |
@@ -403,19 +417,26 @@ sequenceDiagram
403
417
  - Phase ブランチ作成: `issue/{issue_number}-phase{N}`
404
418
  - Vibe-Kanban MCP 接続(以降使い回し)
405
419
  - プロジェクト ID 取得
420
+ - REST API ヘルスチェック(probeCapability)
421
+ - **Phase ごとに親Issue作成**: タイトル形式 `[Issue{N} Phase{M}] {Phase名}`
406
422
 
407
- ### 2. 初期タスク開始
423
+ ### 2. 初期サブIssue開始
408
424
 
409
425
  - 依存関係を考慮して着手可能なタスクグループを全て選定
410
- - Vibe-Kanban にタスク作成
426
+ - Vibe-Kanban に**サブIssueとして作成**(MCP create_issue + REST PATCH で parent_issue_id 設定)
427
+ - PATCH 失敗時はリトライ3回 → 全失敗時は MCP delete_issue で削除して再スロー
411
428
  - `start_task_attempt` で実行開始
412
429
 
413
430
  ### 3. メインループ(15秒ポーリング)
414
431
 
415
- - Vibe-Kanban のタスク状態を取得
432
+ - Vibe-Kanban のタスク状態を取得(**親IssueをIDベースで除外**してサブIssueのみ対象)
416
433
  - Done 増加を検知した場合:
417
434
  - GitHub Issue のチェックボックスを `- [x]` に更新
418
- - **Phase 内の全タスクが完了していれば、Phase ブランチを Issue ブランチに自動マージ**
435
+ - **Phase 内の全サブIssueが完了していれば**:
436
+ 1. 親Issue用Workspace作成(target = issue/N)
437
+ 2. PR作成・自動マージ(Phase ブランチ → Issue ブランチ)
438
+ 3. Vibe-KanbanがPRマージ検知 → 親Issue自動Done
439
+ 4. タイムアウト(2分)時は手動Done更新(フォールバック)
419
440
  - 新たに着手可能になったタスクを開始
420
441
  - 全タスク完了で終了
421
442
 
@@ -468,7 +489,7 @@ packages/cli/src/commands/task-loop/
468
489
  ├── branch-manager.ts # Git ブランチ操作
469
490
  ├── conflict-handler.ts # コンフリクト処理
470
491
  ├── vibe-kanban-client.ts # MCP経由Vibe-Kanban操作
471
- ├── vibe-kanban-rest-client.ts # REST API クライアント
492
+ ├── vibe-kanban-rest-client.ts # REST API クライアント(親子関係設定、ヘルスチェック)
472
493
  ├── issue-parser.ts # Issue Markdownパーサー
473
494
  ├── dependency-resolver.ts # 依存関係解析
474
495
  ├── project-selector.ts # プロジェクト選択