# v1.14 配付構成の再整理(2リポジトリ方式)
Release Date: TBD
## 目的
- **開発用(private)**と**配付用(public)**のリポジトリを分離する
- 配付物と開発専用物(テスト・サンプル等)の混在を解消する
- `init-project.sh` が **正しく配付テンプレートをコピー**できる構成にする
- どちらのリポジトリにも**実行時生成物や秘匿情報が混入しない**状態を保証する
---
## リポジトリ構成
| リポジトリ | URL | 用途 | 追跡対象 |
|-----------|-----|------|---------|
| **private** | `tech-spoke/llm-helper-private` | 開発に必要な全ファイルを管理 | 配付物 + テスト + サンプル + ドラフト + ガイド類 |
| **public** | `tech-spoke/llm-helper` | ユーザーが `git clone` で取得 | 配付に必要なファイルのみ |
ローカル開発環境のリモート構成:
```
origin → llm-helper-private (日常の push/pull)
public → llm-helper (sync スクリプト経由で push)
```
---
## ファイル分類
### A. 配付対象(両リポジトリで追跡)
- サーバー本体: `code_intel_server.py`, `tools/**`
- セットアップ: `setup.sh`, `init-project.sh`, `requirements.txt`
- 配付テンプレート: `templates/code-intel/**`, `templates/claude/**`, `templates/skills/**`
- ドキュメント: `README.md`, `README_ja.md`, `docs/DESIGN.md`, `docs/DESIGN_ja.md`, `docs/updates/**`
- `.gitignore`
### B. 開発専用(private repo のみ)
- テスト: `tests/**`, `tests_with_code/**`, `pytest.ini`
- サンプル: `sample/**`
- 作業中メモ: `docs/draft/**`
- 内部運用ルール: `docs/DOCUMENTATION_RULES.md`, `AGENTS.md`
- 配布手順: `docs/distribution/**`
- IDE 付随: `llm-helper.code-workspace`
- LLM ガイド: `.claude/CLAUDE.md`, `.claude/PARALLEL_GUIDE.md`
### C. どちらにも追跡しない(実行時生成物・環境依存)
- 実行時生成物: `.code-intel/**`(sessions, chroma, logs, ctags_cache 等)
- LLM コマンド生成物: `.claude/commands/**`(`init-project.sh` が生成)
- Python 環境: `__pycache__/`, `*.pyc`, `venv/`, `.venv/`, `.env`
- LLM ローカル設定: `.claude/settings.local.json`(環境依存)
- Codex ローカル: `.codex/**`
- Playwright: `.playwright-mcp/**`
- OS/IDE: `.DS_Store`, `.vscode/`, `.idea/`
- データベース: `vectors.db`, `*.db`
- モデル: `models/**`(大容量・ダウンロードで再現可能なため Git 管理しない)
- ログ: `logs/`, `*.log`
---
## 現状調査(public repo の追跡状況)
### 調査手順(必須)
リモート変更(方針 4)の実施後、`public` リモートを参照して調査する:
1) `git ls-tree -r --name-only public/main` で public repo の追跡ファイル一覧を取得
2) 分類 A/B/C に照らして、B/C に該当するファイルを特定
3) 削除対象として記録
※ リモート変更前は `origin/main` を使用する。変更後は必ず `public/main` を使うこと。
### 削除対象の特定
上記手順で得たファイル一覧から、B/C 分類に該当するものを削除対象とする。
具体的なファイルリストは実行時に生成すること(仕様書に固定値を埋め込まない)。
**B 分類で該当しうるパターン:**
- `.claude/CLAUDE.md`, `.claude/PARALLEL_GUIDE.md`
- `docs/draft/**`, `docs/DOCUMENTATION_RULES.md`
- `tests/**`, `tests_with_code/**`, `pytest.ini`
- `sample/**`
- `llm-helper.code-workspace`
**C 分類で該当しうるパターン:**
- `.claude/commands/**`, `.claude/settings.local.json`
- `.playwright-mcp/**`, `.codex/**`
### テンプレート整合性チェック(必須)
A 分類で不足があれば追加する:
- `templates/code-intel/{config.json, context.yml, doc_research/**, review_prompts/**, interventions/**, verifiers/**, task_planning.md, phase_contract.yml, user_escalation.md}`
- `templates/skills/claude/{code.md, exp.md}`
- `templates/skills/codex/*/SKILL.md`
---
## 方針
### 1) テンプレート専用ディレクトリ(実施済み)
配付物は `templates/code-intel/` と `templates/skills/` に集約。
### 2) `.code-intel/` は生成物用(実施済み)
`.code-intel/` は実行時に作られる領域。どちらのリポジトリでも Git 管理しない。
### 3) `init-project.sh` のコピー元をテンプレートへ変更(実施済み)
- `templates/code-intel/` → `.code-intel/` にコピー
- `templates/skills/claude/` → `.claude/commands/` にコピー
### 4) リモート構成の変更
ローカル開発環境のリモートを変更する:
```bash
git remote set-url origin https://github.com/tech-spoke/llm-helper-private.git
git remote add public https://github.com/tech-spoke/llm-helper.git
```
### 5) sync スクリプトの作成
`sync-to-public.sh` を新設し、A 分類ファイルのみを public repo に同期する。
処理フロー:
1. public repo を一時ディレクトリにクローン
2. A 分類ファイルを private → public にコピー(`rsync --delete` 等)
3. コミット&プッシュ
### 6) public repo のクリーンアップ
現在 public repo に追跡されている B/C 分類ファイルを `git rm` で削除する。
### 7) `.gitignore` の整理
`.gitignore` は **両リポジトリで共通**(C 分類のみ除外)。
B 分類の分離は `.gitignore` ではなく sync スクリプトが担当する。
---
## 実装タスク
- [x] 1) `templates/code-intel/` を新設し、テンプレート一式を配置
- [x] 1.5) `templates/skills/` を新設し、Claude/Codex テンプレートを配置
- [x] 2) `init-project.sh` をテンプレート優先コピーに修正
- [x] 3) ドキュメント(README 等)に配付構成を明記
- [x] 4) private repo をセットアップ(リモート変更、全ファイル push)
- `origin` → `llm-helper-private`, `public` → `llm-helper` に変更
- `main` + 作業ブランチを private repo に push 済み
- [x] 5) `sync-to-public.sh` を作成(A 分類ファイルのみを public に同期)
- rsync フィルタで A 分類のみ include、C 分類を先行 exclude
- `--dry-run` で B/C 除外・A のみ同期を確認済み
- [x] 6) public repo から B/C 分類ファイルを削除
- `sync-to-public.sh` で A 分類のみ同期、B/C 削除を確認
- public/main の全ファイルが A 分類のみであることを照合済み
- [x] 7) `.gitignore` を整理(C 分類のみ除外に統一)
- `.claude/settings.local.json` を追加、コメントを C 分類カテゴリに合わせて再構成
---
## 非対象(v1.14 ではやらない)
- `.code-intel` 内生成物の互換性変更
- `tools/` の挙動変更
- 既存テンプレート内容の意味変更
- GitHub Actions による自動 sync(将来検討)
---
## 期待される効果
- 開発に必要な全ファイルが private repo で安全に管理される
- public repo は配付物のみで構成され、ユーザーが `git clone` で取得できる
- `init-project.sh` が常に正しいテンプレートを配付できる
- sync スクリプトにより配付物の同期が再現可能で、漏れがない