@einja/dev-cli 0.1.39 → 0.1.41

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 (183) hide show
  1. package/README.md +89 -1
  2. package/dist/cli.js +1 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +71 -1
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/list.js.map +1 -1
  8. package/dist/commands/sync.d.ts.map +1 -1
  9. package/dist/commands/sync.js +187 -13
  10. package/dist/commands/sync.js.map +1 -1
  11. package/dist/lib/dependency-checker.d.ts.map +1 -1
  12. package/dist/lib/merger.d.ts +12 -0
  13. package/dist/lib/merger.d.ts.map +1 -1
  14. package/dist/lib/merger.js +28 -0
  15. package/dist/lib/merger.js.map +1 -1
  16. package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
  17. package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
  18. package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
  19. package/dist/lib/preset.d.ts.map +1 -1
  20. package/dist/lib/sync/category-validator.d.ts +1 -1
  21. package/dist/lib/sync/category-validator.d.ts.map +1 -1
  22. package/dist/lib/sync/category-validator.js +2 -1
  23. package/dist/lib/sync/category-validator.js.map +1 -1
  24. package/dist/lib/sync/category-validator.test.js +3 -1
  25. package/dist/lib/sync/category-validator.test.js.map +1 -1
  26. package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
  27. package/dist/lib/sync/diff-engine.d.ts.map +1 -1
  28. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  29. package/dist/lib/sync/file-filter.js +1 -0
  30. package/dist/lib/sync/file-filter.js.map +1 -1
  31. package/dist/lib/sync/integration.test.js +255 -69
  32. package/dist/lib/sync/integration.test.js.map +1 -1
  33. package/dist/lib/sync/json-processor.d.ts +4 -4
  34. package/dist/lib/sync/json-processor.d.ts.map +1 -1
  35. package/dist/lib/sync/json-processor.js +11 -11
  36. package/dist/lib/sync/json-processor.js.map +1 -1
  37. package/dist/lib/sync/marker-processor.d.ts +60 -8
  38. package/dist/lib/sync/marker-processor.d.ts.map +1 -1
  39. package/dist/lib/sync/marker-processor.js +117 -26
  40. package/dist/lib/sync/marker-processor.js.map +1 -1
  41. package/dist/lib/sync/marker-processor.test.js +261 -40
  42. package/dist/lib/sync/marker-processor.test.js.map +1 -1
  43. package/dist/lib/sync/metadata-manager.d.ts +4 -0
  44. package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
  45. package/dist/lib/sync/metadata-manager.js +15 -0
  46. package/dist/lib/sync/metadata-manager.js.map +1 -1
  47. package/dist/lib/sync/metadata-manager.test.js +68 -0
  48. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  49. package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
  50. package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
  51. package/dist/lib/sync/orphan-cleaner.js +80 -0
  52. package/dist/lib/sync/orphan-cleaner.js.map +1 -0
  53. package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
  54. package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
  55. package/dist/lib/sync/orphan-cleaner.test.js +169 -0
  56. package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
  57. package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
  58. package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
  59. package/dist/lib/sync/project-private-synchronizer.js +106 -0
  60. package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
  61. package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
  62. package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
  63. package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
  64. package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
  65. package/dist/types/index.d.ts +1 -0
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/dist/types/sync.d.ts +36 -6
  68. package/dist/types/sync.d.ts.map +1 -1
  69. package/dist/types/sync.js +2 -2
  70. package/dist/types/sync.js.map +1 -1
  71. package/package.json +5 -4
  72. package/presets/default/.claude/agents/einja/Explore.md +140 -0
  73. package/presets/default/.claude/agents/einja/backend-architect.md +4 -0
  74. package/presets/default/.claude/agents/einja/codex-agent.md +4 -0
  75. package/presets/default/.claude/agents/einja/design-engineer.md +4 -0
  76. package/presets/default/.claude/agents/einja/docs/docs-updater.md +4 -0
  77. package/presets/default/.claude/agents/einja/frontend-architect.md +4 -0
  78. package/presets/default/.claude/agents/einja/frontend-coder.md +4 -0
  79. package/presets/default/.claude/agents/einja/git/conflict-resolver.md +4 -0
  80. package/presets/default/.claude/agents/einja/specs/spec-design-generator.md +4 -1
  81. package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +4 -0
  82. package/presets/default/.claude/agents/einja/specs/spec-requirements-generator.md +4 -1
  83. package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +6 -2
  84. package/presets/default/.claude/agents/einja/specs/spec-tasks-validator.md +4 -0
  85. package/presets/default/.claude/agents/einja/task/task-executer.md +57 -115
  86. package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +4 -0
  87. package/presets/default/.claude/agents/einja/task/task-qa.md +4 -0
  88. package/presets/default/.claude/agents/einja/task/task-reviewer.md +4 -0
  89. package/presets/default/.claude/commands/einja/einja-sync.md +5 -1
  90. package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
  91. package/presets/default/.claude/commands/einja/issue-exec.md +403 -0
  92. package/presets/default/.claude/commands/einja/spec-create.md +15 -1
  93. package/presets/default/.claude/commands/einja/start-dev.md +4 -0
  94. package/presets/default/.claude/commands/einja/sync-cursor-commands.md +4 -0
  95. package/presets/default/.claude/commands/einja/task-exec.md +106 -14
  96. package/presets/default/.claude/commands/einja/update-docs-by-task-specs.md +4 -0
  97. package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +23 -0
  98. package/presets/default/.claude/settings.json +15 -1
  99. package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +4 -0
  100. package/presets/default/.claude/skills/einja-general-context-loader/SKILL.md +4 -0
  101. package/presets/default/.claude/skills/einja-output-format/SKILL.md +4 -0
  102. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +7 -3
  103. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +266 -274
  104. package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
  105. package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
  106. package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
  107. package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
  108. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
  109. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
  110. package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
  111. package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +154 -0
  112. package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +265 -0
  113. package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +252 -0
  114. package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
  115. package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
  116. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
  117. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +295 -0
  118. package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
  119. package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +4 -0
  120. package/presets/default/.claude/skills/einja-task-commit/SKILL.md +4 -0
  121. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -0
  122. package/presets/default/.envrc +5 -0
  123. package/presets/default/.mcp.json +2 -12
  124. package/presets/default/CLAUDE.md.template +26 -4
  125. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
  126. package/presets/default/docs/einja/instructions/deployment-setup.md +3 -8
  127. package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
  128. package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
  129. package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +70 -8
  130. package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
  131. package/presets/default/docs/einja/instructions/task-execute.md +23 -28
  132. package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
  133. package/presets/default/docs/einja/steering/README.md +11 -11
  134. package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +3 -8
  135. package/presets/default/docs/einja/steering/architecture.md +3 -8
  136. package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
  137. package/presets/default/docs/einja/steering/commit-rules.md +3 -8
  138. package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
  139. package/presets/default/docs/einja/steering/development/api-development.md +3 -8
  140. package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
  141. package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
  142. package/presets/default/docs/einja/steering/development/component-design.md +502 -0
  143. package/presets/default/docs/einja/steering/development/database-guidelines.md +54 -5
  144. package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
  145. package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
  146. package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
  147. package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
  148. package/presets/default/docs/einja/steering/development-workflow.md +71 -124
  149. package/presets/default/docs/einja/steering/infrastructure/deployment.md +49 -55
  150. package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
  151. package/presets/default/docs/einja/steering/product.md +3 -8
  152. package/presets/default/docs/einja/steering/task-management.md +14 -98
  153. package/presets/default/scripts/ensure-serena.sh +75 -0
  154. package/presets/default/scripts/env-rotate-secrets.ts +336 -0
  155. package/presets/default/scripts/env-show.ts +130 -0
  156. package/presets/default/scripts/env.ts +479 -0
  157. package/presets/default/scripts/init.sh +92 -0
  158. package/presets/default/scripts/lib/env-common.ts +108 -0
  159. package/presets/default/scripts/lib/worktree-config.ts +64 -0
  160. package/presets/default/scripts/setup-dev.ts +640 -0
  161. package/presets/default/scripts/stop-serena.sh +25 -0
  162. package/presets/default/scripts/worktree/dev.ts +872 -0
  163. package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
  164. package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
  165. package/dist/lib/sync/seed-synchronizer.js +0 -72
  166. package/dist/lib/sync/seed-synchronizer.js.map +0 -1
  167. package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
  168. package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
  169. package/dist/lib/sync/seed-synchronizer.test.js +0 -147
  170. package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
  171. package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
  172. package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
  173. package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
  174. package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
  175. package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
  176. package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
  177. package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
  178. package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
  179. package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
  180. package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
  181. package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
  182. package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
  183. package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
@@ -12,9 +12,9 @@
12
12
 
13
13
  仕様書レビュー(Discord + Spec PR)
14
14
 
15
- タスク実行(pnpm task:loop
15
+ タスク実行(/einja:issue-exec or /einja:task-exec
16
16
 
17
- 自己レビュー → PR作成(Vibe-Kanban)
17
+ 自己レビュー → PR作成(自動)
18
18
 
19
19
  コードレビュー(GitHub PR)
20
20
 
@@ -57,32 +57,23 @@
57
57
  Spec PRをマージ
58
58
 
59
59
  ┌─────────────────────────────────────────────────────────────────────────────┐
60
- │ Phase B: タスク実行(Vibe-Kanban + task:loop
60
+ │ Phase B: タスク実行(/einja:issue-exec or /einja:task-exec
61
61
  ├─────────────────────────────────────────────────────────────────────────────┤
62
62
  │ │
63
- 事前準備: npx vibe-kanban(別ターミナルで起動)
64
- │ │
65
- │ pnpm task:loop <issue-number> │
63
+ /einja:issue-exec #<issue-number>
66
64
  │ │ │
67
- │ ├── 初期化: Issue取得、ブランチ作成、Vibe-Kanban接続
68
- │ │ ├── Phase毎に親Issue作成(MCP create_issue) │
65
+ │ ├── Manager: Issue パース、Phase 毎に Director を tmux で起動
69
66
  │ │ │
70
- │ └── ループ開始 ─────────────────────────────────────────┐
71
- │ │ │ │
72
- │ ▼ │ │
73
- │ ┌─────────────────────────────────────────────────────┐ │ │
74
- │ │ 着手可能なタスクグループを選定(依存関係考慮) │ │ │
75
- │ └─────────────────────────────────────────────────────┘ │ │
67
+ │ └── Director(Phase毎)────────────────────────────────┐
76
68
  │ │ │ │
77
69
  │ ▼ │ │
78
70
  │ ┌─────────────────────────────────────────────────────┐ │ │
79
- │ │ サブIssue作成(親Issue配下) start_workspace_session│ │ │
80
- │ │ (Claude Codeが自動起動されて実装開始) │ │ │
71
+ │ │ タスクグループを依存順に Worker を起動 │ │ │
81
72
  │ └─────────────────────────────────────────────────────┘ │ │
82
73
  │ │ │ │
83
74
  │ ▼ │ │
84
75
  │ ┌─────────────────────────────────────────────────────┐ │ │
85
- │ │ Claude Code(自動実行) │ │ │
76
+ │ │ Worker(/einja:task-exec を実行) │ │ │
86
77
  │ │ │ │ │
87
78
  │ │ task-executer: 実装 │ │ │
88
79
  │ │ ↓ │ │ │
@@ -90,37 +81,25 @@
90
81
  │ │ ↓ │ │ │
91
82
  │ │ task-qa: 動作確認(Playwright/curl)(自動) │←┘ │
92
83
  │ │ ↓ 全テスト合格 │ │
93
- │ │ ステータスIn Review │ │
84
+ │ │ commit & push PR 自動作成 │ │
94
85
  │ └─────────────────────────────────────────────────────┘ │
95
86
  │ │ │
96
87
  │ ▼ │
97
- │ 【人間がVibe-Kanbanで確認】 │
98
- │ ├── 自己レビュー(実装内容確認) │
99
- │ └── OKなら「Create PR」ボタンクリック │
100
- │ │ │
101
- │ ▼ │
102
88
  │ 【GitHubでPRレビュー】 │
103
- │ ├── 担当者レビュー(動作確認 + コード確認)
104
- │ └── 他エンジニアレビュー
105
- │ │ │
106
- │ ▼ 承認 │
107
- │ GitHub側でPRマージ(⚠️必ずGitHub側で操作) │
108
- │ │ │
109
- │ ▼ │
110
- │ Vibe-Kanbanがマージ検知 → タスク自動Done │
89
+ │ ├── PRの内容を確認
90
+ │ └── マージモードに応じてマージ(manual / task-group-auto / auto)
111
91
  │ │ │
112
92
  │ ▼ │
113
- task:loopがDone検知 → GitHub Issueチェックボックス更新
93
+ Director: PR マージ検知 → GitHub Issue チェックボックス更新
114
94
  │ │ │
115
- │ Phase全サブIssue完了?
116
- │ ├─ Yes → 親Issue Workspace作成PR作成・マージ
117
- │ │ → 親Issue自動Done
118
- │ └─ No → スキップ
95
+ │ Phase全タスク完了?
96
+ │ ├─ Yes → Phase PR 作成(Phase Issue ブランチ)
97
+ │ │ → マージモードに応じた処理
98
+ │ └─ No → 依存解除された次タスクの Worker を起動
119
99
  │ │ │
120
100
  │ └──────────────────────────────────────────────────┘ │
121
- │ 次のタスクグループを自動開始 │
122
101
  │ │
123
- 全タスクグループ完了 → Issue Close
102
+ Phase 完了 最終 PR 作成(Issue → base ブランチ)
124
103
  │ │
125
104
  └─────────────────────────────────────────────────────────────────────────────┘
126
105
  ```
@@ -174,42 +153,35 @@ Spec PR # 仕様書レビュー用
174
153
  ### コマンド
175
154
 
176
155
  ```bash
177
- # 事前準備: Vibe-Kanbanを起動(別ターミナル)
178
- npx vibe-kanban
179
-
180
- # タスクループ開始
181
- pnpm task:loop <issue-number>
182
- ```
156
+ # Issue全体の並列実行(推奨:複数Phase・複数タスクグループの場合)
157
+ /einja:issue-exec #123
158
+ /einja:issue-exec #123 --merge-mode task-group-auto # タスクPR自動マージ
159
+ /einja:issue-exec #123 --merge-mode auto # 全自動
160
+ /einja:issue-exec #123 --max-phase 2 # Phase 2 まで
161
+ /einja:issue-exec #123 --base develop # ベースブランチ指定
183
162
 
184
- **例**:
185
- ```bash
186
- pnpm task:loop 123 # Issue #123 の全タスクを実行
187
- pnpm task:loop 123 --max-group 4 # Phase 4 まで実行
188
- pnpm task:loop 123 --max-group 4.2 # タスクグループ 4.2 まで実行
189
- pnpm task:loop 123 --branch develop # develop ブランチベースで実行
163
+ # 単一タスクグループ実行(品質重視・複雑な実装向け)
164
+ /einja:task-exec #123 1.1 # Issue #123 のタスクグループ 1.1 を実行
190
165
  ```
191
166
 
192
- ### 実行後の流れ
167
+ ### 実行後の流れ(/einja:issue-exec)
193
168
 
194
- 実行後、specで作成されたタスクが着手可能なものから自動で実行開始されます。
169
+ `/einja:issue-exec` は Manager → Director → Worker の3階層でタスクを並列実行します。
195
170
 
196
- Phase毎に親Issueが自動作成され、タスクグループはサブIssueとして管理されます。
171
+ 1. **Manager** が Issue をパースし、Phase 毎に Director を tmux で起動
172
+ 2. **Director** が Phase 内のタスクグループを依存順に Worker を起動
173
+ 3. **Worker** が `/einja:task-exec` を実行(executer → reviewer → qa → commit)
174
+ 4. Worker 完了後、PR が自動作成される
175
+ 5. マージモードに応じて PR がマージされ、次のタスクが自動開始
197
176
 
198
- 1. **Vibe-Kanbanの画面を眺める** - タスクの進捗を確認
199
- 2. **In Reviewになったら自己レビュー** - 実装内容を確認
200
- 3. **OKなら「Create PR」ボタンをクリック** - PRが自動作成される
201
- 4. **GitHubでチームレビュー** - コード確認・承認
202
- 5. **GitHub側でPRをマージ** - ⚠️ 必ずGitHub側で操作
203
- 6. **次のタスクが自動開始** - マージ検知で自動的に次へ(少しラグあり)
177
+ ユーザーは `tmux attach -t einja-{issue番号}` で全プロセスを監視できます。
204
178
 
205
- ### Vibe-Kanban画面での操作
179
+ ### `/einja:issue-exec` と `/einja:task-exec` の使い分け
206
180
 
207
- | 操作 | タイミング | 説明 |
208
- |------|-----------|------|
209
- | **タスク進捗確認** | 随時 | Todo In Progress → In Review → Done の流れを確認 |
210
- | **Create PR** | In Review | ボタンをクリックして PR を自動作成 |
211
- | **レビュー** | PR 作成後 | GitHub で PR の内容を確認 |
212
- | **マージ** | レビュー完了後 | GitHub で PR をマージ(⚠️ 必ず GitHub 側で操作) |
181
+ | コマンド | 用途 | 対象 | 推奨シーン |
182
+ |---------|------|------|----------|
183
+ | **`/einja:issue-exec`** | Issue全体の並列実行 | 複数Phase・複数タスクグループ | 大規模機能実装 |
184
+ | **`/einja:task-exec`** | 単一タスクグループの確実な完了 | 1つのタスクグループ | 複雑な実装、品質重視 |
213
185
 
214
186
  ### サブエージェントの役割
215
187
 
@@ -224,32 +196,27 @@ Phase毎に親Issueが自動作成され、タスクグループはサブIssue
224
196
  `task-reviewer`または`task-qa`で問題が発見された場合、自動的に`task-executer`に戻って修正が行われます。
225
197
 
226
198
  ```
227
- task-executer → task-reviewer → task-qa → In Review
199
+ task-executer → task-reviewer → task-qa → PR作成
228
200
  ↑ │ │
229
201
  └──────────────┴──────────────┘
230
202
  問題発見時は自動ループ
231
203
  ```
232
204
 
233
- ### マージ後の自動処理
205
+ ### マージ後の自動処理(/einja:issue-exec 使用時)
234
206
 
235
207
  ```
236
- ┌─────────────────────────────────────────────────────────────┐
237
- │ PR マージ(GitHub側で操作) │
238
- │ ↓ │
239
- │ Vibe-Kanban: タスク → Done(自動検知) │
240
- │ ↓ │
241
- │ task:loop: Done 検知(15秒ポーリング) │
242
- │ ↓ │
243
- │ GitHub Issue: チェックボックス更新(自動) │
244
- ↓ │
245
- Phase 全サブIssue完了? │
246
- ├─ Yes → 親Issue Workspace作成 │
247
- │ │ → Phase→Issue PR作成・マージ │
248
- │ │ → 親Issue自動Done(タイムアウト2分) │
249
- │ └─ No → スキップ │
250
- │ ↓ │
251
- │ 次のタスクが自動開始 │
252
- └─────────────────────────────────────────────────────────────┘
208
+ Worker: task-exec 完了 → commit & push → PR 作成
209
+
210
+ Director: PR マージ検知
211
+
212
+ GitHub Issue チェックボックス更新
213
+
214
+ Phase 全タスク完了?
215
+ ├─ Yes → Phase PR 作成(Phase → Issue ブランチ)
216
+ → マージモードに応じた処理
217
+ └─ No 依存解除された次タスクの Worker を起動
218
+
219
+ Phase 完了 最終 PR 作成(Issue → base ブランチ)
253
220
  ```
254
221
 
255
222
  ---
@@ -261,7 +228,7 @@ task-executer → task-reviewer → task-qa → In Review
261
228
  | PRの種類 | 作成タイミング | 内容 | レビュー観点 |
262
229
  | ----------- | -------------------- | -------------------------- | ---------------------------------------------- |
263
230
  | **Spec PR** | `/einja:spec-create`完了時 | requirements.md, design.md | 要件の妥当性、設計の適切さ、スコープの確認 |
264
- | **実装PR** | タスクグループ完了時(Vibe-KanbanでCreate PR) | ソースコード、テスト | コード品質、設計書との整合性、テストカバレッジ |
231
+ | **実装PR** | タスクグループ完了時(Worker が自動作成) | ソースコード、テスト | コード品質、設計書との整合性、テストカバレッジ |
265
232
 
266
233
  ### なぜ2段階でPRを作成するのか
267
234
 
@@ -283,9 +250,9 @@ task-executer → task-reviewer → task-qa → In Review
283
250
 
284
251
  ### タスク実行フェーズ
285
252
 
286
- - **自己レビュー**: Vibe-KanbanでIn Reviewになったタスクの実装内容確認
287
- - **Create PRクリック**: 自己レビューOKならPR作成
288
- - **実装PRレビュー**: 担当者レビュー 他エンジニアレビュー → 承認 → マージ
253
+ - **PRレビュー**: Worker が自動作成した PR の内容を確認
254
+ - **PRマージ**: マージモードが manual の場合、GitHub で PR をマージ
255
+ - **質問回答**: Manager から AskUserQuestion でエスカレーションされた質問に回答
289
256
 
290
257
  ### Claudeのセルフチェックについて
291
258
 
@@ -294,7 +261,7 @@ task-executer → task-reviewer → task-qa → In Review
294
261
  | 従来(人間が実装) | 現在(Claudeが実装) |
295
262
  |------------------|-------------------|
296
263
  | 実装者がセルフチェック | `task-reviewer` + `task-qa` がセルフチェック |
297
- | セルフチェック後にPR作成 | セルフチェック後にIn Review → 人間がCreate PR |
264
+ | セルフチェック後にPR作成 | セルフチェック後に自動でPR作成 |
298
265
  | 他のエンジニアがPRレビュー | 人間(担当者 + 他エンジニア)がPRレビュー |
299
266
 
300
267
  ---
@@ -317,37 +284,27 @@ task-executer → task-reviewer → task-qa → In Review
317
284
  ### タスク実行
318
285
 
319
286
  ```bash
320
- # 自動ループ実行(推奨)
321
- pnpm task:loop <issue-number>
287
+ # Issue全体の並列実行(推奨)
288
+ /einja:issue-exec #<issue_number>
322
289
 
323
290
  # オプション指定
324
- pnpm task:loop <issue-number> --max-group <number> --branch <branch>
325
-
326
- # 例
327
- pnpm task:loop 123 # Issue #123 の全タスクを実行
328
- pnpm task:loop 123 --max-group 4 # Phase 4 まで実行
329
- pnpm task:loop 123 --max-group 4.2 # タスクグループ 4.2 まで実行
291
+ /einja:issue-exec #<issue_number> --merge-mode auto --max-phase 2
330
292
 
331
293
  # 単一タスクグループ実行(品質重視・複雑な実装向け)
332
294
  /einja:task-exec #<issue_number> <task_group_number>
333
295
 
334
296
  # 例
335
- /einja:task-exec #123 1.1 # Issue #123 のタスクグループ 1.1 を実行
297
+ /einja:issue-exec #123 # Issue #123 の全タスクを並列実行
298
+ /einja:issue-exec #123 --merge-mode task-group-auto # タスクPR自動マージ
299
+ /einja:task-exec #123 1.1 # タスクグループ 1.1 を単発実行
336
300
  ```
337
301
 
338
- ### `/einja:task-exec` と `pnpm task:loop` の使い分け
339
-
340
- | コマンド | 用途 | 品質保証 | 推奨シーン |
341
- |---------|------|---------|----------|
342
- | **`/einja:task-exec`** | 重要タスクの確実な完了 | ✅ 合格まで自動ループ | 複雑な実装、品質重視 |
343
- | **`pnpm task:loop`** | 大量タスクの自動消化 | 並列実行・監視 | 定型作業、並行開発 |
344
-
345
302
  ---
346
303
 
347
304
  ## 関連ドキュメント
348
305
 
349
306
  - [タスク管理ガイドライン](task-management.md) - タスク階層、粒度基準、GitHub Issue管理
350
- - [task:loop詳細ガイド](../instructions/task-vibe-kanban-loop.md) - task:loopの詳細な使い方
307
+ - [Issue実行ワークフロー](../instructions/issue-exec-workflow.md) - Issue実行の詳細な使い方
351
308
  - [ブランチ戦略](branch-strategy.md) - ブランチ運用ルール
352
309
  - [コードレビューガイドライン](development/review-guidelines.md) - 品質基準とチェックリスト
353
310
 
@@ -373,15 +330,10 @@ pnpm task:loop 123 --max-group 4.2 # タスクグループ 4.2 まで実
373
330
 
374
331
  ### Q: PRのマージはどこで行いますか?
375
332
 
376
- **A:** 必ず**GitHub側**でマージしてください。Vibe-Kanbanがマージを検知して自動的にタスクをDoneに変更し、task:loopが次のタスクを開始します。
377
-
378
- ### Q: タスクがIn Reviewのまま進まない場合は?
379
-
380
- **A:**
381
- 1. Vibe-Kanbanで「Create PR」をクリックしてPRを作成
382
- 2. GitHubでPRをレビュー・マージ
383
-
384
- PRがマージされるとタスクは自動的にDoneになります。
333
+ **A:** マージモードによって異なります:
334
+ - **manual**(デフォルト): GitHub側で手動マージしてください。Director がマージを検知して次のタスクを開始します。
335
+ - **task-group-auto**: タスクグループPRは自動マージされます。Phase PRは手動マージです。
336
+ - **auto**: タスクPR・Phase PRが自動マージされます。最終PR(issue→base)は常に手動マージです。
385
337
 
386
338
  ---
387
339
 
@@ -444,11 +396,6 @@ PRがマージされるとタスクは自動的にDoneになります。
444
396
  ```
445
397
  <!-- @einja:managed:end -->
446
398
 
447
- ---
448
-
449
- <!-- @einja:seed:start id="development-workflow-project" -->
450
- ## プロジェクト固有の設定
451
-
452
- <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
453
- <!-- einja syncで上書きされません -->
454
- <!-- @einja:seed:end -->
399
+ <!-- @einja:project-private:start id="development-workflow-project" -->
400
+ <!-- プロジェクト固有の情報を記入 -->
401
+ <!-- @einja:project-private:end -->
@@ -155,7 +155,7 @@ graph LR
155
155
 
156
156
  | ワークフロー | ファイル | トリガー | 用途 |
157
157
  |------------|---------|---------|------|
158
- | **Deploy Stable** | `deploy-stable-branches.yml` | push to main/develop/staging | CI → 本番・開発・ステージング環境デプロイ |
158
+ | **Deploy Stable** | `deploy-stable-branches.yml` | push to main/develop/staging | CI → 動的マトリクス → 変更アプリのみデプロイ(`--env`実行時注入) |
159
159
  | **PR Preview** | `deploy-pr-preview.yml` | PR opened/sync/closed | CI → Neonブランチ作成 → プレビューデプロイ |
160
160
  | **PR Close Cleanup** | `cleanup-pr-preview-on-close.yml` | PR closed | Neonブランチの即座削除(PR close時) |
161
161
  | **Cleanup DB** | `cleanup-pr-preview-db.yml` | 毎日00:00 UTC / 手動 | 孤立したNeonブランチ削除 |
@@ -185,8 +185,7 @@ flowchart TB
185
185
  end
186
186
 
187
187
  subgraph "migrate/action.yml"
188
- M1[setup action 呼び出し] --> M2[pnpm generate]
189
- M2 --> M3[db:migrate:deploy]
188
+ M1[setup action 呼び出し] --> M3[db:migrate:deploy]
190
189
  M3 --> M4{run-seed?}
191
190
  M4 -->|true| M5[db:seed]
192
191
  M4 -->|false| M6[完了]
@@ -201,7 +200,7 @@ flowchart TB
201
200
  |--------|---------|------|-----------|
202
201
  | **Setup** | `actions/setup/action.yml` | pnpm + Node.js + install | ci action, migrate action, cleanup |
203
202
  | **CI** | `actions/ci/action.yml` | setup → generate → [migrate] → typecheck → lint → test | deploy-stable-branches, deploy-pr-preview |
204
- | **Migrate** | `actions/migrate/action.yml` | setup → generate → migrate → seed (optional) | deploy-stable-branches |
203
+ | **Migrate** | `actions/migrate/action.yml` | setup → migrate → seed (optional) | deploy-stable-branches |
205
204
  | **Neon Export Env** | `actions/neon-export-env/action.yml` | .env.previewからNeon環境変数をエクスポート | deploy-pr-preview, cleanup-pr-preview-on-close |
206
205
 
207
206
  ### 実行マトリクス
@@ -258,9 +257,8 @@ sequenceDiagram
258
257
  rect rgb(240, 255, 240)
259
258
  Note over Actions,Vercel: Vercel デプロイ
260
259
  Actions->>Vercel: vercel pull
261
- Actions->>Vercel: 環境変数同期 (encrypted-only)
262
260
  Actions->>Vercel: vercel build (DATABASE_URL=pooled)
263
- Actions->>Vercel: vercel deploy --prebuilt
261
+ Actions->>Vercel: vercel deploy --prebuilt --env(全encrypted変数を実行時注入)
264
262
  Vercel-->>Actions: Preview URL
265
263
  end
266
264
 
@@ -308,10 +306,12 @@ sequenceDiagram
308
306
  rect rgb(240, 255, 240)
309
307
  Note over Actions,Vercel: Vercel デプロイ
310
308
  Actions->>Vercel: vercel pull
311
- Actions->>Vercel: 環境変数同期 (encrypted-only)
312
- Actions->>Vercel: vercel pull (Re-pull: 同期後の最新化)
309
+ alt mainブランチのみ
310
+ Actions->>Vercel: 環境変数同期 (encrypted-only, vercel env add)
311
+ Actions->>Vercel: vercel pull (Re-pull: 同期後の最新化)
312
+ end
313
313
  Actions->>Vercel: vercel build [--prod]
314
- Actions->>Vercel: vercel deploy --prebuilt [--prod]
314
+ Actions->>Vercel: vercel deploy --prebuilt --env [--prod](全encrypted変数を実行時注入)
315
315
  Vercel-->>Actions: Deploy URL
316
316
  end
317
317
 
@@ -383,15 +383,15 @@ sequenceDiagram
383
383
  ```mermaid
384
384
  flowchart TD
385
385
  A[git push main] --> B[deploy-stable-branches.yml]
386
- B --> C[CI Checks]
387
- C --> D{成功?}
386
+ B --> C[CI Checks + 変更検知]
387
+ C --> D{成功 & 変更あり?}
388
388
  D -->|Yes| E[dotenvx復号化]
389
- D -->|No| X[失敗通知]
389
+ D -->|No| X[スキップ]
390
390
  E --> F[Vercel Pull]
391
- F --> G[環境変数同期]
391
+ F --> G[環境変数同期 vercel env add]
392
392
  G --> H[DB Migrate]
393
393
  H --> I[Vercel Build]
394
- I --> J[Vercel Deploy --prod]
394
+ I --> J[Vercel Deploy --prod --env]
395
395
  J --> K[完了]
396
396
 
397
397
  style A fill:#4CAF50
@@ -413,19 +413,18 @@ flowchart TD
413
413
  ```mermaid
414
414
  flowchart TD
415
415
  A[git push develop] --> B[deploy-stable-branches.yml]
416
- B --> C[CI Checks]
417
- C --> D{成功?}
416
+ B --> C[CI Checks + 変更検知]
417
+ C --> D{成功 & 変更あり?}
418
418
  D -->|Yes| E[dotenvx復号化]
419
- D -->|No| X[失敗通知]
419
+ D -->|No| X[スキップ]
420
420
  E --> F[Vercel Pull]
421
- F --> G[環境変数同期]
422
- G --> H[Vercel Build]
423
- H --> I[Vercel Deploy]
424
- I --> J[Alias設定]
425
- J --> K[完了]
421
+ F --> G[Vercel Build]
422
+ G --> H[Vercel Deploy --env]
423
+ H --> I[Alias設定]
424
+ I --> J[完了]
426
425
 
427
426
  style A fill:#2196F3
428
- style K fill:#2196F3
427
+ style J fill:#2196F3
429
428
  ```
430
429
 
431
430
  **設定**:
@@ -434,7 +433,7 @@ flowchart TD
434
433
  - 復号鍵: `DOTENV_PRIVATE_KEY_DEVELOP`
435
434
  - DBマイグレーション: ❌(PR PreviewのNeonブランチで自動同期)
436
435
  - DBシード: ❌
437
- - Alias: `secrets.VERCEL_DEV_DOMAIN`
436
+ - Alias: `.env.develop` 内の `VERCEL_ALIAS_DOMAIN_WEB` / `VERCEL_ALIAS_DOMAIN_ADMIN`(dotenvx復号で取得)
438
437
 
439
438
  ---
440
439
 
@@ -443,20 +442,19 @@ flowchart TD
443
442
  ```mermaid
444
443
  flowchart TD
445
444
  A[git push staging] --> B[deploy-stable-branches.yml]
446
- B --> C[CI Checks]
447
- C --> D{成功?}
445
+ B --> C[CI Checks + 変更検知]
446
+ C --> D{成功 & 変更あり?}
448
447
  D -->|Yes| E[dotenvx復号化]
449
- D -->|No| X[失敗通知]
448
+ D -->|No| X[スキップ]
450
449
  E --> F[Vercel Pull]
451
- F --> G[環境変数同期]
452
- G --> H[DB Migrate]
453
- H --> I[Vercel Build]
454
- I --> J[Vercel Deploy]
455
- J --> K[Alias設定]
456
- K --> L[完了]
450
+ F --> G[DB Migrate]
451
+ G --> H[Vercel Build]
452
+ H --> I[Vercel Deploy --env]
453
+ I --> J[Alias設定]
454
+ J --> K[完了]
457
455
 
458
456
  style A fill:#FF9800
459
- style L fill:#FF9800
457
+ style K fill:#FF9800
460
458
  ```
461
459
 
462
460
  **設定**:
@@ -465,7 +463,7 @@ flowchart TD
465
463
  - 復号鍵: `DOTENV_PRIVATE_KEY_STAGING`
466
464
  - DBマイグレーション: ✅
467
465
  - DBシード: ❌(既存データ保持)
468
- - Alias: `secrets.VERCEL_STG_DOMAIN`
466
+ - Alias: `.env.staging` 内の `VERCEL_ALIAS_DOMAIN_WEB` / `VERCEL_ALIAS_DOMAIN_ADMIN`(dotenvx復号で取得)
469
467
 
470
468
  ---
471
469
 
@@ -506,12 +504,12 @@ flowchart TD
506
504
 
507
505
  > **⚠️ 同時PR運用時の注意**
508
506
  >
509
- > テンプレートでは`vercel deploy --env DATABASE_URL=...`でデプロイ単位で
510
- > DATABASE_URLを注入しています。これにより、同時に複数のPRがプレビュー
511
- > デプロイされても、それぞれのPRが固有のNeonブランチDBを参照します。
507
+ > テンプレートでは`vercel deploy --env KEY=VALUE`でデプロイ単位で
508
+ > 全encrypted環境変数(DATABASE_URL含む)を実行時注入しています。
509
+ > これにより、同時に複数のPRがプレビューデプロイされても、
510
+ > それぞれのPRが固有のNeonブランチDBを参照し、環境変数の競合が発生しません。
512
511
  >
513
- > もし`vercel env add DATABASE_URL`方式を使用すると、Vercel Projectの
514
- > preview環境変数が上書きされ、同時PRで競合するリスクがあります。
512
+ > PR環境では`vercel env add`は使用しません(並行PR間の競合を防ぐため)。
515
513
 
516
514
  ---
517
515
 
@@ -520,20 +518,21 @@ flowchart TD
520
518
  | 環境 | ブランチ | Vercel環境 | DBマイグ | シード | Alias | 暗号化ファイル | 復号鍵 |
521
519
  |------|---------|-----------|:-------:|:-----:|:-----:|--------------|--------|
522
520
  | Production | main | production | ✅ | ❌ | ❌ | `.env.production` | `DOTENV_PRIVATE_KEY_PRODUCTION` |
523
- | Develop | develop | preview | ❌ | ❌ | ✅ | `.env.develop` | `DOTENV_PRIVATE_KEY_DEVELOP` |
524
- | Staging | staging | preview | ✅ | ❌ | ✅ | `.env.staging` | `DOTENV_PRIVATE_KEY_STAGING` |
521
+ | Develop | develop | preview | ❌ | ❌ | ✅ `VERCEL_ALIAS_DOMAIN_*` | `.env.develop` | `DOTENV_PRIVATE_KEY_DEVELOP` |
522
+ | Staging | staging | preview | ✅ | ❌ | ✅ `VERCEL_ALIAS_DOMAIN_*` | `.env.staging` | `DOTENV_PRIVATE_KEY_STAGING` |
525
523
  | PR Preview | feature/* | preview | ✅ | ✅ | ❌ | `.env.preview` | `DOTENV_PRIVATE_KEY_PREVIEW` |
526
524
 
527
525
  ### Vercel環境変数の自動同期
528
526
 
529
527
  ワークフローは **encrypted-only方式** で同期対象を制御:
530
528
 
531
- | ワークフロー | 同期対象 | 除外 | 説明 |
532
- |------------|---------|------|------|
533
- | PR Preview | `.env.preview` 内の `encrypted:` キー | `NEON_*`, `DATABASE_*` | dotenvxで管理しているもの = Vercelに同期すべきもの |
534
- | Stable Branches | `.env.{env}` 内の `encrypted:` キー | なし | dotenvxで管理している全キーを同期 |
529
+ | ワークフロー | 方式 | 同期対象 | 除外 | 説明 |
530
+ |------------|------|---------|------|------|
531
+ | PR Preview | `--env`実行時注入 | `.env.preview` 内の `encrypted:` キー | `NEON_*`, `DOTENV_PUBLIC_KEY_*` | `vercel env add`は使用しない(並行PR競合防止) |
532
+ | Stable (main) | `vercel env add` + `--env`実行時注入 | `.env.production` 内の `encrypted:` キー | `NEON_*` | mainのみVercel環境変数ストアに同期 |
533
+ | Stable (develop/staging) | `--env`実行時注入 | `.env.{env}` 内の `encrypted:` キー | `NEON_*`, `VERCEL_ALIAS_DOMAIN_*`, `DOTENV_PUBLIC_KEY_*` | `vercel env add`は使用しない |
535
534
 
536
- **設計意図**: dotenvxの暗号化ファイル内の `encrypted:` を含む行のキー名のみを対象とし、「dotenvxで管理 = Vercelに同期」の意図を明確にする。ブラックリスト方式(全env走査)ではシステム変数混入や新変数追加時の漏れリスクがあるため廃止。
535
+ **設計意図**: `vercel env add`によるVercel環境変数ストアへの書き込みはmainブランチのみに限定。develop/staging/PRは`vercel deploy --env`による実行時注入で環境変数を渡し、並行デプロイ間の競合を防止する。
537
536
 
538
537
  ---
539
538
 
@@ -688,11 +687,6 @@ sequenceDiagram
688
687
  - [Vercel CLI/APIリファレンス](../../instructions/vercel-cli-reference.md)
689
688
  <!-- @einja:managed:end -->
690
689
 
691
- ---
692
-
693
- <!-- @einja:seed:start id="deployment-project" -->
694
- ## プロジェクト固有の設定
695
-
696
- <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
697
- <!-- einja syncで上書きされません -->
698
- <!-- @einja:seed:end -->
690
+ <!-- @einja:project-private:start id="deployment-project" -->
691
+ <!-- プロジェクト固有の情報を記入 -->
692
+ <!-- @einja:project-private:end -->
@@ -279,6 +279,7 @@ dotenvx採用により、GitHub Secretsは**環境ごとに1つの秘密鍵の
279
279
 
280
280
  | Secret名 | 用途 |
281
281
  |---------|------|
282
+ | `DOTENV_PRIVATE_KEY_DEVELOP` | dev検証環境の復号 |
282
283
  | `DOTENV_PRIVATE_KEY_STAGING` | ステージング環境の復号 |
283
284
  | `DOTENV_PRIVATE_KEY_PREVIEW` | Preview環境の復号(Neon環境変数含む) |
284
285
  | `DOTENV_PRIVATE_KEY_PRODUCTION` | 本番デプロイ時の復号 |
@@ -302,11 +303,6 @@ dotenvx採用により、GitHub Secretsは**環境ごとに1つの秘密鍵の
302
303
  - [デプロイセットアップ手順](../../instructions/deployment-setup.md)
303
304
  <!-- @einja:managed:end -->
304
305
 
305
- ---
306
-
307
- <!-- @einja:seed:start id="environment-variables-project" -->
308
- ## プロジェクト固有の設定
309
-
310
- <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
311
- <!-- einja syncで上書きされません -->
312
- <!-- @einja:seed:end -->
306
+ <!-- @einja:project-private:start id="environment-variables-project" -->
307
+ <!-- プロジェクト固有の情報を記入 -->
308
+ <!-- @einja:project-private:end -->
@@ -541,11 +541,6 @@ describe('UserRepository', () => {
541
541
  すべての開発活動は、このビジョンと原則に従って実施してください。
542
542
  <!-- @einja:managed:end -->
543
543
 
544
- ---
545
-
546
- <!-- @einja:seed:start id="product-project" -->
547
- ## プロジェクト固有の設定
548
-
549
- <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
550
- <!-- einja syncで上書きされません -->
551
- <!-- @einja:seed:end -->
544
+ <!-- @einja:project-private:start id="product-project" -->
545
+ <!-- プロジェクト固有の情報を記入 -->
546
+ <!-- @einja:project-private:end -->