releaselisted
Install: claude install-skill gagip/gagip-dev
## 작업 순서
### 1. 사전 정보 수집 (자동)
**먼저 원격 참조를 갱신한다** — 아래 수집이 전부 `origin/main`·로컬 태그를 기준으로 판단하므로, 참조가 낡아 있으면 릴리스 상태를 잘못 읽는다:
```bash
git fetch origin --tags
```
> 이 단계를 건너뛰면 이미 릴리스·push된 버전이 "미push 커밋"으로 보인다. 실제로 로컬 `origin/main`이 낡아 릴리스 커밋 4개가 미push로 잡히고 "이전 릴리스가 태그 없이 끊겼다"고 오진한 적이 있다 — fetch 후 확인해보니 정상 릴리스 상태였고 실제 미push는 1개뿐이었다.
그다음 아래 정보를 수집한다.
**플러그인 감지** — 변경된 파일 기준으로 자동 감지:
```bash
git diff --name-only HEAD~1..HEAD 2>/dev/null || git diff --name-only --cached
```
- `plugins/<name>/` 파일 변경 → 해당 `<name>` 플러그인 (디렉터리명이 곧 플러그인명, 하드코딩 금지)
- 여러 플러그인 동시 변경 → 각 플러그인 모두 처리
- `plugins/` 외부 파일 변경(루트 `.claude/` 등)은 릴리스 대상이 아니므로 무시한다
**버전 유형 판단** — 호출 인자로 버전 유형을 받지 않았으면 커밋 이력으로 자동 판단:
```bash
git log <마지막 태그>..HEAD --oneline 2>/dev/null || git log --oneline
```
- `feat!`, `fix!`, `BREAKING CHANGE` 포함 → `major`
- `feat:` 포함 → `minor`
- 그 외 (`fix:`, `chore:`, `docs:` 등) → `patch`
| 유형 | 변경 | 예시 |
|------|------|------|
| `major` | x+1.0.0 | 0.2.1 → 1.0.0 |
| `minor` | x.y+1.0 | 0.2.1 → 0.3.0 |
| `patch` | x.y.z+1 | 0.2.1 → 0.2.2 |
| `x.y.z` | 그대로 사용 | — |
호출 인자로 `patch`·`minor`·`major`·`x.y.z`를 받았으면 자동 판단을 무시하고 그것을 쓴다.
**신규 플러그인 예외** — 해당 플러그인의 기존 태그(`<name>/v*`)가 하나도 없으면 첫 릴리스다. 자동 범프하지 말고 `plugin.json`의 현재 버전을 그대로 첫 릴리스로 쓴다. 완료 보고에 "신규 플러그인 첫 릴리스 — 범프 없음"을 명시한다.
**스킬·매니페스트 검증** — 대상 플러그인의 모든 SKILL.md와 공유 메타데이터를 점검:
```bash
find plugins/<플러그인명>/skills -name "SKILL.md" 2>/dev/null
```
각 SKILL.md에 대해 frontmatter 필수 필드(`name`, `description`, `allowed-tools`)와 `allowed-tools`