@einja/dev-cli 0.1.30 → 0.1.32
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/README.md +1 -0
- package/dist/commands/task-loop/index.d.ts.map +1 -1
- package/dist/commands/task-loop/index.js +149 -16
- package/dist/commands/task-loop/index.js.map +1 -1
- package/dist/commands/task-loop/lib/task-state-manager.d.ts +33 -2
- package/dist/commands/task-loop/lib/task-state-manager.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/task-state-manager.js +74 -3
- package/dist/commands/task-loop/lib/task-state-manager.js.map +1 -1
- package/dist/commands/task-loop/lib/task-state-manager.test.js +252 -1
- package/dist/commands/task-loop/lib/task-state-manager.test.js.map +1 -1
- package/dist/commands/task-loop/lib/types.d.ts +17 -0
- package/dist/commands/task-loop/lib/types.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-client.d.ts +25 -0
- package/dist/commands/task-loop/lib/vibe-kanban-client.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-client.js +63 -0
- package/dist/commands/task-loop/lib/vibe-kanban-client.js.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-client.test.js +184 -0
- package/dist/commands/task-loop/lib/vibe-kanban-client.test.js.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.d.ts +47 -0
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.d.ts.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +116 -0
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.d.ts +2 -0
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.d.ts.map +1 -0
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.js +293 -0
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.test.js.map +1 -0
- package/package.json +1 -1
- package/presets/default/.claude/agents/einja/codex-agent.md +117 -0
- package/presets/default/.claude/agents/einja/specs/spec-requirements-generator.md +15 -6
- package/presets/default/.claude/hooks/einja/playwright-resize.sh +12 -2
- package/presets/default/.claude/settings.json +15 -0
- package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-output-format/SKILL.md +21 -0
- package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +1 -1
- package/scaffolds/.mcp.json +6 -9
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +4 -4
- package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +131 -100
- package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +4 -3
- package/scaffolds/instructions/task-vibe-kanban-loop.md +38 -17
- package/scaffolds/instructions/vercel-cli-reference.md +451 -0
- package/scaffolds/steering/README.md +1 -0
- package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +13 -1
- package/scaffolds/steering/development/backend-architecture.md +2 -1
- package/scaffolds/steering/development/database-guidelines.md +239 -0
- package/scaffolds/steering/development/frontend-development.md +80 -5
- package/scaffolds/steering/development/review-guidelines.md +5 -0
- package/scaffolds/steering/development-workflow.md +15 -1
- package/scaffolds/steering/infrastructure/deployment.md +27 -21
- package/scaffolds/steering/task-management.md +21 -0
- package/scaffolds/templates/README.md +11 -7
- 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
|
|
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
|
-
- [ ]
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
- [ ]
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
- [ ]
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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
|
-
- [ ]
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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
|
-
- [ ]
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
- [ ]
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
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
|
-
- [ ]
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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
|
-
- [ ]
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
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**:
|
|
12
|
-
- **Story 2**:
|
|
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.
|
|
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 →
|
|
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
|
-
|
|
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 -->
|
|
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
|
-
|
|
|
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
|
|
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 # プロジェクト選択
|