๐ ์์คํ ๋ฉ์์ง: ์ด Skill์ด ํธ์ถ๋๋ฉด
[SEMO] Skill: list-bugs ํธ์ถ์์คํ ๋ฉ์์ง๋ฅผ ์ฒซ ์ค์ ์ถ๋ ฅํ์ธ์.
list-bugs Skill
Supabase DB ๊ธฐ๋ฐ ๋ฒ๊ทธ ์ด์ ์กฐํ
Purpose
SEMO Office Supabase์ issues ํ
์ด๋ธ์์ issue_type = 'bug' ์ด์๋ฅผ ์กฐํํฉ๋๋ค.
๐ด ๋ฐ์ดํฐ ์์ค ๋ณ๊ฒฝ (v2.0.0)
| ๋ฒ์ | ๋ฐ์ดํฐ ์์ค | ๋ฐฉ์ |
|------|------------|------|
| v1.x | GitHub Issues | gh issue list CLI |
| v2.0 | Supabase | bug_list ๋ทฐ ์กฐํ |
๊ธฐ์กด ๋ฐฉ์์ ๋ฌธ์ ์ (GitHub CLI)
# ๊ธฐ์กด: ๋ผ๋ฒจ ๊ธฐ๋ฐ (๋ ํฌ๋ง๋ค naming์ด ๋ค๋ฆ)
gh issue list --label "bug" --state open
gh issue list --label "BugFix" --state open
- ๋ ํฌ๋ง๋ค ๋ผ๋ฒจ naming์ด ๋ค๋ฆ (bug, BugFix, ๐, fix ๋ฑ)
- GitHub API ํธ์ถ ๋น์ฉ
- ์ผ๊ด๋ ์กฐํ ๋ถ๊ฐ
์ ๋ฐฉ์: Supabase bug_list ๋ทฐ
Supabase์ ๋ฏธ๋ฆฌ ์ ์๋ bug_list ๋ทฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Configuration
Supabase ์ฐ๊ฒฐ ์ ๋ณด
SEMO Office Supabase ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
| ํญ๋ชฉ | ๊ฐ |
|------|-----|
| Project | SEMO Office |
| Table | issues |
| View | bug_list |
| Filter | type = 'bug' AND state = 'open' |
issues ํ ์ด๋ธ ์คํค๋ง
| ์ปฌ๋ผ | ํ์ | ์ค๋ช | |------|------|------| | id | UUID | PK | | office_id | UUID | ์คํผ์ค FK | | number | SERIAL | ์ด์ ๋ฒํธ | | title | TEXT | ์ ๋ชฉ | | body | TEXT | ๋ณธ๋ฌธ | | type | VARCHAR(20) | task, bug, feature, epic | | state | VARCHAR(20) | open, closed | | status | VARCHAR(30) | backlog, todo, in_progress, review, done | | assignee_id | UUID | ๋ด๋น์ FK | | created_at | TIMESTAMPTZ | ์์ฑ์ผ |
Workflow
1. Supabase๋ก ๋ฒ๊ทธ ์กฐํ
// Supabase ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ๋ฒ๊ทธ ์กฐํ
const { data: bugs, error } = await supabase
.from('bug_list')
.select('*')
.order('created_at', { ascending: false });
2. SQL ์ง์ ์กฐํ (MCP Server)
-- bug_list ๋ทฐ ์กฐํ
SELECT * FROM bug_list;
-- ๋๋ issues ํ
์ด๋ธ ์ง์ ์กฐํ
SELECT
i.number,
i.title,
i.status,
ap.name as assignee_name,
i.created_at
FROM issues i
LEFT JOIN agent_personas ap ON i.assignee_id = ap.id
WHERE i.type = 'bug'
AND i.state = 'open'
ORDER BY i.created_at DESC;
3. Office๋ณ ๋ฒ๊ทธ ์กฐํ
-- ํน์ Office์ ๋ฒ๊ทธ๋ง ์กฐํ
SELECT * FROM bug_list
WHERE office_id = '{office_uuid}';
Output Format
## ๐ ๋ฒ๊ทธ ์ด์ ํํฉ (Supabase DB ๊ธฐ์ค)
| # | ์ ๋ชฉ | ์ํ | ๋ด๋น์ | ์์ฑ์ผ |
|---|------|------|--------|--------|
| #123 | API ์๋ต ์ง์ฐ | in_progress | Developer | 2025-12-01 |
| #456 | ๋ฒํผ ํด๋ฆญ ์๋จ | todo | Frontend | 2025-12-05 |
---
**์ด 2๊ฐ์ Open ๋ฒ๊ทธ ์ด์**
์ ์ฒด ์กฐํ ์ฟผ๋ฆฌ
-- bug_list ๋ทฐ๋ฅผ ์ฌ์ฉํ ์ ์ฒด ๋ฒ๊ทธ ์กฐํ
SELECT
number AS "#",
title AS "์ ๋ชฉ",
status AS "์ํ",
assignee_name AS "๋ด๋น์",
TO_CHAR(created_at, 'YYYY-MM-DD') AS "์์ฑ์ผ"
FROM bug_list
ORDER BY created_at DESC;
์ํ๋ณ ํํฐ๋ง
-- ์งํ ์ค์ธ ๋ฒ๊ทธ๋ง ์กฐํ
SELECT * FROM bug_list
WHERE status = 'in_progress';
-- ๋ฐฑ๋ก๊ทธ์ ์๋ ๋ฒ๊ทธ ์กฐํ
SELECT * FROM bug_list
WHERE status = 'backlog';
๋ด๋น์๋ณ ์กฐํ
-- ํน์ ๋ด๋น์์ ๋ฒ๊ทธ ์กฐํ
SELECT * FROM bug_list
WHERE assignee_name = 'Developer';
-- ๋ฏธํ ๋น ๋ฒ๊ทธ ์กฐํ
SELECT * FROM bug_list
WHERE assignee_id IS NULL;
No Bugs Case
## ๐ ๋ฒ๊ทธ ์ด์ ํํฉ (Supabase DB ๊ธฐ์ค)
โ
ํ์ฌ Open ์ํ์ ๋ฒ๊ทธ ์ด์๊ฐ ์์ต๋๋ค.
Error Handling
Supabase ์ฐ๊ฒฐ ์ค๋ฅ
โ ๏ธ **Supabase ์ฐ๊ฒฐ ์ค๋ฅ**
Supabase ํ๋ก์ ํธ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
- MCP ์๋ฒ ์ค์ ์ ํ์ธํด์ฃผ์ธ์.
- Supabase URL๊ณผ API ํค๋ฅผ ํ์ธํด์ฃผ์ธ์.
๊ถํ ์ค๋ฅ
โ ๏ธ **ํ
์ด๋ธ ์ ๊ทผ ์ค๋ฅ**
issues ํ
์ด๋ธ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- RLS ์ ์ฑ
์ ํ์ธํด์ฃผ์ธ์.
- ์๋น์ค ํค ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ํ์ธํด์ฃผ์ธ์.
SEMO Message Format
[SEMO] Skill: list-bugs ํธ์ถ
[SEMO] Skill: list-bugs ์๋ฃ - {N}๊ฐ ๋ฒ๊ทธ ์ด์ ๋ฐ๊ฒฌ
GitHub CLI Fallback
Supabase ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ GitHub CLI๋ก ํด๋ฐฑ:
# Fallback: GitHub Issue Type ๊ธฐ๋ฐ ์กฐํ
gh issue list --repo semicolon-devteam/semo --state open \
--json number,title,issueType,createdAt,assignees \
--jq '.[] | select(.issueType.name == "Bug")'
Related
- issues ํ ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์
- check-feedback Skill - ํผ๋๋ฐฑ ์ด์ ์์ง
- project-status Skill - ์ด์ ์ํ ๋ณ๊ฒฝ