@einja/dev-cli 0.1.38 → 0.1.39
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/lib/file-system.d.ts +1 -5
- package/dist/lib/file-system.d.ts.map +1 -1
- package/dist/lib/file-system.js +2 -8
- package/dist/lib/file-system.js.map +1 -1
- package/dist/lib/mcp-config.js +3 -3
- package/dist/lib/mcp-config.js.map +1 -1
- package/dist/lib/mcp-config.test.js +2 -2
- package/dist/lib/mcp-config.test.js.map +1 -1
- package/dist/lib/merger.d.ts.map +1 -1
- package/dist/lib/merger.js +5 -5
- package/dist/lib/merger.js.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.js +5 -0
- package/dist/lib/preset-update/file-copier.js.map +1 -1
- package/dist/lib/preset-update/file-copier.test.js +26 -0
- package/dist/lib/preset-update/file-copier.test.js.map +1 -1
- package/dist/lib/sync/category-validator.d.ts +5 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js +16 -2
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +14 -4
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +24 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/file-filter.test.js +37 -0
- package/dist/lib/sync/file-filter.test.js.map +1 -1
- package/package.json +1 -1
- package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +40 -43
- package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +16 -6
- package/presets/default/.claude/agents/einja/task/task-executer.md +13 -11
- package/presets/default/.claude/commands/einja/einja-sync.md +238 -0
- package/presets/default/.claude/commands/einja/spec-create.md +7 -3
- package/presets/default/.claude/commands/einja/task-exec.md +6 -6
- package/presets/default/.claude/settings.json +1 -0
- package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +4 -3
- package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +69 -0
- package/presets/default/.claude/skills/einja-component-design/SKILL.md +3 -3
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +35 -0
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +421 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +333 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +110 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/quick_validate.py +117 -0
- package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +6 -6
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +24 -22
- package/presets/default/.claude/skills/einja-task-qa/{reference → references}/troubleshooting.md +1 -1
- package/presets/default/.claude/skills/einja-task-qa/{reference → references}/usage-patterns.md +2 -2
- package/presets/default/.claude/skills/einja-task-qa/templates/qa-test-template.md +13 -13
- package/{scaffolds → presets/default}/.mcp.json +27 -6
- package/presets/default/.vscode/settings.json +18 -0
- package/presets/default/CLAUDE.md.template +192 -0
- package/{scaffolds → presets/default/docs/einja}/example/README.md +1 -1
- package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/qa-tests/README.md +20 -23
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story3/.gitkeep +0 -0
- package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +12 -16
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story1.md +101 -0
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story2.md +70 -0
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/story3.md +69 -0
- package/{scaffolds → presets/default/docs/einja}/instructions/deployment-setup.md +93 -9
- package/{scaffolds → presets/default/docs/einja}/instructions/environment-setup.md +152 -4
- package/{scaffolds → presets/default/docs/einja}/instructions/local-server-environment-and-worktree.md +99 -0
- package/presets/default/docs/einja/instructions/neon-cli-reference.md +605 -0
- package/{scaffolds → presets/default/docs/einja}/instructions/vercel-cli-reference.md +80 -0
- package/{scaffolds → presets/default/docs/einja}/steering/acceptance-criteria-and-qa-guide.md +3 -4
- package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/environment-variables.md +4 -4
- package/{scaffolds → presets/default/docs/einja}/templates/README.md +1 -1
- package/{scaffolds → presets/default/docs/einja}/templates/qa-test.md.template +29 -26
- package/presets/default/symlinks.json +0 -45
- package/scaffolds/cli/preset.yaml +0 -137
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +0 -268
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +0 -179
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +0 -392
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +0 -459
- /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/naming-conventions.md +0 -0
- /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/prohibited-patterns.md +0 -0
- /package/presets/default/.claude/skills/einja-coding-standards/{reference → references}/typescript-rules.md +0 -0
- /package/presets/default/.claude/skills/einja-component-design/{reference → references}/directory-structure.md +0 -0
- /package/presets/default/.claude/skills/einja-component-design/{reference → references}/props-patterns.md +0 -0
- /package/presets/default/.claude/skills/einja-component-design/{reference → references}/styling-guide.md +0 -0
- /package/presets/default/.claude/skills/einja-task-qa/{reference → references}/failure-patterns.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/design.md +0 -0
- /package/{scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence → presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story1}/.gitkeep +0 -0
- /package/{scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence → presets/default/docs/einja/example/specs/issues/issue999-example-task/qa-tests/evidence/story2}/.gitkeep +0 -0
- /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/requirements.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/example/specs/issues/issue999-example-task/tasks.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/instructions/task-execute.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/instructions/task-vibe-kanban-loop.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/README.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/architecture.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/branch-strategy.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/commit-rules.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/db-schema-design.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/api-development.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/backend-architecture.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/database-guidelines.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/frontend-development.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/review-guidelines.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development/testing-strategy.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/development-workflow.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/deployment.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/product.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/steering/task-management.md +0 -0
- /package/{scaffolds → presets/default/docs/einja}/templates/design-simple.md.template +0 -0
- /package/{scaffolds → presets/default/docs/einja}/templates/design.md.template +0 -0
- /package/{scaffolds → presets/default/docs/einja}/templates/requirements.md.template +0 -0
package/{scaffolds → presets/default/docs/einja}/steering/infrastructure/environment-variables.md
RENAMED
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
|------|-------------|--------|--------|
|
|
37
37
|
| ローカル開発 | `.env.local` → `.env` + `.env.personal` | ✅ | `.env.local`のみ |
|
|
38
38
|
| dev検証 | `.env.develop` | ✅ | ✅ |
|
|
39
|
+
| staging | `.env.staging` | ✅ | ✅ |
|
|
39
40
|
| preview | `.env.preview`(Neon環境変数含む) | ✅ | ✅ |
|
|
40
41
|
| 本番 | `.env.production` | ✅ | ✅ |
|
|
41
|
-
| CI/CD | `.env.ci` | ✅ | ✅ |
|
|
42
42
|
|
|
43
43
|
**ポイント**: ローカル開発も暗号化ファイル(`.env.local`)を使用。`pnpm dev:setup`で復号して`.env`を生成。
|
|
44
44
|
|
|
@@ -169,9 +169,9 @@ A: `.env` は毎回再生成されますが、秘密情報は `.env.local`(暗
|
|
|
169
169
|
| `.env.personal.example` | ✅ | ❌ | 個人用トークンのテンプレート |
|
|
170
170
|
| `.env.local` | ✅ | ✅ | ローカル開発用(チーム共有) |
|
|
171
171
|
| `.env.develop` | ✅ | ✅ | dev検証サーバー用 |
|
|
172
|
+
| `.env.staging` | ✅ | ✅ | ステージング環境用 |
|
|
172
173
|
| `.env.preview` | ✅ | ✅ | Preview環境用(Neon環境変数含む) |
|
|
173
174
|
| `.env.production` | ✅ | ✅ | 本番環境用 |
|
|
174
|
-
| `.env.ci` | ✅ | ✅ | CI/CD用 |
|
|
175
175
|
| `.env.keys` | ❌ | - | 全環境の秘密鍵(1Password等で共有) |
|
|
176
176
|
| `.env` | ❌ | ❌ | `.env.local`を復号したもの |
|
|
177
177
|
| `.env.personal` | ❌ | ❌ | 個人固有のトークン |
|
|
@@ -184,9 +184,9 @@ A: `.env` は毎回再生成されますが、秘密情報は `.env.local`(暗
|
|
|
184
184
|
├── .env.personal.example # 個人用トークンテンプレート(Git追跡)
|
|
185
185
|
├── .env.local # ローカル開発用・暗号化済み(Git追跡)★
|
|
186
186
|
├── .env.develop # dev検証・暗号化済み(Git追跡)
|
|
187
|
+
├── .env.staging # ステージング環境・暗号化済み(Git追跡)
|
|
187
188
|
├── .env.preview # Preview環境・暗号化済み(Git追跡・Neon環境変数含む)
|
|
188
189
|
├── .env.production # 本番・暗号化済み(Git追跡)
|
|
189
|
-
├── .env.ci # CI/CD・暗号化済み(Git追跡)
|
|
190
190
|
├── .env.keys # 秘密鍵(Git除外・1Password等で共有)
|
|
191
191
|
├── .env # .env.localを復号したもの(Git除外)
|
|
192
192
|
└── .env.personal # 個人用トークン(Git除外)
|
|
@@ -279,7 +279,7 @@ dotenvx採用により、GitHub Secretsは**環境ごとに1つの秘密鍵の
|
|
|
279
279
|
|
|
280
280
|
| Secret名 | 用途 |
|
|
281
281
|
|---------|------|
|
|
282
|
-
| `
|
|
282
|
+
| `DOTENV_PRIVATE_KEY_STAGING` | ステージング環境の復号 |
|
|
283
283
|
| `DOTENV_PRIVATE_KEY_PREVIEW` | Preview環境の復号(Neon環境変数含む) |
|
|
284
284
|
| `DOTENV_PRIVATE_KEY_PRODUCTION` | 本番デプロイ時の復号 |
|
|
285
285
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Story {N}: {ストーリー名} QAテスト結果
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
-
|
|
5
|
-
-
|
|
3
|
+
## テスト対象
|
|
4
|
+
- **ストーリー**: Story {N} - {ストーリー名}
|
|
5
|
+
- **対象AC**: AC{N}.1〜AC{N}.M
|
|
6
6
|
- **実装日**: YYYY-MM-DD
|
|
7
7
|
- **テスター**: task-qa
|
|
8
8
|
- **最終更新**: YYYY-MM-DD HH:MM
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
| ✅ PASS | 0 |
|
|
14
14
|
| ❌ FAIL | 0 |
|
|
15
15
|
| ⚠️ PARTIAL | 0 |
|
|
16
|
+
| 🔄 未実施 | 0 |
|
|
16
17
|
|
|
17
18
|
---
|
|
18
19
|
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
# 1. ユニットテスト
|
|
24
25
|
pnpm test
|
|
25
26
|
|
|
26
|
-
# 2. E2E
|
|
27
|
+
# 2. E2Eテスト(該当する場合)
|
|
27
28
|
pnpm test:e2e
|
|
28
29
|
|
|
29
30
|
# 3. Lintチェック
|
|
@@ -36,42 +37,40 @@ pnpm build
|
|
|
36
37
|
pnpm typecheck
|
|
37
38
|
```
|
|
38
39
|
|
|
39
|
-
> **Note**: E2Eテストは `pnpm test:e2e` で実行されるPlaywrightコードテストを指します。
|
|
40
|
-
> Playwright MCPを使用したブラウザテスト(Browser検証レベル)は、下記「タスク X.Y.N」セクションのテストシナリオで実施します。
|
|
41
|
-
> 詳細は `docs/einja/steering/terminology.md` を参照してください。
|
|
42
|
-
|
|
43
40
|
### 結果
|
|
44
41
|
| テスト項目 | ステータス | 備考 |
|
|
45
42
|
|----------|----------|------|
|
|
46
|
-
| ユニットテスト |
|
|
47
|
-
| E2Eテスト |
|
|
48
|
-
| Lintチェック |
|
|
49
|
-
| ビルドチェック |
|
|
50
|
-
| 型チェック |
|
|
43
|
+
| ユニットテスト | 🔄 | - |
|
|
44
|
+
| E2Eテスト | 🔄 | - |
|
|
45
|
+
| Lintチェック | 🔄 | - |
|
|
46
|
+
| ビルドチェック | 🔄 | - |
|
|
47
|
+
| 型チェック | 🔄 | - |
|
|
51
48
|
|
|
52
49
|
**重要**: 上記のいずれか1つでも失敗した場合、全体ステータスは**❌ FAIL**となります。
|
|
53
50
|
|
|
54
51
|
---
|
|
55
52
|
|
|
56
|
-
##
|
|
53
|
+
## AC{N}.1: {ACの1文要約}
|
|
57
54
|
|
|
58
|
-
###
|
|
59
|
-
|
|
60
|
-
-
|
|
55
|
+
### 受け入れ条件
|
|
56
|
+
<!-- requirements.md から該当ACの受け入れ条件を転記 -->
|
|
57
|
+
- AC{N}.1: {Given-When-Then形式の基準}
|
|
61
58
|
|
|
62
59
|
### テストシナリオ
|
|
63
60
|
|
|
61
|
+
#### {test_category_name}
|
|
62
|
+
|
|
64
63
|
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
65
64
|
|----|------|---------|--------|------|------|
|
|
66
|
-
| 1 |
|
|
67
|
-
| 2 |
|
|
65
|
+
| 1 | {step_description} | {check_item} | {expected_value} | - | - |
|
|
66
|
+
| 2 | {step_description} | {check_item} | {expected_value} | - | - |
|
|
68
67
|
|
|
69
68
|
**重要**:
|
|
70
69
|
- 手順は自然言語で簡潔に記述(例: 「ログイン画面に移動」「メールアドレス入力: test@example.com」)
|
|
71
70
|
- 「-」は手順のみで確認項目がない場合に使用
|
|
72
71
|
- 備考欄はテストの区切りや注意事項を記載
|
|
73
72
|
|
|
74
|
-
###
|
|
73
|
+
### ステータス: - (未実施)
|
|
75
74
|
|
|
76
75
|
#### 主な問題点
|
|
77
76
|
- (実施後に記載)
|
|
@@ -80,22 +79,26 @@ pnpm typecheck
|
|
|
80
79
|
- (実施後に記載)
|
|
81
80
|
|
|
82
81
|
#### エビデンス
|
|
83
|
-
- ログファイル: `qa-tests/
|
|
84
|
-
- スクリーンショット: `qa-tests/
|
|
82
|
+
- ログファイル: `qa-tests/evidence/story{N}/AC{N}-1-{evidence_id}.log`
|
|
83
|
+
- スクリーンショット: `qa-tests/evidence/story{N}/AC{N}-1-{evidence_id}.png`
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
<!-- 追加のACがある場合は上記セクションを繰り返す -->
|
|
85
88
|
|
|
86
89
|
---
|
|
87
90
|
|
|
88
91
|
## 統合テスト結果サマリー
|
|
89
92
|
|
|
90
|
-
###
|
|
93
|
+
### Story {N} 全体結果
|
|
91
94
|
- **全体ステータス**: - (未実施)
|
|
92
|
-
-
|
|
95
|
+
- **完了AC**: 0/{total_acs}
|
|
93
96
|
- **テスト合格率**: 0% (0/0)
|
|
94
97
|
|
|
95
98
|
### 修正が必要な項目
|
|
96
99
|
- (実施後に記載)
|
|
97
100
|
|
|
98
|
-
###
|
|
101
|
+
### 次ストーリーへの引き継ぎ事項
|
|
99
102
|
- (実施後に記載)
|
|
100
103
|
|
|
101
104
|
### 改善提案
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 1,
|
|
3
|
-
"symlinks": [
|
|
4
|
-
{
|
|
5
|
-
"link": ".claude/skills/einja-api-development/reference/api-development.md",
|
|
6
|
-
"target": "docs/einja/steering/development/api-development.md"
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
"link": ".claude/skills/einja-backend-architecture/reference/backend-architecture.md",
|
|
10
|
-
"target": "docs/einja/steering/development/backend-architecture.md"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"link": ".claude/skills/einja-coding-standards/reference/commit-rules.md",
|
|
14
|
-
"target": "docs/einja/steering/commit-rules.md"
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"link": ".claude/skills/einja-coding-standards/reference/review-guidelines.md",
|
|
18
|
-
"target": "docs/einja/steering/development/review-guidelines.md"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"link": ".claude/skills/einja-coding-standards/reference/testing-strategy.md",
|
|
22
|
-
"target": "docs/einja/steering/development/testing-strategy.md"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"link": ".claude/skills/einja-component-design/reference/frontend-development.md",
|
|
26
|
-
"target": "docs/einja/steering/development/frontend-development.md"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"link": ".claude/skills/einja-component-design/reference/testing-strategy.md",
|
|
30
|
-
"target": "docs/einja/steering/development/testing-strategy.md"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"link": ".claude/skills/einja-frontend-development/reference/frontend-development.md",
|
|
34
|
-
"target": "docs/einja/steering/development/frontend-development.md"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"link": ".claude/skills/einja-task-commit/reference/commit-rules.md",
|
|
38
|
-
"target": "docs/einja/steering/commit-rules.md"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"link": ".claude/skills/einja-task-qa/reference/acceptance-criteria-and-qa-guide.md",
|
|
42
|
-
"target": "docs/einja/steering/acceptance-criteria-and-qa-guide.md"
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
name: default
|
|
2
|
-
displayName: "Einja ATDD Workflow"
|
|
3
|
-
description: "ATDDワークフロー構成(Next.js、Vibe-Kanban統合)"
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
|
|
6
|
-
# 変数定義(ユーザーがカスタマイズ可能)
|
|
7
|
-
variables:
|
|
8
|
-
# CLAUDE.mdテンプレート用
|
|
9
|
-
PROJECT_NAME: "my-project"
|
|
10
|
-
INSTALL_COMMAND: "pnpm install"
|
|
11
|
-
DEV_COMMAND: "pnpm dev"
|
|
12
|
-
START_COMMAND: "pnpm start"
|
|
13
|
-
FORMAT_COMMAND: "pnpm format"
|
|
14
|
-
# 既存の変数
|
|
15
|
-
BUILD_COMMAND: "pnpm build"
|
|
16
|
-
TEST_COMMAND: "pnpm test"
|
|
17
|
-
LINT_COMMAND: "pnpm lint"
|
|
18
|
-
TYPE_CHECK_COMMAND: "pnpm typecheck"
|
|
19
|
-
PROJECT_STRUCTURE: |
|
|
20
|
-
src/ # ソースコード
|
|
21
|
-
tests/ # テストコード
|
|
22
|
-
CODING_STANDARDS_PATH: "README.md"
|
|
23
|
-
MCP_TOOLS: |
|
|
24
|
-
- Serena MCP: コード分析・編集
|
|
25
|
-
- Playwright MCP: ブラウザテスト
|
|
26
|
-
- GitHub MCP: Issue・PR操作
|
|
27
|
-
- Vibe-Kanban MCP: タスク自動化
|
|
28
|
-
|
|
29
|
-
# MCP設定
|
|
30
|
-
mcpServers:
|
|
31
|
-
- codex
|
|
32
|
-
- context7
|
|
33
|
-
- playwright
|
|
34
|
-
- serena
|
|
35
|
-
- github
|
|
36
|
-
- vibe_kanban
|
|
37
|
-
|
|
38
|
-
# 追加パーミッション
|
|
39
|
-
additionalPermissions:
|
|
40
|
-
- "Bash(npm:*)"
|
|
41
|
-
- "Bash(pnpm:*)"
|
|
42
|
-
- "Bash(npx:*)"
|
|
43
|
-
- "Bash(node:*)"
|
|
44
|
-
- "Bash(yarn:*)"
|
|
45
|
-
- "Bash(bun:*)"
|
|
46
|
-
- "Bash(python3:*)"
|
|
47
|
-
- "Bash(curl:*)"
|
|
48
|
-
- "Bash(wget:*)"
|
|
49
|
-
- "Bash(unzip:*)"
|
|
50
|
-
- "Bash(docker-compose :*)"
|
|
51
|
-
- "Bash(jq:*)"
|
|
52
|
-
- "mcp__codex__codex"
|
|
53
|
-
- "mcp__github__get_pull_request"
|
|
54
|
-
- "mcp__github__get_pull_request_files"
|
|
55
|
-
- "mcp__github__update_pull_request"
|
|
56
|
-
- "mcp__github__list_commits"
|
|
57
|
-
- "mcp__github__get_commit"
|
|
58
|
-
- "mcp__github__get_file_contents"
|
|
59
|
-
- "mcp__github__search_code"
|
|
60
|
-
- "mcp__playwright"
|
|
61
|
-
- "mcp__playwright__browser_navigate"
|
|
62
|
-
- "mcp__playwright__browser_click"
|
|
63
|
-
- "mcp__playwright__browser_wait_for"
|
|
64
|
-
- "mcp__playwright__browser_evaluate"
|
|
65
|
-
- "mcp__playwright__browser_snapshot"
|
|
66
|
-
- "mcp__playwright__browser_console_messages"
|
|
67
|
-
- "mcp__playwright__browser_handle_dialog"
|
|
68
|
-
- "mcp__playwright__browser_type"
|
|
69
|
-
- "mcp__serena"
|
|
70
|
-
- "mcp__serena__activate_project"
|
|
71
|
-
- "mcp__serena__check_onboarding_performed"
|
|
72
|
-
- "mcp__serena__find_file"
|
|
73
|
-
- "mcp__serena__find_referencing_symbols"
|
|
74
|
-
- "mcp__serena__find_symbol"
|
|
75
|
-
- "mcp__serena__get_symbols_overview"
|
|
76
|
-
- "mcp__serena__insert_before_symbol"
|
|
77
|
-
- "mcp__serena__list_dir"
|
|
78
|
-
- "mcp__serena__replace_symbol_body"
|
|
79
|
-
- "mcp__serena__search_for_pattern"
|
|
80
|
-
- "mcp__serena__think_about_collected_information"
|
|
81
|
-
- "mcp__serena__think_about_whether_you_are_done"
|
|
82
|
-
- "Bash(test:*)"
|
|
83
|
-
- "mcp__vibe_kanban__list_projects"
|
|
84
|
-
- "mcp__vibe_kanban__list_tasks"
|
|
85
|
-
- "mcp__vibe_kanban__get_task"
|
|
86
|
-
- "mcp__vibe_kanban__create_task"
|
|
87
|
-
- "mcp__vibe_kanban__update_task"
|
|
88
|
-
- "mcp__vibe_kanban__delete_task"
|
|
89
|
-
- "mcp__vibe_kanban__start_task_attempt"
|
|
90
|
-
- "Bash(gh pr view:*)"
|
|
91
|
-
- "Bash(gh pr close:*)"
|
|
92
|
-
- "Bash(gh pr create:*)"
|
|
93
|
-
- "Bash(gh pr list:*)"
|
|
94
|
-
- "Bash(tree:*)"
|
|
95
|
-
- "Bash(bash:*)"
|
|
96
|
-
- "Bash(./verify.sh:*)"
|
|
97
|
-
- "Bash(gh issue create:*)"
|
|
98
|
-
- "Skill(task-exec)"
|
|
99
|
-
- "Skill(task-qa)"
|
|
100
|
-
|
|
101
|
-
# 追加エージェント
|
|
102
|
-
additionalAgents:
|
|
103
|
-
- frontend-architect
|
|
104
|
-
- design-engineer
|
|
105
|
-
- frontend-coder
|
|
106
|
-
|
|
107
|
-
# 追加コマンド
|
|
108
|
-
additionalCommands:
|
|
109
|
-
- frontend-implement
|
|
110
|
-
- start-dev
|
|
111
|
-
|
|
112
|
-
# 依存関係チェック(init/sync時に自動チェック+インストール)
|
|
113
|
-
requirements:
|
|
114
|
-
# hooksが動作するために必要なnpmパッケージ
|
|
115
|
-
devDependencies:
|
|
116
|
-
"@biomejs/biome": "^1.9.4"
|
|
117
|
-
"typescript": "^5"
|
|
118
|
-
|
|
119
|
-
# 不足時に追加するnpm scripts(キーが存在しない場合のみ追加)
|
|
120
|
-
scripts:
|
|
121
|
-
lint: "biome check ."
|
|
122
|
-
"lint:fix": "biome check --write ."
|
|
123
|
-
format: "biome format ."
|
|
124
|
-
"format:fix": "biome format --write ."
|
|
125
|
-
typecheck: "tsc --noEmit"
|
|
126
|
-
prepush: "{pm} run lint && {pm} run typecheck"
|
|
127
|
-
"task:loop": "npx @einja/dev-cli task:loop"
|
|
128
|
-
"einja:sync": "npx @einja/dev-cli sync"
|
|
129
|
-
|
|
130
|
-
# システムコマンド(警告表示のみ、自動インストールしない)
|
|
131
|
-
systemCommands:
|
|
132
|
-
- command: jq
|
|
133
|
-
description: "JSON processor(全hooksで使用)"
|
|
134
|
-
install:
|
|
135
|
-
darwin: "brew install jq"
|
|
136
|
-
linux: "sudo apt-get install jq"
|
|
137
|
-
win32: "choco install jq"
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
# Phase 1-1: データベース基盤構築 QAテスト結果
|
|
2
|
-
|
|
3
|
-
## テスト対象タスク
|
|
4
|
-
- **タスクID**: 1.1.1~1.1.4
|
|
5
|
-
- **タスク名**: データベース基盤構築(ユーザーデータモデル)
|
|
6
|
-
- **実装日**: 2025-01-15
|
|
7
|
-
- **テスター**: 山田太郎
|
|
8
|
-
- **最終更新**: 2025-01-15 16:30
|
|
9
|
-
|
|
10
|
-
## テストサマリー
|
|
11
|
-
| ステータス | 件数 |
|
|
12
|
-
|----------|-----|
|
|
13
|
-
| ✅ PASS | 12 |
|
|
14
|
-
| ❌ FAIL | 3 |
|
|
15
|
-
| ⚠️ PARTIAL | 2 |
|
|
16
|
-
| 🔄 未実施 | 0 |
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 必須自動テスト結果
|
|
21
|
-
|
|
22
|
-
### 実行コマンド
|
|
23
|
-
```bash
|
|
24
|
-
# 1. ユニットテスト
|
|
25
|
-
pnpm test
|
|
26
|
-
|
|
27
|
-
# 2. E2Eテスト(該当する場合)
|
|
28
|
-
pnpm test:e2e
|
|
29
|
-
|
|
30
|
-
# 3. Lintチェック
|
|
31
|
-
pnpm lint
|
|
32
|
-
|
|
33
|
-
# 4. ビルドチェック
|
|
34
|
-
pnpm build
|
|
35
|
-
|
|
36
|
-
# 5. 型チェック(TypeScript)
|
|
37
|
-
pnpm typecheck
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### 結果
|
|
41
|
-
| テスト項目 | ステータス | 備考 |
|
|
42
|
-
|----------|----------|------|
|
|
43
|
-
| ユニットテスト | ✅ | 全テスト通過 |
|
|
44
|
-
| E2Eテスト | - | 対象なし |
|
|
45
|
-
| Lintチェック | ✅ | - |
|
|
46
|
-
| ビルドチェック | ✅ | - |
|
|
47
|
-
| 型チェック | ✅ | - |
|
|
48
|
-
|
|
49
|
-
**重要**: 上記のいずれか1つでも失敗した場合、全体ステータスは**❌ FAIL**となります。
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## タスク 1.1.1: データベーススキーマ設計
|
|
54
|
-
|
|
55
|
-
### 受け入れ条件
|
|
56
|
-
- AC1.1: Given DBが起動している When マイグレーションを実行 Then Userテーブルが作成される
|
|
57
|
-
- AC1.2: Given DBが起動している When マイグレーションを実行 Then AuthTokenテーブルが作成される
|
|
58
|
-
- AC1.3: Given DBが起動している When マイグレーションを実行 Then UserSessionテーブルが作成される
|
|
59
|
-
- AC1.4: Given DBが起動している When マイグレーションを実行 Then LoginHistoryテーブルが作成される
|
|
60
|
-
|
|
61
|
-
### テストシナリオ
|
|
62
|
-
|
|
63
|
-
#### データベース構造確認
|
|
64
|
-
|
|
65
|
-
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
66
|
-
|----|------|---------|--------|------|------|
|
|
67
|
-
| 1 | pnpm exec prisma migrate status 実行 | マイグレーション適用状態 | すべてのマイグレーションが適用済み | ✅ | 4件すべて適用済み |
|
|
68
|
-
| 2 | - | Userテーブル存在 | テーブルが存在する | ✅ | - |
|
|
69
|
-
| 3 | - | AuthTokenテーブル存在 | テーブルが存在する | ✅ | - |
|
|
70
|
-
| 4 | - | UserSessionテーブル存在 | テーブルが存在する | ✅ | - |
|
|
71
|
-
| 5 | - | LoginHistoryテーブル存在 | テーブルが存在する | ✅ | - |
|
|
72
|
-
| 6 | pnpm exec prisma db pull 実行 | Userテーブル構造 | id, email, name, avatarUrl, isActive, lastLoginAt, createdAt, updatedAt | ✅ | - |
|
|
73
|
-
| 7 | - | AuthTokenテーブル構造 | id, userId, token, type, expiresAt, isUsed | ✅ | - |
|
|
74
|
-
| 8 | - | 外部キー制約 | 全テーブルでuserIdの外部キーが正常 | ✅ | - |
|
|
75
|
-
| 9 | - | インデックス | token, userId等のインデックスが存在 | ✅ | - |
|
|
76
|
-
|
|
77
|
-
### 全体ステータス: ✅ PASS
|
|
78
|
-
|
|
79
|
-
#### 主な問題点
|
|
80
|
-
- なし
|
|
81
|
-
|
|
82
|
-
#### 対応策
|
|
83
|
-
- なし
|
|
84
|
-
|
|
85
|
-
#### エビデンス
|
|
86
|
-
- ログファイル: `qa-tests/phase1/evidence/1-1-1-migration.log`
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## タスク 1.1.2: Prismaマイグレーション作成
|
|
91
|
-
|
|
92
|
-
### 受け入れ条件
|
|
93
|
-
- AC2.1: Given プロジェクトがある When ls prisma/schema.prisma Then スキーマファイルが存在する
|
|
94
|
-
- AC2.2: Given スキーマが定義されている When pnpm exec prisma migrate dev Then マイグレーションファイルが生成される
|
|
95
|
-
- AC2.3: Given マイグレーションがある When pnpm exec prisma migrate status Then すべて適用済み
|
|
96
|
-
|
|
97
|
-
### テストシナリオ
|
|
98
|
-
|
|
99
|
-
#### マイグレーション確認
|
|
100
|
-
|
|
101
|
-
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
102
|
-
|----|------|---------|--------|------|------|
|
|
103
|
-
| 1 | ls prisma/schema.prisma 実行 | スキーマファイル存在 | ファイルが存在する | ✅ | - |
|
|
104
|
-
| 2 | pnpm exec prisma migrate dev 実行 | マイグレーション生成 | マイグレーションファイルが生成される | ❌ | **エラー**: P3006 - 既存データとの競合 |
|
|
105
|
-
| 3 | pnpm exec prisma migrate status 実行 | マイグレーション状態 | すべて適用済み | ⚠️ | 1件未適用: 20250115100300_create_login_histories |
|
|
106
|
-
| 4 | pnpm exec prisma validate 実行 | スキーマバリデーション | バリデーション成功 | ✅ | - |
|
|
107
|
-
|
|
108
|
-
### 全体ステータス: ❌ FAIL
|
|
109
|
-
|
|
110
|
-
#### 主な問題点
|
|
111
|
-
1. **マイグレーション競合**: 既存のusersテーブルとの競合が発生
|
|
112
|
-
2. **未適用マイグレーション**: login_historiesテーブルのマイグレーションが未適用
|
|
113
|
-
3. **影響範囲**: データベース基盤が不完全、次タスクへの影響大
|
|
114
|
-
|
|
115
|
-
#### 対応策
|
|
116
|
-
- 既存テーブルとの競合を解決するため、マイグレーションファイルを手動修正
|
|
117
|
-
- `pnpm exec prisma migrate resolve --applied 20250115100300_create_login_histories`で強制適用
|
|
118
|
-
|
|
119
|
-
#### エビデンス
|
|
120
|
-
- エラーログ: `qa-tests/phase1/evidence/1-1-2-migration-error.log`
|
|
121
|
-
- スクリーンショット: `qa-tests/phase1/evidence/1-1-2-error.png`
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## タスク 1.1.3: リポジトリ層実装
|
|
126
|
-
|
|
127
|
-
### 受け入れ条件
|
|
128
|
-
- AC3.1: Given UserRepositoryがある When findByEmail When ユーザーが取得できる
|
|
129
|
-
- AC3.2: Given UserRepositoryがある When create Then ユーザーが作成できる
|
|
130
|
-
- AC3.3: Given AuthTokenRepositoryがある When create Then トークンが作成できる
|
|
131
|
-
- AC3.4: Given AuthTokenRepositoryがある When findByToken Then トークンが取得できる
|
|
132
|
-
- AC3.5: Given AuthTokenRepositoryがある When markAsUsed Then トークンが使用済みになる
|
|
133
|
-
|
|
134
|
-
### テストシナリオ
|
|
135
|
-
|
|
136
|
-
#### 単体テスト実行
|
|
137
|
-
|
|
138
|
-
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
139
|
-
|----|------|---------|--------|------|------|
|
|
140
|
-
| 1 | pnpm test UserRepository.findByEmail 実行 | ユーザー取得 | テスト成功 | ✅ | - |
|
|
141
|
-
| 2 | pnpm test UserRepository.create 実行 | ユーザー作成 | テスト成功 | ✅ | - |
|
|
142
|
-
| 3 | pnpm test AuthTokenRepository.create 実行 | トークン作成 | テスト成功 | ✅ | - |
|
|
143
|
-
| 4 | pnpm test AuthTokenRepository.findByToken 実行 | トークン取得 | テスト成功 | ❌ | **エラー**: TypeError: Cannot read property 'token' of undefined |
|
|
144
|
-
| 5 | pnpm test AuthTokenRepository.markAsUsed 実行 | トークン使用済み化 | テスト成功 | ⚠️ | 動作するがトランザクション処理が未実装 |
|
|
145
|
-
|
|
146
|
-
### 全体ステータス: ⚠️ PARTIAL
|
|
147
|
-
|
|
148
|
-
#### 主な問題点
|
|
149
|
-
1. **トークン取得エラー**: トークン検索処理に不具合
|
|
150
|
-
2. **トランザクション未実装**: 競合状態での整合性が保証されない
|
|
151
|
-
|
|
152
|
-
#### 対応策
|
|
153
|
-
- トークン取得処理のnullチェックを追加
|
|
154
|
-
- トランザクション処理をPrismaのinteractiveTransactionsで実装
|
|
155
|
-
|
|
156
|
-
#### エビデンス
|
|
157
|
-
- テストログ: `qa-tests/phase1/evidence/1-1-3-unit-test.log`
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## タスク 1.1.4: 要件1シナリオテスト作成・実行
|
|
162
|
-
|
|
163
|
-
### 受け入れ条件
|
|
164
|
-
- AC4.1: Given テスト環境がある When ユーザー作成・取得テスト Then テストが通る
|
|
165
|
-
- AC4.2: Given テスト環境がある When トークン保存・検証テスト Then テストが通る
|
|
166
|
-
- AC4.3: Given テスト環境がある When セッション管理テスト Then テストが通る
|
|
167
|
-
|
|
168
|
-
### テストシナリオ
|
|
169
|
-
|
|
170
|
-
#### ユーザー作成・取得フロー
|
|
171
|
-
|
|
172
|
-
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
173
|
-
|----|------|---------|--------|------|------|
|
|
174
|
-
| 1 | 新規ユーザー作成API呼び出し | DBにレコード作成 | ユーザーレコードが作成される | ✅ | - |
|
|
175
|
-
| 2 | メールアドレスでユーザー取得 | ユーザー取得 | 作成したユーザーが取得できる | ✅ | - |
|
|
176
|
-
| 3 | 重複メールアドレスで作成試行 | エラー処理 | 一意制約エラーが返る | ✅ | - |
|
|
177
|
-
| 4 | 無効なメールアドレスで作成試行 | バリデーション | バリデーションエラーが返る | ❌ | バリデーションがスキップされDBエラー発生 |
|
|
178
|
-
|
|
179
|
-
#### トークン保存・検証フロー
|
|
180
|
-
|
|
181
|
-
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
182
|
-
|----|------|---------|--------|------|------|
|
|
183
|
-
| 1 | 認証トークン生成API呼び出し | トークン生成 | 256ビットのトークンが生成される | ✅ | - |
|
|
184
|
-
| 2 | トークンをDBに保存 | トークン保存 | typeとexpiresAtとともに保存される | ✅ | - |
|
|
185
|
-
| 3 | 有効なトークンで検証API呼び出し | トークン検証 | 有効なトークンが検証される | ✅ | - |
|
|
186
|
-
| 4 | 期限切れトークンで検証API呼び出し | エラー処理 | 期限切れエラーが返る | ✅ | - |
|
|
187
|
-
| 5 | 使用済みトークンで検証API呼び出し | エラー処理 | 使用済みエラーが返る | ⚠️ | エラーメッセージが「Invalid token」で不明確 |
|
|
188
|
-
| 6 | トークン無効化API呼び出し | フラグ更新 | isUsedフラグがtrueになる | ✅ | - |
|
|
189
|
-
|
|
190
|
-
#### セッション管理フロー
|
|
191
|
-
|
|
192
|
-
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
193
|
-
|----|------|---------|--------|------|------|
|
|
194
|
-
| 1 | ユーザーセッション作成 | DBにレコード作成 | UserSessionレコードが作成される | ✅ | refreshTokenとexpiresAtが正しく保存 |
|
|
195
|
-
| 2 | セッションIDで取得 | セッション取得 | セッションが取得できる | ✅ | - |
|
|
196
|
-
| 3 | セッション削除API呼び出し | セッション削除 | セッションが削除される | ✅ | - |
|
|
197
|
-
| 4 | 期限切れセッション自動削除確認 | 自動削除 | 期限切れセッションが自動削除される | ❌ | 自動削除バッチが未実装 |
|
|
198
|
-
|
|
199
|
-
### 全体ステータス: ⚠️ PARTIAL
|
|
200
|
-
|
|
201
|
-
#### 主な問題点
|
|
202
|
-
1. **バリデーション不足**: アプリケーション層でのバリデーションが欠如
|
|
203
|
-
2. **エラーメッセージ**: ユーザーフレンドリーなエラーメッセージが不足
|
|
204
|
-
3. **自動削除未実装**: 期限切れセッションの自動削除機能が未実装
|
|
205
|
-
|
|
206
|
-
#### 対応策
|
|
207
|
-
- Zodを使用してアプリケーション層でバリデーション実装
|
|
208
|
-
- エラーコードに対応したメッセージマッピングを作成
|
|
209
|
-
- cronジョブまたはPrisma middlewareで自動削除を実装
|
|
210
|
-
|
|
211
|
-
#### エビデンス
|
|
212
|
-
- テストログ: `qa-tests/phase1/evidence/1-1-4-integration-test.log`
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## 統合テスト結果サマリー
|
|
217
|
-
|
|
218
|
-
### フェーズ1-1全体結果
|
|
219
|
-
- **全体ステータス**: ⚠️ PARTIAL
|
|
220
|
-
- **完了タスク**: 4/4(ただし問題あり)
|
|
221
|
-
- **テスト合格率**: 70% (12/17)
|
|
222
|
-
|
|
223
|
-
### 修正が必要な項目
|
|
224
|
-
1. **優先度HIGH**:
|
|
225
|
-
- [ ] マイグレーション競合の解消
|
|
226
|
-
- [ ] トークン取得処理のバグ修正
|
|
227
|
-
- [ ] アプリケーション層のバリデーション実装
|
|
228
|
-
|
|
229
|
-
2. **優先度MEDIUM**:
|
|
230
|
-
- [ ] エラーメッセージの改善
|
|
231
|
-
- [ ] トランザクション処理の実装
|
|
232
|
-
- [ ] 期限切れセッション自動削除バッチの実装
|
|
233
|
-
|
|
234
|
-
### 次フェーズへの引き継ぎ事項
|
|
235
|
-
1. データベース基盤は概ね完成したが、いくつかの修正が必要
|
|
236
|
-
2. 修正完了後、フェーズ1-2のメール送信基盤に進む
|
|
237
|
-
3. 単体テストの自動化とCI/CD統合を検討
|
|
238
|
-
|
|
239
|
-
### 改善提案
|
|
240
|
-
- マイグレーション実行前の環境チェックスクリプト作成
|
|
241
|
-
- リポジトリ層の単体テストカバレッジ向上(現在60%)
|
|
242
|
-
- エラーハンドリングの統一的な実装パターン確立
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## 報告と対応
|
|
247
|
-
|
|
248
|
-
### 失敗原因分類
|
|
249
|
-
<!-- 該当する分類にチェック -->
|
|
250
|
-
- [x] **A: 実装ミス** → task-executerへ差し戻し
|
|
251
|
-
- [ ] **B: 要件齟齬** → requirements.md修正 → task-executerへ差し戻し
|
|
252
|
-
- [ ] **C: 設計不備** → design.md修正 → task-executerへ差し戻し
|
|
253
|
-
- [ ] **D: 環境問題** → qa再実行
|
|
254
|
-
|
|
255
|
-
### task-executerへの差し戻し(該当する場合)
|
|
256
|
-
以下の項目について修正が必要:
|
|
257
|
-
1. タスク1.1.2: マイグレーション競合の解消
|
|
258
|
-
2. タスク1.1.3: トークン取得処理のバグ修正
|
|
259
|
-
3. タスク1.1.4: バリデーション実装
|
|
260
|
-
|
|
261
|
-
### 修正優先度
|
|
262
|
-
- **即座対応**: マイグレーション競合(フェーズ1-2以降に影響)
|
|
263
|
-
- **1週間以内**: トークン取得バグ(セキュリティに関わる)
|
|
264
|
-
- **2週間以内**: その他改善項目
|
|
265
|
-
|
|
266
|
-
### 回避策(該当する場合)
|
|
267
|
-
- マイグレーション競合: 一時的に既存テーブルをリネームして回避可能
|
|
268
|
-
- トークン取得バグ: 暫定的にデバッグログを追加して原因特定を進める
|