create-einja-app 0.3.2 → 0.3.3

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 (53) 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 -0
  8. package/templates/default/.claude/skills/cli-package-specs/SKILL.md +247 -0
  9. package/templates/default/.einja-sync.json +1 -1
  10. package/templates/default/.github/release.yml +10 -0
  11. package/templates/default/.github/workflows/changeset-status.yml +60 -0
  12. package/templates/default/.github/workflows/deploy-stable-branches.yml +289 -59
  13. package/templates/default/CLAUDE.md +35 -8
  14. package/templates/default/README.md +20 -8
  15. package/templates/default/docs/plans/agile-munching-knuth.md +161 -0
  16. package/templates/default/docs/plans/agile-riding-nova.md +158 -0
  17. package/templates/default/docs/plans/agile-wibbling-dusk.md +91 -0
  18. package/templates/default/docs/plans/ancient-watching-otter.md +152 -0
  19. package/templates/default/docs/plans/bright-sauteeing-bumblebee.md +30 -0
  20. package/templates/default/docs/plans/composed-doodling-mountain.md +362 -0
  21. package/templates/default/docs/plans/dazzling-foraging-cascade.md +32 -0
  22. package/templates/default/docs/plans/enchanted-wiggling-ember-agent-a5befd57d0ca4c7c7.md +177 -0
  23. package/templates/default/docs/plans/enchanted-wiggling-ember.md +170 -0
  24. package/templates/default/docs/plans/federated-questing-kahan.md +47 -0
  25. package/templates/default/docs/plans/flickering-pondering-hearth.md +26 -0
  26. package/templates/default/docs/plans/fluttering-snuggling-sprout.md +172 -0
  27. package/templates/default/docs/plans/generic-sleeping-snowglobe-agent-a41d8da.md +179 -0
  28. package/templates/default/docs/plans/generic-sleeping-snowglobe.md +108 -0
  29. package/templates/default/docs/plans/generic-snuggling-pudding.md +57 -0
  30. package/templates/default/docs/plans/idempotent-wiggling-cherny.md +122 -0
  31. package/templates/default/docs/plans/recursive-fluttering-mitten.md +176 -0
  32. package/templates/default/docs/plans/todo-create-einja-app-ux-fix.md +16 -0
  33. package/templates/default/docs/plans/todo-direnv-hang-fix.md +12 -0
  34. package/templates/default/docs/plans/todo-github-actions-release-workflow.md +34 -0
  35. package/templates/default/docs/plans/todo-issue-spec-rename.md +24 -0
  36. package/templates/default/docs/plans/todo-skill-creator-upgrade.md +18 -0
  37. package/templates/default/docs/plans/velvety-chasing-spark.md +28 -0
  38. package/templates/default/docs/plans/wondrous-strolling-crystal-agent-a0615fc.md +215 -0
  39. package/templates/default/docs/plans/wondrous-strolling-crystal.md +182 -0
  40. package/templates/default/docs/plans/zesty-roaming-steele.md +74 -0
  41. package/templates/default/gitignore +6 -2
  42. package/templates/default/package.json +6 -2
  43. package/templates/default/pnpm-lock.yaml +547 -0
  44. package/templates/default/scripts/ensure-serena.sh +2 -2
  45. package/templates/default/scripts/env-rotate-secrets.ts +66 -6
  46. package/templates/default/scripts/init-github.ts +363 -0
  47. package/templates/default/scripts/init.sh +11 -5
  48. package/templates/default/scripts/setup-dev.ts +16 -1
  49. package/templates/default/.claude/skills/create-einja-app-release/SKILL.md +0 -186
  50. package/templates/default/.claude/skills/dev-cli-release/SKILL.md +0 -173
  51. package/templates/default/.cursor/commands/spec-create.md +0 -227
  52. package/templates/default/.cursor/commands/task-exec.md +0 -287
  53. package/templates/default/.cursor/commands/update-docs-by-task-specs.md +0 -448
@@ -0,0 +1,215 @@
1
+ # Plan Review: einja-sync コマンド自動化改善
2
+
3
+ ## レビュー対象
4
+
5
+ `docs/plans/wondrous-strolling-crystal.md`
6
+
7
+ ## レビュー観点
8
+
9
+ 1. 実現可能性
10
+ 2. コンフリクト解消の品質(conflict-resolverスキルとの整合性)
11
+ 3. エッジケース
12
+ 4. allowed-toolsへの `Edit` 追加の妥当性
13
+ 5. `npx --yes` の副作用
14
+ 6. 孤児削除の再実行アプローチ
15
+ 7. 全体の整合性
16
+
17
+ ---
18
+
19
+ ## レビュー結果
20
+
21
+ ### ✅ 良い点
22
+
23
+ 1. **conflict-resolverとの整合性**: 分析→説明→提案→確認の流れを踏襲
24
+ 2. **1ファイルずつ確認**: 複数ファイルをまとめて質問しない、という重要な制約を明記
25
+ 3. **マージ案の提示**: ローカル・テンプレート双方の分析とメリット・デメリットの説明
26
+ 4. **direnv自動化**: `.envrc` 変更検出と自動 `direnv allow` 実行
27
+ 5. **JSON出力の活用**: dev-cliの `--json` 出力を活用してコンフリクト検出
28
+
29
+ ---
30
+
31
+ ## 🚨 重大な問題
32
+
33
+ ### 1. `npx --yes` の副作用(最重要)
34
+
35
+ **問題**: Step 1 の `npx --yes @einja/dev-cli --version` で、`@einja/dev-cli` がインストールされていない場合、**自動的にグローバルキャッシュにインストール**される。
36
+
37
+ **影響**:
38
+ - CLI検出の意図: 「利用可能か確認」→ 実際: 「なければインストール」
39
+ - ユーザーが意図せずパッケージをインストールしてしまう
40
+ - `--version` チェックが純粋な検出ではなくなる
41
+
42
+ **推奨修正**:
43
+ - Step 1 で `npx --yes` は使用しない(検出のみ)
44
+ - `command -v npx` で npx 自体の存在確認
45
+ - `npm list -g @einja/dev-cli` または `pnpm list -g @einja/dev-cli` でグローバルインストール確認
46
+ - ローカルに `node_modules/@einja/dev-cli` が存在するか確認
47
+
48
+ または、より簡潔に:
49
+ ```bash
50
+ # npx でキャッシュチェック(インストールなし)
51
+ npx --version @einja/dev-cli 2>/dev/null
52
+ # → 失敗なら未インストール、成功なら利用可能
53
+ ```
54
+
55
+ ただし、Step 3, 4 の実際の sync 実行時は `npx --yes` を使用してOK(この時点で実行意図が明確)。
56
+
57
+ ---
58
+
59
+ ### 2. 孤児削除の再実行アプローチのリスク
60
+
61
+ **問題**: C. 孤児ファイル自動ハンドリング 4. で `npx --yes @einja/dev-cli sync --only <categories> --clean --yes` を再実行する方式。
62
+
63
+ **リスク**:
64
+ - 再度 sync 処理が走る(差分がないとはいえ、ファイルスキャンやメタデータ処理が重複)
65
+ - `--clean --yes` を別のタイミングで実行するとコンフリクト解消前のファイルを削除する可能性
66
+ - 孤児削除だけを独立して処理できるCLIオプションがないか確認すべき
67
+
68
+ **推奨確認事項**:
69
+ - `sync.ts` を確認したところ、孤児削除は `--clean` フラグで処理される(L179-L239, L632-L682)
70
+ - 既に sync 処理後であれば、メタデータに孤児情報が残っているので、CLI側で孤児削除専用の処理を追加する方が安全
71
+ - または、Bash + Read で孤児ファイルを直接削除する(ただし CLI の責務を侵害する可能性)
72
+
73
+ **代替案**:
74
+ - コマンド側で直接ファイル削除を実装(`rm` / `fs.remove` 相当)
75
+ - ただし、`sync.ts` の孤児削除ロジックを再実装することになり、DRY原則に反する
76
+
77
+ **判断**:
78
+ - 現状のアプローチ(再実行)は許容範囲内だが、CLIに `--clean-only` オプション追加を提案するのが理想的
79
+ - Plan には「再実行は処理が重複するが、現状のCLI仕様上の制約」と明記すべき
80
+
81
+ ---
82
+
83
+ ### 3. `Edit` ツール追加のリスク評価
84
+
85
+ **問題**: allowed-tools に `Edit` を追加することの副作用。
86
+
87
+ **リスク分析**:
88
+ - ✅ コンフリクトマーカー除去に必要(`sed` は壊れやすい)
89
+ - ⚠️ 他のファイルも編集可能になる(スコープが広がる)
90
+ - ⚠️ 誤ってsync対象外のファイルを編集するリスク
91
+
92
+ **推奨対策**:
93
+ - Step 5-2.e で「必ずコンフリクトファイルのみを編集すること」を明記
94
+ - 編集対象ファイルパスの検証(sync 対象ファイル一覧に含まれるか確認)
95
+ - 編集後の `Grep` 検証で意図しない変更がないかチェック
96
+
97
+ **判断**: 追加は妥当だが、安全ガードを強化すべき。
98
+
99
+ ---
100
+
101
+ ### 4. エッジケースの見落とし
102
+
103
+ | ケース | Plan での対応 | 推奨追加 |
104
+ |--------|-------------|---------|
105
+ | コンフリクトが0件 | 5-1 で「コンフリクトなし → スキップ」 | ✅ 記載あり |
106
+ | 孤児が0件 | 記載なし | ⚠️ C-1 に「空なら skip」を追加すべき |
107
+ | direnv未インストール | D-2 で「なければ skip」 | ✅ 記載あり |
108
+ | `.envrc` が変更されない | D-1 で「変更されたか確認」 | ✅ 記載あり |
109
+ | 複数のコンフリクトマーカーが1ファイルに存在 | 5-2.e 「末尾から処理し行番号ずれ防止」 | ✅ 記載あり |
110
+ | ユーザーが「スキップ」を選択した場合の後続処理 | 5-3 で「スキップされたファイルがあれば一覧を再表示」 | ✅ 記載あり |
111
+ | JSON出力が不正な場合 | 記載なし | ⚠️ JSONパースエラー時のフォールバック処理を追加すべき |
112
+
113
+ ---
114
+
115
+ ### 5. allowed-toolsの不足
116
+
117
+ **問題**: コンフリクト解消で `Read` を使用するのに、`allowed-tools` に `Read` が含まれていない(現状は `Bash, AskUserQuestion` のみ)。
118
+
119
+ **推奨修正**:
120
+ ```diff
121
+ -allowed-tools: Bash, AskUserQuestion
122
+ +allowed-tools: Bash, AskUserQuestion, Read, Edit, Grep, Glob
123
+ ```
124
+
125
+ 理由:
126
+ - `Read`: コンフリクトファイルの内容読み込み(5-2.a)
127
+ - `Edit`: マーカー除去(5-2.e)
128
+ - `Grep`: 未解消マーカー検証(5-3)
129
+ - `Glob`: ファイル検索(必要に応じて)
130
+
131
+ ---
132
+
133
+ ### 6. create-einja-app の検出・処理
134
+
135
+ **問題**: create-einja-app は JSON出力に対応していない。Plan では「標準出力から「コンフリクト」行をパース」とあるが、実装の詳細が不足。
136
+
137
+ **推奨追加**:
138
+ - Step 4 で create-einja-app の標準出力フォーマットを明記
139
+ - 正規表現パターン例: `⚠️.*コンフリクト.*: (.+)`
140
+ - パース失敗時の処理(エラーメッセージ表示 + 手動解消を促す)
141
+
142
+ ---
143
+
144
+ ### 7. 孤児ファイル削除の確認UIの重複
145
+
146
+ **問題**: C-3 で AskUserQuestion、C-4 で `--clean --yes` による自動削除。ユーザー確認が二重になる可能性。
147
+
148
+ **推奨修正**:
149
+ - C-3 の確認で「はい」を選択した場合、C-4 では `--yes` を付けて自動実行
150
+ - C-3 の確認で「いいえ」を選択した場合、C-4 をスキップ
151
+
152
+ 現状の記述では「確認 → 再度 --yes で実行」となり、確認の意味がない。
153
+
154
+ ---
155
+
156
+ ### 8. Step 構成の番号ずれ
157
+
158
+ **問題**: 改修後の Step 構成で Step 6, 7 が新規追加されたが、元の Step 6 (結果サマリー) が Step 8 に、Step 7 (結果詳細) が Step 9 に移動。
159
+
160
+ **影響**: 現行の `.claude/commands/einja/einja-sync.md` との対応が不明確。
161
+
162
+ **推奨**: 対応表を追加:
163
+
164
+ | 現行 | 改修後 | 内容 |
165
+ |------|--------|------|
166
+ | Step 1 | Step 1 | CLI検出 |
167
+ | Step 2 | Step 2 | カテゴリ選択 |
168
+ | Step 3 | Step 3 | dry-run |
169
+ | Step 4 | Step 4 | sync実行 |
170
+ | Step 5 | Step 5 | コンフリクト解消 |
171
+ | - | **Step 6** | **孤児ファイル処理(新規)** |
172
+ | - | **Step 7** | **direnv allow(新規)** |
173
+ | Step 6 | Step 8 | 結果サマリー |
174
+ | Step 7 | Step 9 | 結果詳細 |
175
+
176
+ ---
177
+
178
+ ## 推奨される修正事項(優先順位順)
179
+
180
+ ### 🔴 必須(実装前に修正すべき)
181
+
182
+ 1. **Step 1 の `npx --yes` 削除**: 検出時はインストールしない方式に変更
183
+ 2. **allowed-tools に `Read, Edit, Grep, Glob` 追加**
184
+ 3. **C-3 と C-4 の確認UIの整理**: 二重確認を回避
185
+ 4. **JSON出力パースエラー時のフォールバック処理追加**
186
+
187
+ ### 🟡 推奨(実装時に考慮すべき)
188
+
189
+ 5. **孤児削除の再実行リスクを Plan に明記**: 「処理が重複するが、現状のCLI仕様上の制約」
190
+ 6. **create-einja-app の出力パースパターンを明記**
191
+ 7. **Step 構成の対応表を追加**: 現行との差分を明確化
192
+ 8. **エッジケース(孤児0件)の明示**: C-1 に追記
193
+
194
+ ### 🟢 改善(あると望ましい)
195
+
196
+ 9. **CLI に `--clean-only` オプション追加を提案**: 孤児削除専用処理
197
+ 10. **Edit 使用時の安全ガード強化**: 編集対象ファイルの検証ロジック
198
+
199
+ ---
200
+
201
+ ## 総合評価
202
+
203
+ **実現可能性**: ⭐⭐⭐⭐☆ (4/5)
204
+ - 技術的には実装可能だが、`npx --yes` の副作用と孤児削除の再実行が懸念
205
+
206
+ **品質**: ⭐⭐⭐⭐☆ (4/5)
207
+ - conflict-resolver との整合性は高い
208
+ - エッジケース対応は概ね網羅されているが、一部追加が必要
209
+
210
+ **リスク**: ⭐⭐⭐☆☆ (3/5 - 中程度)
211
+ - `npx --yes` の自動インストール問題(最重要)
212
+ - allowed-tools の不足(実装時にエラーになる可能性)
213
+ - 孤児削除の再実行による処理重複
214
+
215
+ **推奨アクション**: 上記の🔴必須項目を修正してから実装開始すること。
@@ -0,0 +1,182 @@
1
+ # Plan: NPMリリースSkill統合
2
+
3
+ ## Context
4
+
5
+ 現在 `dev-cli-release` と `create-einja-app-release` の2つの独立したリリースSkillがあり、パッケージ公開時にどちらのSkillを使うか意識する必要がある。変更があったパッケージを自動検出し、1つのSkillで両方のリリースを処理できるようにする。
6
+
7
+ ## 変更対象ファイル
8
+
9
+ | # | ファイル | 変更内容 |
10
+ |---|---------|---------|
11
+ | 1 | `.claude/skills/einja-npm-release/SKILL.md` | **新規作成**: 統合リリースSkill |
12
+ | 2 | `.claude/skills/dev-cli-release/SKILL.md` | **削除** |
13
+ | 3 | `.claude/skills/create-einja-app-release/SKILL.md` | **削除** |
14
+ | 4 | `CLAUDE.md` | キーワードトリガーを統合Skillに変更 |
15
+
16
+ ## 統合Skillの設計
17
+
18
+ ### パッケージ定義テーブル
19
+
20
+ Skill内でパッケージごとの差分を定数テーブルとして定義:
21
+
22
+ | キー | `@einja/cli` | `create-einja-app` |
23
+ |------|-------------|-------------------|
24
+ | path | `packages/cli` | `packages/create-einja-app` |
25
+ | pnpm filter | `@einja/cli` | `create-einja-app` |
26
+ | workflow | `release-cli.yml` | `release-create-einja-app.yml` |
27
+ | tag prefix | `cli-v` | `create-einja-app-v` |
28
+ | commit scope | `cli` | `create-einja-app` |
29
+ | build/test | build, test, typecheck | build, test, typecheck, lint |
30
+
31
+ ### 処理フロー
32
+
33
+ #### Step 1: 前提条件の確認
34
+ - `git branch --show-current` → mainブランチ確認
35
+ - `git status --porcelain` → 未コミット変更の確認
36
+ - 未コミット変更がある場合 → AskUserQuestion(コミットしてから/スタッシュ/そのまま)
37
+
38
+ #### Step 2: 変更パッケージの自動検出
39
+
40
+ 各パッケージについて、最新タグからの差分を検出:
41
+
42
+ ```bash
43
+ # dev-cli: 最新タグ取得
44
+ git tag --list 'cli-v*' --sort=-version:refname | head -1
45
+
46
+ # create-einja-app: 最新タグ取得
47
+ git tag --list 'create-einja-app-v*' --sort=-version:refname | head -1
48
+
49
+ # 各パッケージの差分をチェック
50
+ git diff --name-only {latest_tag}..HEAD -- packages/cli/
51
+ git diff --name-only {latest_tag}..HEAD -- packages/create-einja-app/
52
+ ```
53
+
54
+ 結果をテーブル表示:
55
+
56
+ ```markdown
57
+ | パッケージ | 現バージョン | 最新タグ | 変更ファイル数 |
58
+ |-----------|------------|---------|-------------|
59
+ | @einja/cli | 0.1.41 | cli-v0.1.41 | 3 |
60
+ | create-einja-app | 0.3.2 | create-einja-app-v0.3.2 | 5 |
61
+ ```
62
+
63
+ #### Step 3: リリース対象の確認
64
+
65
+ AskUserQuestion で確認:
66
+
67
+ ```yaml
68
+ # 両方に変更がある場合
69
+ question: "どのパッケージをリリースしますか?"
70
+ header: "リリース対象"
71
+ options:
72
+ - label: "両方リリース(推奨)"
73
+ description: "@einja/cli (変更N件) と create-einja-app (変更M件) の両方をリリース"
74
+ - label: "@einja/cli のみ"
75
+ description: "@einja/cli のみリリース"
76
+ - label: "create-einja-app のみ"
77
+ description: "create-einja-app のみリリース"
78
+
79
+ # 片方のみ変更がある場合
80
+ question: "{パッケージ名} に変更があります。リリースしますか?"
81
+ header: "リリース確認"
82
+ options:
83
+ - label: "はい"
84
+ - label: "いいえ"
85
+
86
+ # 変更がない場合でもリリースできるように「Other」選択肢で対応
87
+ ```
88
+
89
+ #### Step 4: バージョン種別の決定
90
+
91
+ 対象パッケージごとにAskUserQuestion:
92
+
93
+ ```yaml
94
+ question: "{パッケージ名} のバージョン種別を選択してください(現在: v{current})"
95
+ header: "バージョン"
96
+ options:
97
+ - label: "patch(推奨)"
98
+ - label: "minor"
99
+ - label: "major"
100
+ ```
101
+
102
+ 複数パッケージの場合、1つの AskUserQuestion で同時に聞けないので順番に確認。
103
+
104
+ #### Step 5: ビルド・テスト
105
+
106
+ 対象パッケージごとに実行(並列実行可能):
107
+
108
+ ```bash
109
+ # dev-cli
110
+ pnpm --filter @einja/cli build && pnpm --filter @einja/cli test && pnpm --filter @einja/cli typecheck
111
+
112
+ # create-einja-app
113
+ pnpm -F create-einja-app build && pnpm -F create-einja-app test && pnpm -F create-einja-app typecheck && pnpm -F create-einja-app lint
114
+ ```
115
+
116
+ #### Step 6: バージョン更新・コミット・プッシュ
117
+
118
+ **順次実行**(gitコミットは直列化が必要)。全パッケージ統一で `--no-git-tag-version` + 手動タグ方式:
119
+
120
+ ```bash
121
+ # 1. バージョン更新(タグなし)
122
+ npm version {type} --no-git-tag-version --prefix {path}
123
+
124
+ # 2. package.jsonのみコミット
125
+ git add {path}/package.json
126
+ git commit -m "chore({scope}): v{version}にバージョンアップ"
127
+
128
+ # 3. タグ作成
129
+ git tag {tag_prefix}{version}
130
+ ```
131
+
132
+ 全パッケージ分のコミット・タグ作成が完了してから一括プッシュ:
133
+
134
+ ```bash
135
+ git push origin main
136
+ git push origin {tag1}
137
+ git push origin {tag2} # 2パッケージの場合
138
+ ```
139
+
140
+ #### Step 7: GitHub Actions 監視
141
+
142
+ 対象パッケージごとにワークフローを監視(並列監視可能):
143
+
144
+ ```bash
145
+ gh run list --workflow={workflow} --limit=1 --json databaseId,status,conclusion
146
+ ```
147
+
148
+ - 30秒間隔でポーリング
149
+ - 失敗時: `gh run view {run_id} --log-failed` で原因特定 → 自律修正 → 再リリース
150
+ - 最大3回リトライ
151
+
152
+ #### Step 8: 完了報告
153
+
154
+ ```markdown
155
+ ## 📦 NPM パッケージリリース完了
156
+
157
+ | パッケージ | バージョン | タグ | Actions |
158
+ |-----------|----------|-----|---------|
159
+ | @einja/cli | 0.1.41 → 0.1.42 | cli-v0.1.42 | ✅ |
160
+ | create-einja-app | 0.3.2 → 0.3.3 | create-einja-app-v0.3.3 | ✅ |
161
+ ```
162
+
163
+ ## CLAUDE.md キーワードトリガー変更
164
+
165
+ 変更前:
166
+ ```
167
+ | `einja cli` `@einja/dev-cli` `公開` `リリース` `publish` `release` | `.claude/skills/dev-cli-release/SKILL.md` |
168
+ | `create-einja-app` | `.claude/skills/create-einja-app-release/SKILL.md` |
169
+ ```
170
+
171
+ 変更後:
172
+ ```
173
+ | `einja cli` `@einja/dev-cli` `create-einja-app` `公開` `リリース` `publish` `release` | `.claude/skills/einja-npm-release/SKILL.md` |
174
+ ```
175
+
176
+ **注**: `create-einja-app` キーワードはリリース以外の文脈(例: sync)でも使われるが、統合Skillは変更検出で自動判別するため問題ない。
177
+
178
+ ## 検証方法
179
+
180
+ 1. `git diff --stat` で変更ファイルが4つ(新規1、削除2、編集1)であることを確認
181
+ 2. Skill内のパッケージ定義テーブルが正しいことを確認
182
+ 3. `Grep` で旧Skill名(`dev-cli-release`, `create-einja-app-release`)が残っていないことを確認
@@ -0,0 +1,74 @@
1
+ # NPMリリース後の反映遅延修正
2
+
3
+ ## Context
4
+
5
+ NPMリリース後、利用者が`npx create-einja-app`や`npx @einja/dev-cli`を実行しても古いバージョンが使われ続ける問題。根本原因は**npxのキャッシュ仕様**(npm 7以降、`@latest`未指定だとキャッシュ内の古いバージョンを無期限に使い続ける)。
6
+
7
+ ## 修正箇所
8
+
9
+ ### 1. npx呼び出しに`@latest`追加 + エラーメッセージ更新
10
+
11
+ **`packages/create-einja-app/src/generators/post-setup.ts`**
12
+
13
+ | 行 | Before | After |
14
+ |----|--------|-------|
15
+ | 119 | `execa("npx", ["@einja/dev-cli", ...])` | `execa("npx", ["--yes", "@einja/dev-cli@latest", ...])` |
16
+ | 123 | `'npx @einja/dev-cli init'` | `'npx --yes @einja/dev-cli@latest init'` |
17
+
18
+ **`package.json`(ルート・scriptsセクション)**
19
+
20
+ | キー | Before | After |
21
+ |------|--------|-------|
22
+ | `einja:sync` | `npx --yes @einja/dev-cli sync` | `npx --yes @einja/dev-cli@latest sync` |
23
+ | `task:loop` | `npx @einja/dev-cli task:loop` | `npx --yes @einja/dev-cli@latest task:loop` |
24
+
25
+ ### 2. テスト期待値の更新
26
+
27
+ **`packages/create-einja-app/tests/unit/generators/post-setup.test.ts`(134行目)**
28
+ - `["@einja/dev-cli", ...]` → `["--yes", "@einja/dev-cli@latest", ...]` に更新
29
+
30
+ **`packages/create-einja-app/tests/integration/create.test.ts`(21行目)**
31
+ - `args?.[0] === "@einja/dev-cli"` → `args?.[1] === "@einja/dev-cli@latest"` に更新(`--yes`が先頭に入るため)
32
+
33
+ ### 3. release-cli.ymlにtest/typecheck/lint追加
34
+
35
+ **`.github/workflows/release-cli.yml`** - Buildステップ後に追加:
36
+ ```yaml
37
+ - name: Run tests
38
+ run: pnpm --filter @einja/dev-cli test
39
+
40
+ - name: Type check
41
+ run: pnpm --filter @einja/dev-cli typecheck
42
+
43
+ - name: Lint
44
+ run: pnpm --filter @einja/dev-cli lint
45
+ ```
46
+ 参考: `.github/workflows/release-create-einja-app.yml` に同等のステップあり
47
+
48
+ ### 4. パッケージ名の誤記修正
49
+
50
+ **`packages/cli/RELEASING.md`(50, 53行目)**
51
+ - `@einja/cli` → `@einja/dev-cli`
52
+
53
+ **`.claude/skills/einja-npm-release/SKILL.md`(25, 28, 137, 232行目)**
54
+ - `@einja/cli` → `@einja/dev-cli` に統一
55
+
56
+ ### 5. フォローアップ(別リポジトリ)
57
+
58
+ **`docs/einja/cli/preset.yaml`(127-128行目)** - 管理対象ディレクトリ(読み取り専用)
59
+ - `npx @einja/dev-cli sync` → `npx --yes @einja/dev-cli@latest sync` 等
60
+ - **CLIソース側(eenchowリポジトリ)で修正し、`einja sync`で反映する必要あり**
61
+ - 本PR完了後にCLI側Issueとして起票
62
+
63
+ ## Skill-first評価
64
+
65
+ - npxコマンドの引数修正 + CI設定追加 + 誤記修正という**1回限りの修正**
66
+ - 再現パターンではないためSkill化不要
67
+
68
+ ## 検証方法
69
+
70
+ 1. `pnpm prepush` でlint/typecheck/testが通ることを確認
71
+ 2. `grep -r "@einja/dev-cli@latest" packages/create-einja-app/src/` で`@latest`が含まれることを確認
72
+ 3. `grep "@einja/cli[^/]" .claude/skills/einja-npm-release/SKILL.md packages/cli/RELEASING.md` で旧名が残っていないことを確認
73
+ 4. `release-cli.yml` にtest/typecheck/lintステップが存在することを確認
74
+ 5. `git diff --stat` で意図しない変更がないことを確認
@@ -1,7 +1,10 @@
1
1
  # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
2
 
3
3
  # Python
4
- **/__pycache__
4
+ **/__pycache__/
5
+
6
+ # auto-generated files
7
+ **/__generated__/
5
8
 
6
9
  # dependencies
7
10
  **/node_modules
@@ -42,7 +45,8 @@ log/*.pid
42
45
  .env.personal
43
46
  .env.keys
44
47
  .env.local.tmp
45
- .env.local.bak
48
+ .env.*.bak
49
+ .env.keys.bak
46
50
 
47
51
  # dotenvx - 以下は追跡する(暗号化済み)
48
52
  # .env.example(テンプレート)
@@ -45,10 +45,14 @@
45
45
  "env:encrypt": "dotenvx encrypt",
46
46
  "env:show": "tsx scripts/env-show.ts",
47
47
  "env:rotate-secrets": "tsx scripts/env-rotate-secrets.ts",
48
- "einja:sync": "npx @einja/dev-cli sync",
49
- "task:loop": "npx @einja/dev-cli task:loop"
48
+ "einja:sync": "npx --yes @einja/dev-cli@latest sync",
49
+ "init:github": "tsx scripts/init-github.ts",
50
+ "task:loop": "npx --yes @einja/dev-cli@latest task:loop",
51
+ "changeset": "changeset"
50
52
  },
51
53
  "devDependencies": {
54
+ "@changesets/changelog-github": "^0.5.1",
55
+ "@changesets/cli": "^2.29.0",
52
56
  "@clack/prompts": "^0.11.0",
53
57
  "@dotenvx/dotenvx": "^1.51.4",
54
58
  "@types/node": "^25.0.3",