GitHub Release draft 생성.
먼저 직전 tag(git describe --tags --abbrev=0 HEAD^ 또는 git tag --sort=-v:refname | head -2) 이후 main에 머지된 commit·PR 목록을 수집한다 (git log <prev-tag>..HEAD --oneline). 그걸 사용자 관점으로 카테고리화해서 영문 release notes 본문을 직접 작성한다 (--generate-notes 사용 금지 — 자동 생성된 PR 제목 나열은 사용자에게 의미가 약함).
Release notes 양식 (영문 고정)
## Highlights
<한 문장으로 이 릴리스가 무엇을 하는지. "tightens X, expands Y, adds Z" 식으로 동사 3개 정도.>
## Features
### <기능 그룹 제목>
- **<짧은 헤드라인>.** <뭐가 달라졌는지 + 왜 중요한지 1-3문장. 사용자 관점 동작 위주.>
- …
## Fixes
- **<버그 헤드라인>.** <원인 + 해결 + 사용자가 체감하는 변화. console 메시지 등은 백틱으로 인용.>
## Install
The Chrome Web Store build (`bugshot-v<version>.zip`) is attached to this release. Until the store review completes you can sideload it:
1. Download and unzip `bugshot-v<version>.zip`
2. Open `chrome://extensions` and enable **Developer mode**
3. Click **Load unpacked** and select the unzipped folder
**Full changelog:** https://github.com/SinhyeokKang/bugshot-2/compare/v<prev-version>...v<version>
작성 가이드
- 사용자가 봐도 되는 내용만 적는다. Release notes는 확장 사용자/다운로더를 위한 문서다. 이들이 체감하는 변화만 포함:
- 새 기능, 동작 변경, 버그 수정, UI/UX 변경, 권한/스토리지 영향, 성능/용량 변화 → 포함
- 워크플로우 / 빌드 스크립트 /
.Codex/commands/* 스킬 / AGENTS.md / 내부 리팩토링 / docs 수정 / lockfile 동기화 → 제외
- 즉 release notes 작성 시 commit 목록을 훑어 위 분류로 필터링한 뒤 남는 commit들로만 본문을 구성한다. (commit이 모두 internal인 경우는 § "internal-only release" 참고.)
- 사용자 관점 우선. commit message를 그대로 옮기지 말고 "사용자가 무엇을 하게 되는지 / 무엇이 사라졌는지 / 왜 좋아졌는지"로 다시 쓴다.
- Features 섹션은 그룹화. 동일 영역 변경(picker, issue form, settings 등)을
### <그룹> 단위로 묶어 헤딩한다. 그룹 내 항목은 bold 헤드라인 + 본문 1-3문장.
- Fixes: 단순 패치라도 사용자가 체감하던 증상을 명시 (예: 콘솔 경고, 깜빡임, 데이터 누락).
- bold + 백틱 활용. 헤드라인은
**X.**로 시작, 식별자는 `code`. 가독성 위해 빈 줄 유지.
- 이전/이번 버전이 같은 commit을 둘 다 포함하는 경우(예: 추가 후 같은 release 안에서 제거): "added briefly during this cycle, then removed" 식으로 한 줄 정리. 별도 항목으로 분리 금지.
- 버전 비교 링크는 항상 직전 release tag 기준 (
v<prev-version>...v<version>).
- 분량: Highlights 1문장 + Features 3-6 항목 + Fixes 0-3 항목이 적정.
internal-only release
필터링 후 남는 commit이 0개면 (예: 워크플로우 / 스킬 / 문서만 수정한 release) Highlights에 Maintenance release — no user-facing changes. 한 줄만 적고 Features / Fixes 섹션은 생략. Install / Full changelog는 그대로 유지.
생성 명령
본문이 길어서 인라인 escaping이 복잡하므로 임시 파일을 거쳐 --notes-file로 전달한다:
# 작성한 본문을 임시 파일로 저장 (Write 툴 사용 권장)
# /tmp/bugshot-release-notes.md
gh release create v<version> \
--draft \
--title "v<version>" \
--notes-file /tmp/bugshot-release-notes.md \
bugshot-v<version>.zip
rm /tmp/bugshot-release-notes.md
--draft: 즉시 published되지 않음. 사용자가 GitHub UI에서 검토 후 publish.
--notes-file: heredoc/escaping 회피. 작성한 영문 본문을 그대로 전달.
- zip을 asset으로 첨부 → 외부 사용자가 unpacked 설치 또는 버전 아카이브 용도로 다운로드 가능.
- 출력의 release URL을 절차 7 안내에 그대로 노출.
- 실패 시(권한 부족·이미 release 존재 등): 에러 보고 + 중단. zip은 이미 생성되어 있으므로 사용자가 수동으로
gh release create 재시도 가능.
- 사용자가 본문을 직접 손대고 싶다고 미리 말한 경우에만
--generate-notes로 가벼운 자동 생성 → 사용자 검토 후 재작성하는 방식 허용. 기본은 위 양식대로 직접 작성.