create-einja-app 0.3.2 → 0.3.4

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 (65) hide show
  1. package/README.md +33 -0
  2. package/dist/cli.js +60 -64
  3. package/dist/cli.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/default/.changeset/config.json +11 -0
  6. package/templates/default/.claude/hooks/einja/plan-mode-skill-loader.sh +5 -1
  7. package/templates/default/.claude/settings.json +14 -4
  8. package/templates/default/.claude/skills/_einja-general-context-loader/SKILL.md +258 -0
  9. package/templates/default/.claude/skills/_einja-output-format/SKILL.md +211 -0
  10. package/templates/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
  11. package/templates/default/.claude/skills/_einja-spec-context-loader/SKILL.md +181 -0
  12. package/templates/default/.claude/skills/cli-package-specs/SKILL.md +294 -0
  13. package/templates/default/.einja-sync.json +1 -1
  14. package/templates/default/.github/release.yml +10 -0
  15. package/templates/default/.github/workflows/changeset-status.yml +60 -0
  16. package/templates/default/.github/workflows/deploy-stable-branches.yml +289 -59
  17. package/templates/default/CLAUDE.md +50 -10
  18. package/templates/default/README.md +20 -8
  19. package/templates/default/docs/plans/agile-munching-knuth.md +161 -0
  20. package/templates/default/docs/plans/agile-riding-nova.md +158 -0
  21. package/templates/default/docs/plans/agile-wibbling-dusk.md +91 -0
  22. package/templates/default/docs/plans/ancient-watching-otter.md +152 -0
  23. package/templates/default/docs/plans/bright-sauteeing-bumblebee.md +30 -0
  24. package/templates/default/docs/plans/composed-doodling-mountain.md +362 -0
  25. package/templates/default/docs/plans/dazzling-foraging-cascade.md +32 -0
  26. package/templates/default/docs/plans/enchanted-wiggling-ember-agent-a5befd57d0ca4c7c7.md +177 -0
  27. package/templates/default/docs/plans/enchanted-wiggling-ember.md +170 -0
  28. package/templates/default/docs/plans/federated-questing-kahan.md +47 -0
  29. package/templates/default/docs/plans/flickering-pondering-hearth.md +26 -0
  30. package/templates/default/docs/plans/fluttering-snuggling-sprout.md +172 -0
  31. package/templates/default/docs/plans/generic-sleeping-snowglobe-agent-a41d8da.md +179 -0
  32. package/templates/default/docs/plans/generic-sleeping-snowglobe.md +108 -0
  33. package/templates/default/docs/plans/generic-snuggling-pudding.md +57 -0
  34. package/templates/default/docs/plans/glistening-conjuring-cascade.md +42 -0
  35. package/templates/default/docs/plans/idempotent-wiggling-cherny.md +122 -0
  36. package/templates/default/docs/plans/linear-gathering-hejlsberg.md +596 -0
  37. package/templates/default/docs/plans/recursive-fluttering-mitten.md +176 -0
  38. package/templates/default/docs/plans/todo-create-einja-app-ux-fix.md +16 -0
  39. package/templates/default/docs/plans/todo-direnv-hang-fix.md +12 -0
  40. package/templates/default/docs/plans/todo-github-actions-release-workflow.md +34 -0
  41. package/templates/default/docs/plans/todo-glistening-conjuring-cascade.md +20 -0
  42. package/templates/default/docs/plans/todo-issue-spec-rename.md +24 -0
  43. package/templates/default/docs/plans/todo-skill-creator-upgrade.md +18 -0
  44. package/templates/default/docs/plans/todo-unified-crafting-valiant.md +23 -0
  45. package/templates/default/docs/plans/unified-crafting-valiant.md +60 -0
  46. package/templates/default/docs/plans/velvety-chasing-spark.md +28 -0
  47. package/templates/default/docs/plans/wondrous-strolling-crystal-agent-a0615fc.md +215 -0
  48. package/templates/default/docs/plans/wondrous-strolling-crystal.md +182 -0
  49. package/templates/default/docs/plans/zesty-roaming-steele.md +74 -0
  50. package/templates/default/gitignore +6 -2
  51. package/templates/default/package.json +6 -2
  52. package/templates/default/pnpm-lock.yaml +547 -0
  53. package/templates/default/scripts/ensure-serena.sh +28 -9
  54. package/templates/default/scripts/env-rotate-secrets.ts +66 -6
  55. package/templates/default/scripts/init-github.ts +363 -0
  56. package/templates/default/scripts/init.sh +11 -5
  57. package/templates/default/scripts/setup-dev.ts +16 -1
  58. package/templates/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
  59. package/templates/default/.claude/skills/create-einja-app-release/SKILL.md +0 -186
  60. package/templates/default/.claude/skills/dev-cli-release/SKILL.md +0 -173
  61. package/templates/default/.cursor/commands/spec-create.md +0 -227
  62. package/templates/default/.cursor/commands/task-exec.md +0 -287
  63. package/templates/default/.cursor/commands/update-docs-by-task-specs.md +0 -448
  64. package/templates/default/packages/server-core/src/__generated__/fabbrica/index.d.ts +0 -270
  65. package/templates/default/packages/server-core/src/__generated__/fabbrica/index.js +0 -484
@@ -0,0 +1,170 @@
1
+ # task-spec → issue-spec リネーム + コマンド→Skill移行
2
+
3
+ ## Context
4
+
5
+ 現在の仕様書関連の命名(`spec-create`, `task-spec-*`, `agents/specs/`)はIssue単位で仕様書を作成するという実態と乖離している。`issue-spec` に統一することで意味的な明確さを向上させる。同時に、`spec-create` と `task-exec` をコマンドからSkillへ移行し、呼び出し方法を統一する。
6
+
7
+ ## リネーム対応表
8
+
9
+ ### ファイル移動・リネーム
10
+
11
+ | Before | After |
12
+ |--------|-------|
13
+ | `.claude/commands/einja/spec-create.md` | `.claude/skills/einja-issue-spec-create/SKILL.md` |
14
+ | `.claude/commands/einja/task-exec.md` | `.claude/skills/einja-task-exec/SKILL.md` |
15
+ | `.claude/commands/einja/update-docs-by-task-specs.md` | `.claude/commands/einja/update-docs-by-issue-specs.md` |
16
+ | `.claude/skills/einja-task-spec-generator/` | `.claude/skills/einja-issue-spec-generator/` |
17
+ | `.claude/skills/einja-task-spec-validator/` | `.claude/skills/einja-issue-spec-validator/` |
18
+ | `.claude/agents/einja/specs/` | `.claude/agents/einja/issue-specs/` |
19
+
20
+ ### エージェントファイルリネーム(`issue-specs/` 内)
21
+
22
+ ディレクトリ名 `issue-specs/` でスコープを担保し、ファイル名は短縮。
23
+
24
+ | Before | After |
25
+ |--------|-------|
26
+ | `spec-requirements-generator.md` | `requirements-generator.md` |
27
+ | `spec-design-generator.md` | `design-generator.md` |
28
+ | `spec-qa-generator.md` | `qa-generator.md` |
29
+ | `spec-tasks-generator.md` | `tasks-generator.md` |
30
+ | `spec-tasks-validator.md` | `tasks-validator.md` |
31
+
32
+ ### 呼び出し方法の変更
33
+
34
+ | Before | After |
35
+ |--------|-------|
36
+ | `/einja:spec-create <args>` | Skill tool `einja-issue-spec-create` |
37
+ | `/einja:task-exec <args>` | Skill tool `einja-task-exec` |
38
+ | `/einja:update-docs-by-task-specs <args>` | `/einja:update-docs-by-issue-specs <args>` |
39
+
40
+ ## 実装計画
41
+
42
+ ### Phase 1: ファイル移動・作成(並列実行可能)
43
+
44
+ **TG-1.1: エージェントディレクトリ移動+ファイルリネーム**
45
+ - `git mv .claude/agents/einja/specs/ .claude/agents/einja/issue-specs/`
46
+ - 各ファイルを `git mv` で短縮名にリネーム(`spec-X-generator` → `X-generator`)
47
+ - 対象: 5ファイル
48
+
49
+ **TG-1.2: スキルディレクトリリネーム**
50
+ - `git mv .claude/skills/einja-task-spec-generator/ .claude/skills/einja-issue-spec-generator/`
51
+ - `git mv .claude/skills/einja-task-spec-validator/ .claude/skills/einja-issue-spec-validator/`
52
+ - 対象: 4ファイル(SKILL.md × 2 + references/ × 2)
53
+
54
+ **TG-1.3: spec-create → einja-issue-spec-create Skill移行**
55
+ - `.claude/skills/einja-issue-spec-create/SKILL.md` を新規作成(spec-create.mdの内容を移行)
56
+ - 旧 `.claude/commands/einja/spec-create.md` を削除
57
+ - 内部のエージェントパス参照を `../../agents/einja/issue-specs/{短縮名}` に更新
58
+
59
+ **TG-1.4: task-exec → einja-task-exec Skill移行**
60
+ - `.claude/skills/einja-task-exec/SKILL.md` を新規作成(task-exec.mdの内容を移行)
61
+ - 旧 `.claude/commands/einja/task-exec.md` を削除
62
+
63
+ **TG-1.5: update-docs-by-task-specs リネーム**
64
+ - `git mv` でファイルリネーム → `update-docs-by-issue-specs.md`
65
+ - 内部テキストの `task-specs` → `issue-specs` 更新
66
+
67
+ ### Phase 2: 参照更新(Phase 1完了後、並列実行可能)
68
+
69
+ **TG-2.1: エージェント内部参照更新**(10ファイル)
70
+
71
+ | ファイル | 更新内容 |
72
+ |---------|---------|
73
+ | `.claude/agents/einja/issue-specs/tasks-generator.md` | Skillリンク `../../skills/einja-task-spec-generator/` → `../../skills/einja-issue-spec-generator/`、`spec-create` → `einja-issue-spec-create` |
74
+ | `.claude/agents/einja/issue-specs/tasks-validator.md` | Skillリンク `../../skills/einja-task-spec-validator/` → `../../skills/einja-issue-spec-validator/`、`spec-create` → `einja-issue-spec-create` |
75
+ | `.claude/agents/einja/issue-specs/requirements-generator.md` | `name:` フィールド更新、内部テキストの旧名参照 |
76
+ | `.claude/agents/einja/issue-specs/design-generator.md` | 同上 |
77
+ | `.claude/agents/einja/issue-specs/qa-generator.md` | 同上 |
78
+ | `.claude/agents/einja/task/task-executer.md` | `/einja:spec-create` → `einja-issue-spec-create`、task-exec コマンド→Skill 文言更新 |
79
+ | `.claude/agents/einja/task/task-reviewer.md` | `task-exec` コマンド参照更新 |
80
+ | `.claude/agents/einja/task/task-modification-analyzer.md` | `task-exec` コマンド参照更新 |
81
+ | `.claude/agents/einja/task/task-qa.md` | `task-exec` 参照更新 |
82
+ | `.claude/agents/einja/docs/docs-updater.md` | `update-docs-by-task-specs` → `update-docs-by-issue-specs` |
83
+
84
+ **TG-2.2: スキル内部参照更新**(8ファイル)
85
+
86
+ | ファイル | 更新内容 |
87
+ |---------|---------|
88
+ | `.claude/skills/einja-issue-spec-generator/SKILL.md` | タイトル・内部テキスト: `task-spec-generator` → `issue-spec-generator`、エージェント名更新、相対パス `specs/` → `issue-specs/` 更新 |
89
+ | `.claude/skills/einja-issue-spec-validator/SKILL.md` | タイトル・内部テキスト: `task-spec-validator` → `issue-spec-validator`、エージェント名更新、相対パス `specs/` → `issue-specs/` 更新 |
90
+ | `.claude/skills/einja-task-qa/SKILL.md` | `spec-qa-generator` → `qa-generator`、`task-exec` コマンド→Skill文言 |
91
+ | `.claude/skills/einja-task-qa/references/troubleshooting.md` | `spec-requirements-generator` → `requirements-generator` |
92
+ | `.claude/skills/einja-task-qa/references/usage-patterns.md` | `task-exec` 使用例テキスト更新 |
93
+ | `.claude/skills/einja-task-commit/SKILL.md` | `task-exec` コマンド→Skill文言更新 |
94
+ | `.claude/skills/einja-general-context-loader/SKILL.md` | `/einja:spec-create` → `einja-issue-spec-create` |
95
+ | `.claude/skills/einja-spec-context-loader/SKILL.md` | `/einja:spec-create` → `einja-issue-spec-create`(4箇所) |
96
+ | `.claude/skills/einja-skill-first/SKILL.md` | `spec-create` → `einja-issue-spec-create`(3箇所) |
97
+
98
+ **TG-2.3: コマンド/設定ファイル参照更新**(4ファイル)
99
+
100
+ | ファイル | 更新内容 |
101
+ |---------|---------|
102
+ | `.claude/commands/einja/issue-exec.md` | `/einja:task-exec` → `einja-task-exec` Skill(3箇所: 行103, 206, 394) |
103
+ | `.claude/commands/einja/sync-cursor-commands.md` | 変換元パスを Skill パスに更新、エージェントパス `agents/specs/` → `agents/issue-specs/`、エージェント名短縮 |
104
+ | `.claude/commands/einja/update-docs-by-issue-specs.md` | 内部テキスト更新 |
105
+ | `.einja-sync.json` | `update-docs-by-task-specs.md` → `update-docs-by-issue-specs.md`(※他のリネーム対象は未登録のため変更不要) |
106
+
107
+ **TG-2.4: docs/einja/ 参照更新**(5-6ファイル)
108
+
109
+ | ファイル | 更新内容 |
110
+ |---------|---------|
111
+ | `docs/einja/steering/development-workflow.md` | `/einja:spec-create` → `einja-issue-spec-create`、`/einja:task-exec` → `einja-task-exec`(多数) |
112
+ | `docs/einja/steering/task-management.md` | spec-create、task-exec、update-docs-by-task-specs 参照更新 |
113
+ | `docs/einja/steering/acceptance-criteria-and-qa-guide.md` | spec-create 参照更新 |
114
+ | `docs/einja/instructions/task-execute.md` | spec-create、task-exec、エージェント名参照(多数) |
115
+ | `docs/einja/instructions/issue-exec-workflow.md` | spec-create、task-exec 参照更新 |
116
+
117
+ **TG-2.5: CLAUDE.md + README.md 更新**
118
+
119
+ | ファイル | 更新箇所 | Before → After |
120
+ |---------|---------|---------------|
121
+ | `CLAUDE.md` | Skill/コマンドテーブル | `einja:spec-create` → `einja-issue-spec-create` |
122
+ | `CLAUDE.md` | Skill/コマンドテーブル | `einja:task-exec` → `einja-task-exec` |
123
+ | `CLAUDE.md` | Skill/コマンドテーブル | `einja:update-docs-by-task-specs` → `einja:update-docs-by-issue-specs` |
124
+ | `CLAUDE.md` | サブエージェント一覧 | `spec-requirements-generator` → `requirements-generator` 等(短縮名) |
125
+ | `README.md` | 行60 | `/einja:spec-create` → `einja-issue-spec-create`、`/einja:task-exec` → `einja-task-exec` |
126
+
127
+ ### Phase 3: 検証
128
+
129
+ **TG-3.1: 参照整合性チェック**
130
+
131
+ 除外対象: `.bak/`, `.cursor/`, `.einja-sync-backups/`, `docs/specs/issues/`(履歴エビデンス), `docs/plans/`(作業記録)
132
+
133
+ ```bash
134
+ # 旧パス残存チェック
135
+ grep -r "agents/einja/specs/" --include='*.md' --include='*.json' | grep -v '.bak/' | grep -v '.cursor/' | grep -v '.einja-sync-backups/' | grep -v 'docs/specs/' | grep -v 'docs/plans/'
136
+ grep -r "agents/specs/" --include='*.md' --include='*.json' | grep -v '.bak/' | grep -v '.cursor/' | grep -v '.einja-sync-backups/' | grep -v 'docs/specs/' | grep -v 'docs/plans/'
137
+
138
+ # 旧Skill名残存チェック
139
+ grep -r "task-spec-generator\|task-spec-validator" --include='*.md' --include='*.json' | grep -v '.bak/' | grep -v 'docs/plans/'
140
+
141
+ # 旧コマンド呼び出し残存チェック
142
+ grep -r "/einja:spec-create\|/einja:task-exec" --include='*.md' | grep -v '.bak/' | grep -v '.cursor/' | grep -v 'docs/plans/'
143
+
144
+ # 旧コマンド名残存チェック
145
+ grep -r "update-docs-by-task-specs" --include='*.md' --include='*.json' | grep -v '.bak/' | grep -v 'docs/plans/'
146
+
147
+ # 旧エージェント名残存チェック
148
+ grep -r "spec-requirements-generator\|spec-design-generator\|spec-qa-generator\|spec-tasks-generator\|spec-tasks-validator" --include='*.md' --include='*.json' | grep -v '.bak/' | grep -v '.cursor/' | grep -v 'issue-specs/' | grep -v 'docs/specs/' | grep -v 'docs/plans/'
149
+ ```
150
+
151
+ **TG-3.2: ビルド・テスト・クリーンアップ**
152
+ - `pnpm prepush` 通過確認
153
+ - `git diff --stat` で変更ファイル一覧確認
154
+ - `.cursor/commands/` 配下の旧ファイル(`spec-create.md`, `task-exec.md`, `update-docs-by-task-specs.md`)を手動削除
155
+ - `sync-cursor-commands` を実行してCursorルール再生成確認
156
+
157
+ ## リスク・注意事項
158
+
159
+ 1. **task-exec vs task-executer の混同**: `task-exec` は移行対象だが `task-executer` はエージェント名でリネーム対象外。置換時に `/einja:task-exec` や `task-exec コマンド` のみ対象とし、`task-executer` は除外する正規表現が必須
160
+ 2. **参照箇所の膨大さ**: 約50-55ファイル。Phase 3 の grep 検証でゼロ残存を確認してからコミット
161
+ 3. **`.einja-sync.json`**: `update-docs-by-task-specs.md` のみ登録あり(他のリネーム対象は未登録なので変更は1エントリのみ)
162
+ 4. **settings.json に customAgents セクションなし**: エージェント名はファイル名ベースで自動解決されるため、ファイルリネームのみで有効
163
+ 5. **エージェント name: フィールド**: 各エージェント定義の frontmatter `name:` を短縮名に更新必要
164
+ 6. **Cursor互換**: `sync-cursor-commands.md` の変換元パスを更新し、移行後に再生成を実行
165
+
166
+ ## 対象ファイル総数(確定)
167
+
168
+ - 移動/リネーム: 約15ファイル
169
+ - 参照更新: 約35-40ファイル
170
+ - 合計: 約50-55ファイル
@@ -0,0 +1,47 @@
1
+ # Plan: README.md 古い情報の修正
2
+
3
+ ## Context
4
+
5
+ README.md の徹底調査により、プロジェクトの実態と乖離した記述が **14件** 発見された。開発者向けセクションだけでなく、パッケージ利用者向けセクション(create-einja-app / @einja/dev-cli の使い方)にも複数の古い情報がある。
6
+
7
+ ## 修正対象ファイル
8
+
9
+ - `README.md`
10
+
11
+ ## 修正一覧
12
+
13
+ ### A. パッケージ利用者向けセクション(行7-98)
14
+
15
+ | # | 行 | 深刻度 | 問題 | 修正内容 |
16
+ |---|-----|--------|------|---------|
17
+ | A1 | 59-63 | 高 | `.claude/skills/` の説明が「コーディング規約、コンポーネント設計ガイド」 | 「ATDDワークフロー用スキル(タスク実行、QAテスト、コミット管理、コンフリクト解消等)」に修正 |
18
+ | A2 | 63 | 高 | `.claude/hooks/` を「Git Hooks」と記載 | 「Claude Code Hooks(コード品質チェック、型検証、機密情報検出等)」に修正 |
19
+ | A3 | 63 | 中 | `.claude/settings.json` を「MCPサーバー設定」と記載 | initで実際に作成されるのは `.mcp.json`。settings.jsonの記述を修正 |
20
+ | A4 | 64-68 | 中 | `docs/einja/` の説明が不完全 | `instructions/`(操作手順書)と `example/`(サンプル仕様書)も追加 |
21
+ | A5 | 68 | 低 | 「`package.json` にスクリプトが追加される」の記述が不完全 | `lint`, `format`, `typecheck`, `prepush` も追加されることを記載 |
22
+ | A6 | 20 | 低 | 「Turborepo + Next.js 15 + Prisma のモノレポ構成」のみ | テンプレートには `apps/admin/` も含まれることを補足 |
23
+ | A7 | 37 | 低 | create-einja-app のオプション `--yes` 記載 | CLIの `.option()` に `--yes` が未登録(バグ)。README側は現状維持し、CLI修正を別Issueで対応 |
24
+
25
+ ### B. パッケージ開発者向けセクション(行102-)
26
+
27
+ | # | 行 | 深刻度 | 問題 | 修正内容 |
28
+ |---|-----|--------|------|---------|
29
+ | B1 | 110-142 | 高 | プロジェクト構成図に `apps/admin/` が未記載 | `apps/admin/` を追加 |
30
+ | B2 | 110-142 | 高 | プロジェクト構成図に `packages/admin-ui/` が未記載 | `packages/admin-ui/` を追加 |
31
+ | B3 | 277 | 高 | `PostgreSQL 15` と記載 | `PostgreSQL 16` に修正 |
32
+ | B4 | 289 | 中 | Docker接続コマンドの DB名 `-d einja_management` | `-d main` に修正(POSTGRES_DB の実際の値) |
33
+ | B5 | 133-137 | 軽微 | `server-core/src/` に `utils/` があると記載 | `core/`・`testing/` に修正 |
34
+ | B6 | 314-319 | 軽微 | packagesセクションに `@repo/admin-ui` の説明なし | admin専用UIコンポーネントとして追加 |
35
+ | B7 | 269 | 軽微 | ワークスペース固有コマンドの filter 例 `@repo/web` のみ | `@repo/admin` の例も追加 |
36
+
37
+ ## 実装手順
38
+
39
+ 1. サブエージェントに README.md の全修正を委託(1エージェント、全修正を一括)
40
+ 2. `git diff` で意図しない変更がないか確認
41
+ 3. `--yes` バグは別途対応(本タスクのスコープ外)
42
+
43
+ ## 検証
44
+
45
+ - 修正後の README.md を `Read` で確認
46
+ - 変更されたリンク先がすべて実在することを確認(調査済み)
47
+ - `git diff --stat` で変更ファイルが README.md のみであることを確認
@@ -0,0 +1,26 @@
1
+ # Plan: task-exec.mdから冗長な「受け入れ条件の参照方法」セクションを削除
2
+
3
+ ## Context
4
+
5
+ task-exec.md の「受け入れ条件の参照方法」セクション(247〜313行目)は以下の理由で冗長:
6
+ - サブエージェント(task-executer/reviewer/qa)はtask-exec.mdを読まない
7
+ - 同ファイル内のStep 2〜6で同じ内容が定義済み
8
+ - Step 4のハイブリッド方式と矛盾する記述がある
9
+ - 他ファイルからの参照は0件(Codexレビュー済み)
10
+
11
+ ## 変更内容
12
+
13
+ ### 対象ファイル
14
+ - `.claude/commands/einja/task-exec.md`
15
+
16
+ ### 作業
17
+ 1. 246行目の `---` から 315行目の `---` の間にある「受け入れ条件の参照方法」セクション全体を削除
18
+ - 246行目: セパレータ `---`
19
+ - 247〜313行目: セクション本体
20
+ - 314行目: 空行
21
+ - 315行目: セパレータ `---`(「失敗時のリカバリーフロー」の前)
22
+ - ※ 「失敗時のリカバリーフロー」セクション前の `---` セパレータは維持
23
+
24
+ ## 検証
25
+ - 削除後、前後のセクション(Phase 99フローと失敗時リカバリーフロー)が正しく繋がっていることを確認
26
+ - `pnpm prepush` で lint/typecheck が通ることを確認
@@ -0,0 +1,172 @@
1
+ # Plan: einja-skill-creator を公式版に追従改善 + skill-first hook修正
2
+
3
+ ## Context
4
+
5
+ 公式 Anthropic skill-creator(`anthropics/claude-plugins-official`)が更新されており、einja版は以前のバージョンをベースに日本語化・カスタマイズしたもの。
6
+ 公式版との差分を分析し、einja版に取り込むべき改善点を特定した。
7
+
8
+ また、Plan mode時に `einja-skill-first` の評価リマインダーを自動注入する `plan-mode-skill-loader.sh` hookが正常に機能していないことが判明。hookの修正も本Planに含める。
9
+
10
+ ---
11
+
12
+ ## 差分分析サマリー
13
+
14
+ ### 優先度: 高(機能・正確性に影響)
15
+
16
+ | # | 差分 | 影響 |
17
+ |---|------|------|
18
+ | 1 | **run_loop.py のシグネチャ不一致** — `holdout`が公式=float(割合) vs einja=int(件数)、第一引数が`eval_set:list` vs `eval_set_path:str` | SKILL.mdの手順通りに`--holdout 0.4`で実行すると動作しない |
19
+ | 2 | **run_loop.py のtrain/test順次実行** — 公式版は1バッチで並列実行してから分割、einja版は順次 | 評価実行時間が約2倍 |
20
+ | 3 | **run_loop.py のblinded_history欠落** — 公式版はimprove時にtest結果を隠蔽してオーバーフィット防止 | einja版はtestスコアが改善プロンプトに漏れてオーバーフィットリスクあり |
21
+ | 4 | **aggregate_benchmark.py が完全別機能** — 公式版はschemas.md準拠のbenchmark.json生成、einja版は複数run_loop出力の横断比較 | Benchmarkモード(viewer.htmlのBenchmarkタブ)が動作しない |
22
+ | 5 | **SKILL.md: grading.jsonフィールド名警告の欠落** — `text`/`passed`/`evidence`必須、`name`/`met`/`details`禁止 | viewerがフィールド不一致で正しく表示されないリスク |
23
+
24
+ ### 優先度: 中(品質・UXに影響)
25
+
26
+ | # | 差分 | 影響 |
27
+ |---|------|------|
28
+ | 6 | **SKILL.md: eval queryのGood/Bad具体例が欠落** — トリガー評価クエリの品質基準 | 低品質なevalクエリが生成されdescription最適化の精度低下 |
29
+ | 7 | **SKILL.md: タイミングデータ即時処理の警告欠落** — 「通知は1回限り、バッチ不可」 | timing.jsonの保存漏れリスク |
30
+ | 8 | **SKILL.md: コアループ再掲+TodoList指示の欠落** — 末尾のフロー要約とCowork向けTodoList指示 | 作業手順の抜け漏れリスク(特にCowork環境) |
31
+ | 9 | **SKILL.md: Claude.ai制限の文脈説明欠落** — ブラインドテスト不可の注意 | ユーザーが結果の制限を理解できない |
32
+ | 10 | **run_loop.py: ブラウザ自動オープン+results_dir保存機能なし** | ライブモニタリング・出力管理の利便性低下 |
33
+ | 11 | **generate_report.py: stdin対応なし** — 公式版は`--input -`でstdinから読める | パイプライン連携の柔軟性が低い |
34
+
35
+ ### 優先度: 低(軽微・好みの問題)
36
+
37
+ | # | 差分 | 影響 |
38
+ |---|------|------|
39
+ | 12 | **SKILL.md: feedback.jsonのスキーマ例欠落** | ユーザーがフィードバック形式を理解しにくい |
40
+ | 13 | **SKILL.md: Coworkフィードバックアクセス権限の注意欠落** | Coworkユーザーがfeedback.json読み込みで詰まる |
41
+ | 14 | **generate_report.py: UIデザインの差異** — 公式版はtest/train色分けが明確 | 視認性の差(機能的には同等) |
42
+
43
+ ### einja版の独自強み(維持すべき)
44
+
45
+ | 要素 | 内容 |
46
+ |------|------|
47
+ | `init_skill.py` | Skill初期化スクリプト(公式版にない) |
48
+ | 参考ドキュメント記録規約 | 設計根拠追跡のHTMLコメント記録 |
49
+ | `@einja:excluded` / `@einja:project-private` | テンプレート除外マーカー |
50
+ | `quick_validate.py` のeinja固有チェック | プレフィックス推奨、行数チェック |
51
+ | import フォールバック | `run_eval.py`のtry/except import |
52
+ | description日英併記 | 日本語ユーザー向けトリガー精度向上 |
53
+
54
+ ---
55
+
56
+ ## 推奨改善アプローチ
57
+
58
+ ### Phase 0: plan-mode-skill-loader.sh hook修正
59
+
60
+ **対象ファイル**: `.claude/hooks/einja/plan-mode-skill-loader.sh`
61
+
62
+ **現状**: hook自体は正常終了(exit 0)するが、`additionalContext` のリマインダーがAIコンテキストに到達していない。会話冒頭で `UserPromptSubmit hook success: Success` のみ表示され、リマインダーテキストが注入されていない。
63
+
64
+ **調査・修正方針**:
65
+
66
+ 1. **デバッグ確認**: hookにデバッグ出力を追加し、`permission_mode` の実際の値を確認
67
+ - `echo "DEBUG: permission_mode=$permission_mode" >&2` を追加して値を特定
68
+ 2. **原因候補の検証**:
69
+ - `permission_mode` が `"plan"` 以外の値(例: `"default"` でPlan modeでも変わらない等)
70
+ - `additionalContext` の出力が "discrete"(背景的)すぎて実効性がない
71
+ - jqの出力がパイプで消失している
72
+ 3. **修正案**:
73
+ - **案A**: `additionalContext` を `hookSpecificOutput` でネストして明示的に注入
74
+ - **案B**: Plain text stdoutに切り替えてトランスクリプトに直接表示
75
+ - **案C**: `permission_mode` の条件を緩和/修正(値が異なる場合)
76
+ 4. **検証**: Plan modeで新セッションを開始し、リマインダーが表示されることを確認
77
+
78
+ ### Phase 1: スクリプト互換性修正(高優先度 #1-4)
79
+
80
+ **注意**: Phase 1完了後、SKILL.mdのコマンド例が一時的に不整合になる。Phase 2で連動更新する。
81
+
82
+ #### 1-a. run_loop.py を公式版ベースに再構築
83
+ - `holdout` を float 割合に統一(公式: `0.4` = 40%)
84
+ - train/test 並列バッチ実行に変更(1バッチで並列→分割)
85
+ - blinded_history を追加(test結果を隠蔽してオーバーフィット防止)
86
+ - ブラウザ自動オープン(`webbrowser.open`)・`results_dir` 保存を追加
87
+ - 終了条件を公式版に統一(trainのみ全パスで終了、testは過学習チェック用)
88
+ - **einja独自機能の保持判断**:
89
+ - `--improve-model`(評価/改善モデル分離)→ **保持**(公式版より柔軟)
90
+ - `--seed`(再現性確保)→ **保持**(デバッグに有用)
91
+ - import フォールバック・日本語コメント → **保持**
92
+
93
+ #### 1-b. improve_description.py の互換性確認・修正
94
+ - blinded_history導入に伴うシグネチャ変更の要否を確認
95
+ - 公式版: `/tmp/official-sc-scripts-improve_description.py`
96
+ - einja版: `.claude/skills/einja-skill-creator/scripts/improve_description.py`
97
+ - 差分があればblinded_history対応を追加
98
+
99
+ #### 1-c. aggregate_benchmark.py を公式版に差し替え
100
+ - 既存のeinja版横断比較機能は `compare_runs.py` に別名保存
101
+ - schemas.md準拠のbenchmark.json生成を復元(viewer.htmlのBenchmarkタブが動作するように)
102
+ - **現状の不整合**: einja版SKILL.mdに記載のコマンド `python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>` が既にeinja版スクリプトでは動作しない状態。公式版差し替えでこの不整合が解消される
103
+
104
+ ### Phase 2: SKILL.md内容補完(高・中優先度 #5-9) ※Phase 1との連動更新含む
105
+
106
+ #### 2-a. Phase 1連動のコマンド例更新
107
+ - run_loopのコマンド例を公式版シグネチャに合わせて更新
108
+ - `--holdout 0.4` 引数の追記
109
+ - `--improve-model`(einja独自)の説明追記
110
+ - aggregate_benchmarkのコマンド例は既に正しい(公式版差し替えで整合)
111
+
112
+ #### 2-b. 公式版の重要な詳細を追記
113
+ - grading.jsonフィールド名警告(#5)— `text`/`passed`/`evidence`必須、誤フィールド禁止
114
+ - eval queryのGood/Bad具体例(#6)— 公式版の具体例を日本語化
115
+ - タイミングデータ即時処理警告(#7)— 「通知は1回限り、バッチ不可」
116
+ - コアループ再掲+TodoList指示(#8)— 末尾にフロー要約を追加
117
+ - Claude.ai制限の文脈説明(#9)— ブラインドテスト不可の注意
118
+ - feedback.jsonスキーマ例(#12)
119
+ - Coworkアクセス権限注意(#13)
120
+
121
+ #### 2-c. compare_runs.py(別名保存した横断比較)の説明追加(任意)
122
+
123
+ ### Phase 3: UX改善(中・低優先度 #10-14)
124
+
125
+ 4. **generate_report.py のstdin対応追加**(`--input -`)
126
+ 5. **generate_report.py のtest/train色分け改善**(任意)
127
+ 6. **回帰テスト**: `init_skill.py`・`quick_validate.py` が引き続き動作することを確認
128
+
129
+ ---
130
+
131
+ ## 対象ファイル
132
+
133
+ | ファイル | 変更内容 |
134
+ |---------|---------|
135
+ | `.claude/hooks/einja/plan-mode-skill-loader.sh` | デバッグ・修正(リマインダー注入が機能するように) |
136
+ | `.claude/skills/einja-skill-creator/SKILL.md` | 公式版の詳細指示を追記 + コマンド例更新 |
137
+ | `.claude/skills/einja-skill-creator/scripts/run_loop.py` | 公式版ベースに再構築(einja独自機能保持) |
138
+ | `.claude/skills/einja-skill-creator/scripts/improve_description.py` | blinded_history対応(要否確認後) |
139
+ | `.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py` | 公式版に差し替え(既存は `compare_runs.py` に別名保存) |
140
+ | `.claude/skills/einja-skill-creator/scripts/compare_runs.py` | aggregate_benchmark.pyの旧einja版を別名保存 |
141
+ | `.claude/skills/einja-skill-creator/scripts/generate_report.py` | stdin対応追加 |
142
+
143
+ ## 公式版ファイル(参照用)
144
+
145
+ `/tmp/` にダウンロード済み:
146
+ - `/tmp/official-skill-creator-SKILL.md` — 公式SKILL.md(479行)
147
+ - `/tmp/official-sc-scripts-run_loop.py` — 公式run_loop.py
148
+ - `/tmp/official-sc-scripts-aggregate_benchmark.py` — 公式aggregate_benchmark.py
149
+ - `/tmp/official-sc-scripts-generate_report.py` — 公式generate_report.py
150
+ - その他 `/tmp/official-sc-*` — 公式版の全ファイル
151
+
152
+ ## 検証方法
153
+
154
+ ### Phase 0: hook修正
155
+ - Plan modeで新セッションを開始し、`<system-reminder>` にskill-firstリマインダーが表示されることを確認
156
+ - Plan mode以外ではリマインダーが注入されないことを確認
157
+
158
+ ### Phase 1: スクリプト互換性
159
+ - `python -m scripts.run_loop --help` で引数が公式版と一致(`--holdout` がfloat、`--results-dir` 等が存在)
160
+ - `python -m scripts.aggregate_benchmark --help` で引数が公式版と一致(ディレクトリ引数)
161
+ - `python -m scripts.improve_description --help` でblinded_history対応を確認
162
+ - 小規模実行テスト: 2-3クエリのeval setで `run_loop` を実際に実行し、benchmark.json生成→viewer.htmlのBenchmarkタブ表示まで確認
163
+ - `compare_runs.py` が旧einja版の横断比較機能として動作することを確認
164
+
165
+ ### Phase 2: SKILL.md補完
166
+ - SKILL.md の公式版との差分レビュー(grading.jsonフィールド警告、eval query Good/Bad例、コアループ再掲等が反映されていることを目視確認)
167
+ - SKILL.md のコマンド例が更新後のスクリプトシグネチャと整合していることを確認
168
+
169
+ ### Phase 3: UX + 回帰テスト
170
+ - `python -m scripts.quick_validate` でスキーマ検証パス
171
+ - `init_skill.py` が引き続き動作することを確認
172
+ - `generate_report.py` のstdin対応テスト
@@ -0,0 +1,179 @@
1
+ # 計画レビュー結果: generic-sleeping-snowglobe
2
+
3
+ ## レビュー完了日時
4
+ 2026-03-04
5
+
6
+ ## 総評
7
+ ⚠️ PARTIAL - 3件の重要な問題を検出。修正後に実装可能。
8
+
9
+ ## 問題点と修正指示
10
+
11
+ ### 問題1: Step 2 に Manager worktree 作成が記述されていない【最重要】
12
+
13
+ **箇所:** `.claude/commands/einja/issue-exec.md` L124-137
14
+
15
+ **現状:**
16
+ ```markdown
17
+ ### Step 2: ブランチ & worktree 作成
18
+ 1. Issue ブランチ作成: `issue/{issue番号}`(base ブランチから)
19
+ 2. 各 Phase のブランチ作成: `issue/{issue番号}-phase{N}`(issue ブランチから)
20
+ 3. git worktree 作成:
21
+ mkdir -p ~/.einja/worktrees/issue-{N}/
22
+ git worktree add ~/.einja/worktrees/issue-{N}/phase{M} issue/{N}-phase{M}
23
+ ```
24
+
25
+ **修正後:**
26
+ ```markdown
27
+ ### Step 2: ブランチ & worktree 作成
28
+ 1. Issue ブランチ作成: `issue/{issue番号}`(base ブランチから)
29
+ 2. Manager worktree 作成(メインリポジトリから):
30
+ ```bash
31
+ mkdir -p ~/.einja/worktrees/issue-{N}/
32
+ git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}
33
+ git push -u origin issue/{N}
34
+ ```
35
+ 3. **以降の操作は全て Manager worktree 内から実行する**(cwd: `~/.einja/worktrees/issue-{N}/manager`)
36
+ 4. 各 Phase のブランチ作成(Manager worktree から): `issue/{issue番号}-phase{N}`(issue ブランチから)
37
+ 5. Phase worktree 作成(Manager worktree から):
38
+ ```bash
39
+ git worktree add ~/.einja/worktrees/issue-{N}/phase{M} issue/{N}-phase{M}
40
+ git push -u origin issue/{N}-phase{M}
41
+ ```
42
+ ```
43
+
44
+ **理由:** 計画の中核である「Manager を worktree 化」が実装記述に反映されていない
45
+
46
+ ---
47
+
48
+ ### 問題2: Step 4 tmux セッション起動ディレクトリ未指定
49
+
50
+ **箇所:** `.claude/commands/einja/issue-exec.md` L166-168
51
+
52
+ **現状:**
53
+ ```bash
54
+ tmux new-session -d -s einja-{issue番号} -n manager
55
+ ```
56
+
57
+ **修正後:**
58
+ ```bash
59
+ tmux new-session -d -s einja-{issue番号} -n manager -c ~/.einja/worktrees/issue-{N}/manager
60
+ ```
61
+
62
+ **理由:** Manager が worktree 内で動作するよう cwd を明示する必要がある
63
+
64
+ ---
65
+
66
+ ### 問題3: worktree 物理パス構成図に manager/ が欠落
67
+
68
+ **箇所:** `.claude/commands/einja/issue-exec.md` L266-270
69
+
70
+ **現状:**
71
+ ```markdown
72
+ ## worktree 物理パス
73
+ ```
74
+ ~/.einja/worktrees/issue-{N}/
75
+ ├── phase{M}/ ← Director cwd
76
+ ├── task-{X.Y}/ ← Worker cwd
77
+ ```
78
+ ```
79
+
80
+ **修正後:**
81
+ ```markdown
82
+ ## worktree 物理パス
83
+ ```
84
+ ~/.einja/worktrees/issue-{N}/
85
+ ├── manager/ ← Manager cwd(NEW)
86
+ ├── phase{M}/ ← Director cwd
87
+ ├── task-{X.Y}/ ← Worker cwd
88
+ ```
89
+ ```
90
+
91
+ **理由:** 計画で明記された構成図との整合性
92
+
93
+ ---
94
+
95
+ ## 改善提案
96
+
97
+ ### 提案1: Step 0-3 セッション復元に Manager worktree 再作成を追記
98
+
99
+ **箇所:** `.claude/commands/einja/issue-exec.md` L112-114
100
+
101
+ **現状:**
102
+ ```markdown
103
+ #### 3. セッション復元
104
+ - `--resume` フラグがある場合、`~/.einja/sessions/issue-{N}/session.json` からセッション状態を復元
105
+ - 未完了のPhaseのDirectorを再起動する
106
+ ```
107
+
108
+ **追記案:**
109
+ ```markdown
110
+ #### 3. セッション復元
111
+ - `--resume` フラグがある場合、`~/.einja/sessions/issue-{N}/session.json` からセッション状態を復元
112
+ - Manager worktree の存在確認: `git worktree list | grep issue-{N}/manager`
113
+ - 存在しない場合は再作成: `git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}`
114
+ - 未完了のPhaseのDirectorを再起動する
115
+ ```
116
+
117
+ **理由:** 計画で明記されているが、実装記述に含まれていない
118
+
119
+ ---
120
+
121
+ ### 提案2: セッションクリーンアップに Manager worktree 削除を追加
122
+
123
+ **箇所:** `.claude/commands/einja/issue-exec.md` L390-395
124
+
125
+ **現状:**
126
+ ```markdown
127
+ ## セッションクリーンアップ
128
+
129
+ Issue完了時に以下を自動削除:
130
+ - `~/.einja/sessions/issue-{N}/` (セッションファイル)
131
+ - `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove` を実行)
132
+ - ローカルブランチのクリーンアップ(task/*, issue/*-phase*)
133
+ ```
134
+
135
+ **追記案:**
136
+ ```markdown
137
+ ## セッションクリーンアップ
138
+
139
+ Issue完了時に以下を自動削除:
140
+ - `~/.einja/sessions/issue-{N}/` (セッションファイル)
141
+ - `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove` を各ディレクトリに対して実行)
142
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/manager`
143
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/phase{M}`
144
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/task-{X.Y}`
145
+ - ローカルブランチのクリーンアップ(task/*, issue/*-phase*, issue/{N})
146
+ ```
147
+
148
+ **理由:** Manager worktree も削除対象に含める必要がある
149
+
150
+ ---
151
+
152
+ ## 検証済み項目
153
+
154
+ ### ✅ 技術的正確性
155
+ - worktree内から `git worktree add` / `git branch` / `git push` が動作することを確認済み(計画に記載あり)
156
+
157
+ ### ✅ 複数Issue同時実行の安全性
158
+ - 各 Manager が独立した worktree で動作するため race condition は発生しない
159
+ - ブランチ名も `issue/{N}` で分離されており衝突しない
160
+
161
+ ### ✅ 後方互換性
162
+ - Director/Worker の起動方法は変更なし
163
+ - ステータスファイル構造は絶対パスで管理されており影響なし
164
+
165
+ ### ✅ その他の変更なし箇所
166
+ - Director/Worker 起動方法
167
+ - ステータスファイル構造
168
+ - `gh pr create` コマンド
169
+ - `einja-team-exec` Skill
170
+ - `task-exec` コマンド
171
+
172
+ ---
173
+
174
+ ## 次のステップ
175
+
176
+ 1. 上記3件の問題を修正する
177
+ 2. 改善提案2件を検討・適用する
178
+ 3. 修正後、issue-exec.md の全体整合性を再確認する
179
+ 4. `presets/default/` へのビルド反映は自動(CLAUDE.md記載のとおり)