| name | gh-issue-workflow |
| description | Treats GitHub Issues as the async backlog + decision channel between user and AI agent. Use when a non-blocking todo / bug / decision needs to persist beyond the chat session. Enforces 5-section body template (Background / Given / Decision / AC / Next) so issues become reusable agent context, not just sticky notes. |
GitHub Issue Workflow
Purpose
์ฑํ
(ํ๋ฐ์ฑ)๊ณผ plan.md(์ ์ ) ์ฌ์ด์ ๋น ๊ณณ์ GitHub Issue๊ฐ ์ฑ์ด๋ค. 1์ธ ์ฌ์ฉ์ + AI agent ํ์
์์:
- ์ฌ์ฉ์๊ฐ ๋ฐ๊ฒฌํ bug/feature ์์ฒญ โ issue๋ก backlog (chat์ ๋์ง ์๊ณ )
- ์์ฌ๊ฒฐ์ ์ด ํ์ํ ๊ฐ๋ฆผ๊ธธ โ issue body์ ์ต์
์ ๋ฆฌ โ ์ฌ์ฉ์๊ฐ ๋น๋๊ธฐ๋ก ๊ฒฐ์ โ AI agent๊ฐ fetchํด์ ์์
- ๋ชจ๋ ๊ฒฐ์ ์ ์๊ตฌ ๊ฒ์ ๊ฐ๋ฅ ๊ธฐ๋ก (cross-link
#N, label, milestone ํ์ฉ)
dyld-vantage ํ๋ก์ ํธ์ ์ค์ ์ด์ฉ ํจํด(#52~#55)์ ์ผ๋ฐํ. 1์ธ ์๋๋ฆฌ์ค์ ์ต์ ํ (ํ assign / reviewer ์๋ํ ๊ฐ์ ๊ฑด ์ ํจ).
When to Invoke
| ํธ๋ฆฌ๊ฑฐ | ํ๋ |
|---|
| ํ๋ก์ ํธ ์ฐฉ์ + GitHub remote ์กด์ฌ | "epic issue ๋ง๋ค๊น?" 1ํ ๊ถ์ (์ ํ) |
| ์์
๊ณํ ์์ | OPEN issue ๋ชฉ๋ก fetch โ ์ฐ์ ์์ ๊ฒฐ์ ํ todo.md๋ก ์ด๊ด |
| ๊ตฌํ ์ค ์ฌ์ฉ์๊ฐ ์ bug/req ๋ฐ๊ฒฌ | "issue๋ก backlog?" ๊ถ์ |
| ๊ตฌํ commit | message์ Refs #N (์์
์งํ ๊ธฐ๋ก) |
| PR ์์ฑ ์ | body์ Closes #N (์๋ close) |
| ์์ฌ๊ฒฐ์ ๊ฐ๋ฆผ๊ธธ ๋ฑ์ฅ | issue body์ ๋ฐฉํฅ์ฑ (OPEN) ๋ก ๋ฑ๋ก โ ์ฌ์ฉ์ ๋๊ธฐ |
Pre-conditions
- ํ๋ก์ ํธ๊ฐ GitHub remote ๋ณด์ (
git remote -v๋ก ํ์ธ)
gh CLI ์ค์น + ์ธ์ฆ (gh auth status๋ก ํ์ธ). MCP mcp__github__* ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉด ์ฐ์ .
docs/SPEC.md์ issue_tracking: enabled ๋ผ์ธ ์์ ๋๋ง ํ์ฑ (opt-in). ๊ธฐ๋ณธ ๋นํ์ฑ.
์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ์ด๋ฉด ๋ณธ skill ์๋ skip โ ์๋ฌ X.
Process
1. ISSUE.template.md 5์น์
๊ฐ์
์ issue ์์ฑ ์ ๋ณธ skill ๋๋ ํ ๋ฆฌ์ ISSUE.template.md๋ฅผ body๋ก ์ฑ์ด๋ค.
## ๋ฐฐ๊ฒฝ โ Why
## ์ ์ (Given) โ ์์ ์ ์์กด์ฑ/์กฐ๊ฑด
## ๋ฐฉํฅ์ฑ โ OPEN | YYYY-MM-DD ํ์
## ์ ์ฉ ๋์ / AC (When โ Then)
## ํ์ ์์
โ Next
๋น์ด์๋ ์น์
์ ํต์งธ๋ก ์ญ์ (placeholder ๊ธ์ง). BDD ๋งคํ: ์ ์ (Given) โ ์ ์ฉ ๋์(When) โ AC(Then).
2. ๋ฐฉํฅ์ฑ ์ํ๋ก ์์
๊ฐ๋ฅ ์ฌ๋ถ ํ์
| ์ํ | ์๋ฏธ | AI agent ํ๋ |
|---|
| OPEN | ์ฌ์ฉ์ ๊ฒฐ์ ๋๊ธฐ | ๋ณธ issue ์์
์ฐจ๋จ. ๋ค๋ฅธ issue ์ฐ์ ์ฒ๋ฆฌ ๋๋ ์ฌ์ฉ์์๊ฒ ๊ฒฐ์ ์์ฒญ |
| YYYY-MM-DD ํ์ | ๊ฒฐ์ ์๋ฃ | ์์
๊ฐ๋ฅ. AC ์ถฉ์กฑ ํ close |
ํ์ ๋ ์ง ๋ฏธ๋ฌ ์ โ ์ฌ์ฉ์์๊ฒ 1ํ ๊ฒฐ์ ์์ฒญ (Escalation Gate) โ ์๋ต ํ์๋ง ์งํ.
3. ์ ์ (Given) ์ฒดํฌ
์์
์์ ์ ์ ์ ์กฐ๊ฑด ๋ชจ๋ ์ถฉ์กฑ๋๋์ง ํ์ธ:
- ์ฒดํฌ๋ฐ์ค
[x] ๋ชจ๋ ์ฑ์์ก๋?
- ๋ฏธ์ถฉ์กฑ ํญ๋ชฉ โ ์ฐจ๋จ ์ฌ์ + ์ฑ
์ ๋ถ๊ธฐ ๋ณด๊ณ
์ ์ ๊ฐ ๋ค๋ฅธ issue ์๋ฃ์ ์์กดํ๋ฉด โ ์์กด issue๊ฐ close ๋๋์ง ํ์ธ ํ ์งํ.
4. Label ์ฒด๊ณ (์๋ ํ ๊ธ ๊ฐ์ด๋)
3-์ถ label ์ฒด๊ณ โ ๊ฐ ์ถ์์ 1๊ฐ์ฉ ๋ถ์ฐฉ ๊ถ์ฅ:
| ์ถ | Label | ๋ถ์ฐฉ ์์ |
|---|
| type | bug / feature / refactor / docs / infra | issue ์์ฑ ์ 1ํ |
| ์ํ | decision-pending / ready / in-progress / blocked | ๋ฐฉํฅ์ฑยท์ ์ ๋ณํ์ ๋ฐ๋ผ ํ ๊ธ |
| ์ฐ์ ์์ | P0 / P1 / P2 (์ ํ) | ์ฌ์ฉ์ ๊ฒฐ์ |
์ํ ์๋ ํ ๊ธ ๊ท์น (skill์ด ์ฌ์ฉ์์๊ฒ ๊ถ์ ):
๋ฐฉํฅ์ฑ: OPEN โ decision-pending
๋ฐฉํฅ์ฑ: YYYY-MM-DD ํ์ โ ready (decision-pending ์ ๊ฑฐ)
์ ์ ์ฒดํฌ๋ฐ์ค ๋ฏธ์ โ blocked (ready ์ ๊ฑฐ)
PR open โ in-progress
PR merged โ ์๋ close (label ๋ฌด๊ด)
label ๋ถ์ฐฉ์ hook ์ฐจ์ ๊ฐ์ X โ skill ๊ฐ์ด๋. ์ฌ์ฉ์ ๋๋ PR ์๋ํ๋ก ๋ช
์ ์ ์ฉ. gh issue edit <N> --add-label <name> / --remove-label <name> ์ฌ์ฉ.
5. GitHub Projects (V2) ์ฐ๊ณ (์ ํ, opt-in)
GitHub Projects board๋ฅผ ์นธ๋ฐ ํํ backlog๋ก ํ์ฉ ์:
Pre-condition:
docs/SPEC.md์ github_project: <URL> ๋ช
์ (์: https://github.com/users/uzysjung/projects/3)
- ์ฌ์ฉ์๊ฐ Project ๋ฏธ๋ฆฌ ์์ฑ + status field ์ ์ (Backlog / Ready / In Progress / Done)
์๋ ๋์:
- ์ issue ์์ฑ ์ โ
gh project item-add <number> --owner <owner> --url <issue-url> ํธ์ถ
- ์ํ ๋ณํ ์ โ status field ๊ฐฑ์ :
decision-pending โ Project status Backlog
ready โ Ready
- PR open โ
In Progress
- merged + close โ
Done
Project ๋ฏธ์ฌ์ฉ ํ๋ก์ ํธ โ ๋ณธ ์น์
skip (issue label๋ง ํ์ฉ).
๋น๋์:
- iteration field / ์๋ sprint ๋ถ๋ฐฐ (1์ธ ์๋๋ฆฌ์ค over-engineering)
- ๋ณต์ Project board ๋๊ธฐํ (1 SPEC = 1 Project ๊ถ์ฅ)
๋ณธ ์น์
์ GitHub Projects ํ์ฉ์ ๊ฐ์ ํ์ง ์์ โ ์ฌ์ฉ์ ์ ํธ์ ๋ฐ๋ผ.
6. ๋ฐฑ๋ก๊ทธ ์๋ ์ฒ๋ฆฌ ์ํ์ค
์์
์ฌ์ดํด ์์ ์ ๋ค์ ์ํ์ค:
1. gh issue list --state open --json number,title,labels,body
โ OPEN issue ๋ชฉ๋ก์ backlog ํ๋ณด๋ก
2. ๊ฐ issue body์์ "๋ฐฉํฅ์ฑ (YYYY-MM-DD ํ์ )" ํจํด grep
โ ํ์ ๋ ๊ฒ๋ง ์์
๊ฐ๋ฅ ํ๋ณด
3. ์ ์ ๋ฏธ์ถฉ์กฑ issue ์ ์ธ
4. ์ฐ์ ์์ ์ ๋ ฌ (label P0 > P1 > P2 > unlabeled)
5. ์์ 1-3๊ฐ๋ฅผ docs/todo.md๋ก ์ด๊ด + ๊ณํ ๋จ๊ณ ์ง์
7. Commit / PR ์ปจ๋ฒค์
| ์์ | ๋ฉ์์ง ์ปจ๋ฒค์
|
|---|
| Build ์ค ์งํ commit | <type>: ... (refs #N) |
| Ship PR body | Closes #N ๋๋ Fixes #N (์๋ close) |
| ๋ถ๋ถ ์งํ (close ์ ํจ) | Refs #N |
| ํ์ issue ์์ฑ ์ | ์๋ณธ issue body์ "ํ์ ์์
" ์น์
์ #M cross-link |
Output
- GitHub Issue ์์ฑ/๊ฐฑ์ (5์น์
body)
docs/todo.md โ issue list์์ ์ด๊ด๋ task
- commit/PR ๋ฉ์์ง์ issue ๋ฒํธ ์๋ ํฌํจ
Anti-Patterns
- issue body๊ฐ ํ ์ค ("login ์ ๋จ")๋ง โ 5์น์
์๋ฌด. ์ต์ ๋ฐฐ๊ฒฝ + AC๋ ์ฑ์ธ ๊ฒ.
- ๋ฐฉํฅ์ฑ ๋ฏธ๋ช
์ โ OPEN์ธ์ง ํ์ ์ธ์ง ๋ชจ๋ฅด๋ฉด ์์
์์ ๋ถ๊ฐ.
- ์ ์ ๋ฌด์ํ๊ณ ์งํ โ ์์กด issue ๋ฏธํด๊ฒฐ ์ํ๋ก ์์
์ง์
๊ธ์ง.
- PR์์
Closes #N ๋๋ฝ โ ์๋ close ์๊ธฐ ์ฌ์. ์ปจ๋ฒค์
๊ฐ์ .
- ๋ชจ๋ issue์ label ๋ค ๋ถ์ โ ๋
ธ์ด์ฆ. ํต์ฌ ๋ถ๋ฅ๋ง.
- ํ ๊ธฐ๋ฅ ๋์
(assignee ์๋, code owner ์๋ review) โ ๋ณธ skill ๋ฒ์ ๋ฐ. ํ ์ฌ์ฉ์ ๋ณ๋ ์ํฌํ๋ก์ฐ.
Boundary
- GitHub remote ์๋ ํ๋ก์ ํธ โ skill ์๋ ๋นํ์ฑ
docs/SPEC.md์ issue_tracking: enabled ์์ผ๋ฉด ์๋ ๋นํ์ฑ (opt-in)
- private repo ์ ๊ทผ ๊ถํ ์์ผ๋ฉด fetch ์คํจ โ ์ฌ์ฉ์์๊ฒ ๋ณด๊ณ
Examples
dyld-vantage ์ค์ ํจํด (์ฐธ๊ณ )
## ๋ฐฐ๊ฒฝ
Issue #52์์ Feature Flag ์ฌํธ(16โ18) + Blur gate ์ธํ๋ผ ๊ตฌ์ถ ์๋ฃ.
์ด ์ด์๋ ํ์ด์ง๋ณ blur ์ ์ฉ + API ์๋ ์ ํ์ ํ์ ์์
.
## ์ ์ (Given)
- [x] Issue #52 ์๋ฃ (Feature Flag ์ธํ๋ผ)
- [x] Blur gate ์ปดํฌ๋ํธ ์ฌ์ฉ ๊ฐ๋ฅ
## ๋ฐฉํฅ์ฑ (2026-04-22 ํ์ )
- ๋ฉ๋ด ์ ๊ทผ์ ์ ์ง (์ฌ์ด๋๋ฐ ํ ๋
ธ์ถ, 401/403 ์์)
- ํ์ด์ง ๋จ์ blur: outer max-w-* mx-auto ์์ชฝ์ blur_gate 1๊ฐ๋ง
- ๊ฐ๋ณ ๋ธ๋ก๋ณ blur ๊ธ์ง (๋ณต์ก๋ ๋๋น ๊ฐ์น ๋ฎ์)
## ์ ์ฉ ๋์ / AC
- [ ] ๋ชจ๋ _content.html์ blur_gate ์ ์ฉ (When Free user ๋ฐฉ๋ฌธ โ Then blur ๋
ธ์ถ)
- [ ] API ์๋ ์ ํ ๋ฏธ๋ค์จ์ด (When tier ๋ฏธ์ถฉ์กฑ ์์ฒญ โ Then 403)
## ํ์ ์์
- [ ] Issue #56๋ก ๋ถ๋ฆฌ: Pricing ํ์ด์ง CTA ๋์์ธ