Agent Skills: task-progress Skill

|

UncategorizedID: semicolon-devteam/semo/task-progress

Install this agent skill to your local

pnpm dlx add-skill https://github.com/semicolon-devteam/semo/tree/HEAD/semo-system/semo-skills/task-progress

Skill Files

Browse the full folder contents for task-progress.

Download Skill

Loading file tree…

semo-system/semo-skills/task-progress/SKILL.md

Skill Metadata

Name
task-progress
Description
|

시스템 메시지: 이 Skill이 호출되면 [SEMO] Skill: task-progress 호출 - #{이슈번호} 시스템 메시지를 첫 줄에 출력하세요.

task-progress Skill

개발자 업무 진행도를 체크리스트 형태로 표시하고 자동 진행 지원 (Supabase DB 기반)

🔴 데이터 소스 변경 (v2.0.0)

| 버전 | 데이터 소스 | 방식 | |------|------------|------| | v1.x | GitHub Projects | GraphQL API | | v2.0 | Supabase | issues + issue_status_history 조회 |


트리거

  • /SEMO:task-progress 명령어
  • "어디까지 했어", "현황", "체크리스트", "진행도" 키워드
  • 이슈 번호 제공 시 orchestrator가 자동 호출

개발자 전체 프로세스

1. 업무할당 (backlog → todo)
2. 상태 변경 (todo → in_progress)
3. dev 브랜치에서 Spec 작성 (spec.md, plan.md, tasks.md)
4. Spec 커밋 & 푸시 (원격에 Spec 공유)
5. Feature 브랜치 생성 (Spec 완료 후)
6. Draft PR 생성
7. 실제 코드 구현 (ADD Phase 4)
8. 테스트코드 작성 및 테스트 진행
9. 린트 및 빌드 통과
10. 푸시 및 리뷰 요청 (in_progress → review)
11. PR 승인 및 dev 머지 (review → testing)
12. STG 환경 QA 테스트 (testing → done)

상태 흐름

backlog → todo → in_progress → review → testing → done
                      ↓           ↑
                  확인요청      수정요청

Workflow

Step 1: 이슈 현재 상태 조회

-- 이슈 상세 정보 조회
SELECT
  i.number,
  i.title,
  i.type,
  i.status,
  i.state,
  i.labels,
  i.estimation_point,
  ap.name AS assignee_name,
  TO_CHAR(i.created_at, 'YYYY-MM-DD') AS created_at,
  TO_CHAR(i.updated_at, 'YYYY-MM-DD') AS updated_at
FROM issues i
LEFT JOIN agent_personas ap ON i.assignee_id = ap.id
WHERE i.number = 123
  AND i.office_id = '{office_uuid}';

Step 2: 상태 변경 이력 조회

-- 상태 변경 히스토리 조회
SELECT
  ish.from_status,
  ish.to_status,
  TO_CHAR(ish.changed_at, 'YYYY-MM-DD HH24:MI') AS changed_at,
  ap.name AS changed_by
FROM issue_status_history ish
LEFT JOIN agent_personas ap ON ish.changed_by = ap.id
WHERE ish.issue_id = (
  SELECT id FROM issues WHERE number = 123
)
ORDER BY ish.changed_at DESC;

Step 3: 진행도 체크리스트 생성

// Supabase로 조회
const { data: issue, error } = await supabase
  .from('issues')
  .select(`
    number, title, status, body,
    assignee:agent_personas(name)
  `)
  .eq('number', 123)
  .eq('office_id', officeId)
  .single();

// 상태별 체크리스트 생성
const checklist = generateChecklist(issue.status);

Quick Checks

| Step | Command | |------|---------| | 브랜치 | git branch --show-current | | PR 확인 | gh pr list --head {branch} --json number,isDraft | | 린트 | npm run lint | | 타입체크 | npx tsc --noEmit | | 미푸시 확인 | git log origin/{branch}..HEAD --oneline |

Output Format

[SEMO] Skill: task-progress 호출 - #123

## 📋 작업 진행 현황: #123

### 이슈 정보

| 항목 | 내용 |
|------|------|
| **제목** | 로그인 페이지 구현 |
| **유형** | feature |
| **상태** | in_progress |
| **담당자** | @reus |
| **작업량** | 4 points |

### 진행도 체크리스트

- [x] 1. 업무 할당
- [x] 2. 상태 변경 (todo → in_progress)
- [x] 3. Spec 작성
- [x] 4. Feature 브랜치 생성
- [x] 5. Draft PR 생성
- [ ] 6. 코드 구현
- [ ] 7. 테스트 작성
- [ ] 8. 린트/빌드 통과
- [ ] 9. 리뷰 요청
- [ ] 10. PR 머지

### 상태 변경 이력

| 시간 | 변경 | 변경자 |
|------|------|--------|
| 2025-01-10 14:30 | todo → in_progress | @reus |
| 2025-01-10 10:00 | backlog → todo | @pm |

### 다음 단계

🎯 **현재 단계**: 코드 구현
📌 **권장 액션**: `skill:write-code` 호출

[SEMO] Skill: task-progress 완료

자동 상태 변경

리뷰 요청 시 (Step 9)

PR Ready 상태가 되면 자동으로 상태를 "review"로 변경:

-- 상태를 review로 변경
SELECT * FROM update_issue_status(
  123,
  '{office_uuid}'::uuid,
  'review',
  '{actor_uuid}'::uuid
);
[SEMO] Skill: task-progress → 상태 자동 변경

📋 **이슈**: #123
🔀 **PR**: #150 Ready for Review
🔄 **상태 변경**: in_progress → **review**

✅ 상태 변경 완료

Error Handling

이슈 미발견

❌ #123 이슈를 찾을 수 없습니다.

확인사항:
- 이슈 번호가 올바른가요?
- Office ID가 올바른가요?

상태 이력 없음

⚠️ #123의 상태 변경 이력이 없습니다.

아직 상태가 변경된 적이 없는 새 이슈입니다.
현재 상태: backlog

GitHub Projects Fallback

Supabase 연결이 불가능한 경우:

# Fallback: GitHub Projects GraphQL로 상태 조회
gh api graphql -f query='
  query {
    repository(owner: "semicolon-devteam", name: "semo") {
      issue(number: 123) {
        projectItems(first: 1) {
          nodes {
            fieldValueByName(name: "Status") {
              ... on ProjectV2ItemFieldSingleSelectValue {
                name
              }
            }
          }
        }
      }
    }
  }
'

Related Skills

References