From maymust
5단계 루프 step 2 — PR 을 "처음 보는 것처럼" 리뷰. PR 본문의 Why/Design decisions/Out of scope 를 "의도" 로 삼고 diff 를 "구현" 으로 본 뒤 일치 여부·엣지 케이스·복잡도·테스트 공백을 구조화된 찾기로 출력. "셀프 리뷰", "PR 리뷰해줘", "/self-review" 호출 시 사용.
How this skill is triggered — by the user, by Claude, or both
Slash command
/maymust:self-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> 발표의 5단계 루프 step 2: **"세션 초기화 후 셀프 리뷰"**. 작성자 본인이 **새로운 눈** 으로 자기 PR 을 읽고 발견되는 것을 구조화해 내놓는다.
/maymust:self-review — PR 에 대한 의도 vs 구현 셀프 리뷰발표의 5단계 루프 step 2: "세션 초기화 후 셀프 리뷰". 작성자 본인이 새로운 눈 으로 자기 PR 을 읽고 발견되는 것을 구조화해 내놓는다.
/maymust:self-review # 현재 브랜치의 PR
/maymust:self-review 42 # 명시적 PR 번호
이 스킬은 코드를 처음부터 평가 하지 않는다. PR 본문에 작성자가 명시한 의도와 구현이 일치하는지 만 본다:
| PR 본문 섹션 | 리뷰 렌즈 |
|---|---|
## Why | 이 코드가 그 문제를 정말 푸나? |
## Design decisions | 선언된 선택·이유가 코드로 뒷받침되나? 불변식이 깨지는 곳 있나? |
## Out of scope / Follow-up | 여기 명시된 건 빠져도 블로커 아님. 거꾸로, 명시 안 한 중요한 누락은 블로커 |
→ 작성자의 의도가 명확할수록 리뷰 품질이 올라감. PR 본문이 빈약하면 스킬이 "의도 선언 부족 — 일반 품질 체크만 가능" 표시.
작성자 본인 세션에서 바로 호출하면 "방금 이거 짰다" 는 맥락이 편향으로 작용. 이상적인 호출:
/clear
/maymust:self-review
세션 초기화 생략 시 경고만 띄우고 진행. 출력 최상단에 ⚠️ 동일 세션 리뷰 — 편향 가능 표시. 하드 블록 아님 (마찰 최소화).
## Why 의 문제를 실제로 해결하는가?## Design decisions 의 선택이 코드 전반에 일관되게 적용되나?## Design decisions 의 불변식 이 깨지는 지점은?TODO / FIXME / XXX / HACK 태그 남아있나?console.log, fmt.Println, print) 섞였나?userList vs activeUsersForDisplay)usrMgr, cfgSvc)is/has/should 로 시작하나Out of scope / Follow-up 에 "테스트 follow-up" 이 명시돼 있나? (명시되어 있으면 OK)⚠️ 동일 세션 리뷰 — 편향 가능 (미실행이면 생략)
세션 초기화 후 재리뷰 권장: `/clear` → `/maymust:self-review`
# Self-review — PR #<N>: <title>
## 🚫 블로커 (머지 금지)
- `<파일>:<라인>` — <문제> → <제안>
## 🔧 머스트 픽스 (이번 PR 에서 처리)
- `<파일>:<라인>` — <문제> → <제안>
## 💡 닛픽 (원하면)
- `<파일>:<라인>` — <문제>
## 👍 좋음
- <짧은 한 줄 — 잘된 점 1–3개>
## 📋 체크리스트 결과
| 렌즈 | 결과 |
| --- | --- |
| 의도 일치 | ✅ / ⚠️ / 🚫 |
| 엣지 케이스 | ... |
| 잔재 | ... |
| 복잡도 | ... |
| 네이밍 | ... |
| 테스트 | ... |
| 보안·데이터 | ... |
👍 좋음 한 줄 + 체크리스트 결과는 항상 출력gh pr view <N> --json title,body,author
gh pr diff <N>
## Why, ## Design decisions, ## Out of scope 파싱. 없으면 "의도 선언 부족" 경고## Design decisions 에 "고려한 대안 B + 거절 이유" 가 있는데 B 를 재제안⚠️ 동일 세션 리뷰 — 편향 가능
세션 초기화 후 재리뷰 권장: `/clear` → `/maymust:self-review`
# Self-review — PR #42: feat(tenant): 테넌트별 DB/Cache 관리
## 🚫 블로커
- `tenant_settings_store.go:147` — clone() 이 새로 추가한 DBConfigs 필드를 복사하지 않음. State()/Replace() round-trip 마다 필드 소실 → runtime registry 비어있음. PR 의 "테넌트가 격리 경계" 의도 자체가 깨짐
## 🔧 머스트 픽스
- `middleware_tenant.go:23` — ?tenant= 파싱 실패 시 400 반환해야 하는데 panic. 사용자 입력 unvalidated
- `db_pool.go:89` — close(stopCh) 후 factory.Shutdown() 순서 반대. connection goroutine leak 가능
## 💡 닛픽
- `tenant_handlers.go:56` — `handleTenant` 보다 `handleTenantList` 가 구체적
- middleware 로깅에 tenantID 포함하면 debug 편함
## 👍 좋음
- apiFetch 래퍼에 ?tenant 자동 주입하는 설계 — 57개 호출부를 건드리지 않고 tenant-aware 로 만든 점이 깔끔
## 📋 체크리스트 결과
| 렌즈 | 결과 |
| --- | --- |
| 의도 일치 | 🚫 clone 누락으로 핵심 의도 깨짐 |
| 엣지 케이스 | ⚠️ tenant 파싱 실패 경로 |
| 잔재 | ✅ |
| 복잡도 | ✅ |
| 네이밍 | 💡 |
| 테스트 | ⚠️ clone round-trip 테스트 없음 |
| 보안·데이터 | ✅ DB URL 평문은 기존 auth 와 동일 패턴으로 명시됨 |
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub maymustai/ai-dev-playbook --plugin maymust