selfish-pipeline 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +21 -0
- package/.claude-plugin/plugin.json +12 -0
- package/LICENSE +21 -0
- package/MIGRATION.md +100 -0
- package/README.md +195 -0
- package/bin/cli.mjs +111 -0
- package/commands/analyze.md +113 -0
- package/commands/architect.md +119 -0
- package/commands/auto.md +271 -0
- package/commands/checkpoint.md +75 -0
- package/commands/clarify.md +71 -0
- package/commands/debug.md +98 -0
- package/commands/implement.md +166 -0
- package/commands/init.md +97 -0
- package/commands/plan.md +161 -0
- package/commands/principles.md +94 -0
- package/commands/research.md +94 -0
- package/commands/resume.md +69 -0
- package/commands/review.md +120 -0
- package/commands/security.md +114 -0
- package/commands/spec.md +123 -0
- package/commands/tasks.md +111 -0
- package/hooks/hooks.json +47 -0
- package/package.json +48 -0
- package/scripts/pre-compact-checkpoint.sh +67 -0
- package/scripts/selfish-pipeline-manage.sh +84 -0
- package/scripts/selfish-stop-gate.sh +49 -0
- package/scripts/session-start-context.sh +63 -0
- package/scripts/track-selfish-changes.sh +34 -0
- package/templates/selfish.config.nextjs-fsd.md +107 -0
- package/templates/selfish.config.template.md +90 -0
package/commands/auto.md
ADDED
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# /selfish:auto — Full Auto 파이프라인
|
|
2
|
+
|
|
3
|
+
> 기능 설명 하나로 spec → plan → tasks → implement → review → clean을 완전 자동 실행한다.
|
|
4
|
+
> 중간 확인 없음. clarify/analyze 스킵. Critic Loop는 각 단계에서 자동 수행.
|
|
5
|
+
|
|
6
|
+
## 인자
|
|
7
|
+
|
|
8
|
+
- `$ARGUMENTS` — (필수) 기능 설명 자연어 텍스트
|
|
9
|
+
|
|
10
|
+
## 설정 로드
|
|
11
|
+
|
|
12
|
+
**반드시** `.claude/selfish.config.md`를 먼저 읽는다. 이 파일에 정의된 값을 아래에서 `{config.*}`로 참조한다:
|
|
13
|
+
- `{config.ci}` — 전체 CI 명령어
|
|
14
|
+
- `{config.gate}` — Phase 게이트 명령어
|
|
15
|
+
- `{config.architecture}` — 아키텍처 스타일 및 규칙
|
|
16
|
+
- `{config.framework}` — 프레임워크 특성 (서버/클라이언트 경계 등)
|
|
17
|
+
- `{config.code_style}` — 코드 스타일 규칙
|
|
18
|
+
- `{config.risks}` — 프로젝트 고유 위험 패턴
|
|
19
|
+
- `{config.mini_review}` — Mini-Review 점검 항목
|
|
20
|
+
|
|
21
|
+
설정 파일이 없으면: "`.claude/selfish.config.md`가 없습니다. `/selfish:init`으로 프로젝트 설정을 생성하세요." 출력 후 **중단**.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Critic Loop 규칙 (전 Phase 공통)
|
|
26
|
+
|
|
27
|
+
> Critic Loop의 목적은 산출물의 결함을 **반드시 찾아내는 것**이다. "PASS"만 나열하는 것은 Critic을 실행하지 않은 것과 동일하다.
|
|
28
|
+
|
|
29
|
+
### 필수 원칙
|
|
30
|
+
|
|
31
|
+
1. **최소 발견 수**: 각 Critic 회차에서 **기준당 최소 1개의 우려사항, 개선점, 또는 검증 근거**를 기술해야 한다. 문제가 없다면 "왜 문제가 없는지"를 구체적으로 설명한다.
|
|
32
|
+
2. **체크리스트 응답**: 각 기준에 대해 구체적 질문에 답변하는 형태로 출력한다. "PASS" 한 단어 금지.
|
|
33
|
+
3. **Adversarial Pass**: 매 회차의 마지막에 **"이 산출물이 실패하는 시나리오 1가지"**를 반드시 기술한다. 시나리오가 현실적이면 FAIL로 전환하여 수정한다.
|
|
34
|
+
4. **정량적 근거**: "없음", "준수" 같은 정성적 판단 대신, "N개 중 M개 확인", "X줄 중 Y줄 해당" 같은 정량 데이터를 제시한다.
|
|
35
|
+
|
|
36
|
+
### 출력 형식
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
=== CRITIC {N}/{MAX} ===
|
|
40
|
+
[기준1] {질문} → {구체적 답변 + 정량 근거}
|
|
41
|
+
우려: {있으면 기술, 없으면 "왜 없는지" 설명}
|
|
42
|
+
[기준2] ...
|
|
43
|
+
[ADVERSARIAL] 실패 시나리오: {구체적 시나리오}
|
|
44
|
+
→ 현실적? {Y → FAIL + 수정 / N → 근거 기술}
|
|
45
|
+
=== 결과: FAIL {N}건 수정 / 또는 PASS (근거 첨부) ===
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 실행 절차
|
|
51
|
+
|
|
52
|
+
### Phase 0: 준비
|
|
53
|
+
|
|
54
|
+
1. `$ARGUMENTS` 비어있으면 → "기능 설명을 입력하세요." 중단
|
|
55
|
+
2. 현재 브랜치 확인 → `BRANCH_NAME`
|
|
56
|
+
3. Feature 이름 결정 (키워드 2-3개 → kebab-case)
|
|
57
|
+
4. **Pipeline Flag 활성화** (Hook 연동):
|
|
58
|
+
```bash
|
|
59
|
+
"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" start {feature}
|
|
60
|
+
```
|
|
61
|
+
- Safety Snapshot 자동 생성 (`selfish/pre-auto` git tag)
|
|
62
|
+
- Stop Gate Hook 활성화 (CI 미통과 시 응답 종료 차단)
|
|
63
|
+
- 변경 파일 추적 시작
|
|
64
|
+
5. `specs/{feature}/` 디렉토리 생성 → **경로를 `PIPELINE_ARTIFACT_DIR`로 기록** (Clean 스코프용)
|
|
65
|
+
6. 시작 알림:
|
|
66
|
+
```
|
|
67
|
+
🚀 Auto 파이프라인 시작: {feature}
|
|
68
|
+
├─ 1/6 Spec → 2/6 Plan → 3/6 Tasks → 4/6 Implement → 5/6 Review → 6/6 Clean
|
|
69
|
+
└─ 예상: 전체 자동 실행 (중간 확인 없음)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Phase 1: Spec (1/6)
|
|
73
|
+
|
|
74
|
+
`"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" phase spec`
|
|
75
|
+
|
|
76
|
+
`/selfish:spec`의 로직을 인라인 실행:
|
|
77
|
+
|
|
78
|
+
1. 코드베이스에서 관련 코드 탐색 (Glob, Grep) — `{config.architecture}` 계층별 탐색
|
|
79
|
+
2. `specs/{feature}/spec.md` 생성
|
|
80
|
+
3. `[NEEDS CLARIFICATION]` 항목은 **최선의 추정으로 자동 해결** (clarify 스킵)
|
|
81
|
+
- 추정한 항목에 `[AUTO-RESOLVED]` 태그 추가
|
|
82
|
+
4. **Critic Loop 1회** (Critic Loop 규칙 준수):
|
|
83
|
+
- COMPLETENESS: 모든 User Story에 수용 시나리오가 있는가? 누락된 요구사항은?
|
|
84
|
+
- MEASURABILITY: 성공 기준이 주관적이지 않고 측정 가능한가? **수치 목표가 있다면 근거를 제시했는가?**
|
|
85
|
+
- INDEPENDENCE: 구현 세부사항(코드, 라이브러리명)이 섞이지 않았는가?
|
|
86
|
+
- EDGE_CASES: 최소 2개 이상 식별했는가? 빠진 경계 조건은?
|
|
87
|
+
- FAIL 항목 → 자동 수정 후 spec.md 업데이트
|
|
88
|
+
5. 진행 표시: `✓ 1/6 Spec 완료 (US: {N}개, FR: {N}개, Critic: {FAIL수}건 수정)`
|
|
89
|
+
|
|
90
|
+
### Phase 2: Plan (2/6)
|
|
91
|
+
|
|
92
|
+
`"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" phase plan`
|
|
93
|
+
|
|
94
|
+
`/selfish:plan`의 로직을 인라인 실행:
|
|
95
|
+
|
|
96
|
+
1. spec.md 로드
|
|
97
|
+
2. 기술적 불확실성 있으면 → WebSearch/코드탐색으로 자동 해결 → research.md 생성
|
|
98
|
+
3. `specs/{feature}/plan.md` 생성
|
|
99
|
+
- **수치 목표(줄 수 등)를 설정할 경우, 구조 분석 기반 추정치를 함께 기술** (예: "함수 A ~50줄, 컴포넌트 B ~80줄 → 합계 ~130줄")
|
|
100
|
+
4. **Critic Loop 3회** (Critic Loop 규칙 준수):
|
|
101
|
+
- 기준: COMPLETENESS, FEASIBILITY, ARCHITECTURE, RISK, PRINCIPLES
|
|
102
|
+
- **RISK 기준 필수 점검 항목**:
|
|
103
|
+
- `{config.ci}` 실패 시나리오를 **최소 3가지** 열거하고 대응 방안 기술
|
|
104
|
+
- `{config.risks}`의 모든 패턴을 하나씩 점검
|
|
105
|
+
- `{config.framework}` 특성 (서버/클라이언트 경계 등) 고려
|
|
106
|
+
- **ARCHITECTURE 기준**: 이동/생성되는 파일의 import 경로를 구체적으로 기술하고 `{config.architecture}` 규칙 위반 여부를 사전 검증
|
|
107
|
+
- 매 회차마다 이전 회차에서 놓친 점을 **명시적으로 탐색** ("2회차: 1회차에서 {X}를 놓쳤다. 추가 검토: ...")
|
|
108
|
+
5. 진행 표시: `✓ 2/6 Plan 완료 (Critic: {총 FAIL 수정}건, 파일: {N}개)`
|
|
109
|
+
|
|
110
|
+
### Phase 3: Tasks (3/6)
|
|
111
|
+
|
|
112
|
+
`"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" phase tasks`
|
|
113
|
+
|
|
114
|
+
`/selfish:tasks`의 로직을 인라인 실행:
|
|
115
|
+
|
|
116
|
+
1. plan.md 로드
|
|
117
|
+
2. Phase별 태스크 분해 (T001, T002, ...)
|
|
118
|
+
3. **[P] 병렬 마커 규칙**:
|
|
119
|
+
- 파일 경로가 겹치지 않는 독립 태스크에 `[P]` 마커 부여
|
|
120
|
+
- [P] 태스크는 반드시 Phase 4에서 **Task 도구 병렬 호출로 실행** (선언만 하고 순차 실행 금지)
|
|
121
|
+
- 배치당 최대 5개
|
|
122
|
+
4. 커버리지 매핑 (FR → Task)
|
|
123
|
+
5. **Critic Loop 1회** (Critic Loop 규칙 준수):
|
|
124
|
+
- COVERAGE: 모든 FR/NFR이 최소 1개 태스크에 매핑되는가?
|
|
125
|
+
- [P] 마커가 붙은 태스크 간 파일 경로 겹침이 없는가?
|
|
126
|
+
6. `specs/{feature}/tasks.md` 생성
|
|
127
|
+
7. 진행 표시: `✓ 3/6 Tasks 완료 (태스크: {N}개, 병렬: {N}개)`
|
|
128
|
+
|
|
129
|
+
### Phase 4: Implement (4/6)
|
|
130
|
+
|
|
131
|
+
`"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" phase implement`
|
|
132
|
+
|
|
133
|
+
`/selfish:implement`의 로직을 인라인 실행:
|
|
134
|
+
|
|
135
|
+
1. tasks.md 파싱
|
|
136
|
+
2. Phase별 실행:
|
|
137
|
+
- **순차 태스크**: 직접 실행
|
|
138
|
+
- **[P] 태스크**: **반드시 Task 도구로 병렬 서브에이전트 위임** (배치 최대 5개). 순차 실행 금지.
|
|
139
|
+
```
|
|
140
|
+
Task("T012: AudioFadeControl 이동", subagent_type: "general-purpose", ...)
|
|
141
|
+
Task("T013: AudioVolumeControl 이동", subagent_type: "general-purpose", ...)
|
|
142
|
+
→ 병렬 실행 → 완료 대기 → 통합
|
|
143
|
+
```
|
|
144
|
+
3. tasks.md 내 각 Implementation Phase(Phase 1, 2, 3...) 완료마다 **3단계 게이트** (모두 필수, 하나라도 생략 시 다음 Phase 진입 불가):
|
|
145
|
+
|
|
146
|
+
**Step 1. CI 게이트**: `{config.gate}`
|
|
147
|
+
- 실패 시 자동 수정 (최대 3회)
|
|
148
|
+
- 3회 실패 → 해당 Phase 중단, 사용자에게 보고
|
|
149
|
+
|
|
150
|
+
**Step 2. Mini-Review** (정량적 검증 필수):
|
|
151
|
+
- 변경된 파일 목록을 나열하고 **각 파일에 대해** `{config.mini_review}` 항목을 확인
|
|
152
|
+
- 출력 형식:
|
|
153
|
+
```
|
|
154
|
+
Mini-Review ({N}개 파일):
|
|
155
|
+
- file1.tsx: ✓ 전항목 통과
|
|
156
|
+
- file2.tsx: ⚠ {항목} 위반 → 수정
|
|
157
|
+
- 위반: {M}건 → 수정 후 CI 재실행
|
|
158
|
+
```
|
|
159
|
+
- 문제 발견 시 → 즉시 수정 후 CI 게이트 재실행
|
|
160
|
+
|
|
161
|
+
**Step 3. Auto-Checkpoint** (필수 — 생략 금지):
|
|
162
|
+
- `memory/checkpoint.md`에 아래 정보 기록:
|
|
163
|
+
```markdown
|
|
164
|
+
## Checkpoint: {feature} Phase {N}
|
|
165
|
+
- 시각: {timestamp}
|
|
166
|
+
- 완료 태스크: T001~T{N} ({완료}/{전체})
|
|
167
|
+
- 변경 파일: {파일 목록}
|
|
168
|
+
- CI: 통과
|
|
169
|
+
- 다음: Phase {N+1} 또는 계속
|
|
170
|
+
```
|
|
171
|
+
- checkpoint 미기록 시 다음 Phase 진입 불가
|
|
172
|
+
|
|
173
|
+
4. tasks.md에 `[x]` 실시간 업데이트
|
|
174
|
+
5. 전체 완료 후 `{config.ci}` 최종 검증
|
|
175
|
+
- 통과 시: `"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" ci-pass` (Stop Gate 해제)
|
|
176
|
+
6. **Implement 회고**: Plan에서 예측하지 못한 문제가 발생했다면 `specs/{feature}/retrospective.md`에 기록 (Clean에서 memory 반영용)
|
|
177
|
+
7. 진행 표시: `✓ 4/6 Implement 완료 ({완료}/{전체} 태스크, CI: ✓, Mini-Review: ✓, Checkpoint: ✓)`
|
|
178
|
+
|
|
179
|
+
### Phase 5: Review (5/6)
|
|
180
|
+
|
|
181
|
+
`"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" phase review`
|
|
182
|
+
|
|
183
|
+
`/selfish:review`의 로직을 인라인 실행:
|
|
184
|
+
|
|
185
|
+
1. 구현된 변경 파일 대상 리뷰 (`git diff HEAD`)
|
|
186
|
+
2. 코드 품질, `{config.architecture}` 규칙, 보안, 성능, `{config.code_style}` 패턴 준수 검사
|
|
187
|
+
3. **Critic Loop 1회** (Critic Loop 규칙 준수):
|
|
188
|
+
- COMPLETENESS: spec.md의 모든 SC(성공 기준)를 하나씩 대조. 미달 시 구체적 수치 제시.
|
|
189
|
+
- PRECISION: 불필요한 변경이 포함되지 않았는가? 스코프 밖 수정이 있는가?
|
|
190
|
+
4. **SC 미달 항목 처리**:
|
|
191
|
+
- 수정 가능 → 자동 수정 시도 → `{config.ci}` 재검증
|
|
192
|
+
- 수정 불가 → 사유와 함께 최종 보고에 명시 (사후 합리화 금지, Plan의 목표 설정 오류로 기록)
|
|
193
|
+
5. 진행 표시: `✓ 5/6 Review 완료 (🔴{N} 🟡{N} 🔵{N}, SC 미달: {N}건)`
|
|
194
|
+
|
|
195
|
+
### Phase 6: Clean (6/6)
|
|
196
|
+
|
|
197
|
+
`"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" phase clean`
|
|
198
|
+
|
|
199
|
+
구현 및 리뷰 완료 후 아티팩트 정리 및 코드베이스 위생 점검:
|
|
200
|
+
|
|
201
|
+
1. **아티팩트 정리** (스코프 제한):
|
|
202
|
+
- **현재 파이프라인이 생성한 `specs/{feature}/` 디렉토리만 삭제**
|
|
203
|
+
- 다른 `specs/` 하위 디렉토리가 존재하면 **삭제하지 않음** (사용자에게 존재를 알리기만 함)
|
|
204
|
+
- 파이프라인 중간 산출물은 코드베이스에 남기지 않음
|
|
205
|
+
2. **Dead Code 스캔**:
|
|
206
|
+
- 구현 과정에서 발생한 미사용 import 검출 (`{config.lint}`로 확인)
|
|
207
|
+
- 이동/삭제된 파일의 빈 디렉토리 제거
|
|
208
|
+
- 미사용 export 검출 (이동된 코드의 원래 위치 re-export 등)
|
|
209
|
+
3. **최종 CI 게이트**:
|
|
210
|
+
- `{config.ci}` 최종 실행
|
|
211
|
+
- 실패 시 자동 수정 (최대 2회)
|
|
212
|
+
4. **Memory 업데이트** (해당 시):
|
|
213
|
+
- 파이프라인 중 발견된 재사용 가능한 패턴 → `memory/` 기록
|
|
214
|
+
- `[AUTO-RESOLVED]` 항목이 있었으면 → 결정 사항 `memory/decisions/`에 기록
|
|
215
|
+
- **retrospective.md가 있으면** → Plan 단계의 Critic Loop가 놓친 패턴으로 `memory/` 기록 (다음 실행에서 RISK 점검 항목으로 재활용)
|
|
216
|
+
5. **Checkpoint 리셋**:
|
|
217
|
+
- `memory/checkpoint.md` 초기화 (파이프라인 완료 = 세션 목적 달성)
|
|
218
|
+
6. **Pipeline Flag 해제** (Hook 연동):
|
|
219
|
+
```bash
|
|
220
|
+
"${CLAUDE_PLUGIN_ROOT}/scripts/selfish-pipeline-manage.sh" end
|
|
221
|
+
```
|
|
222
|
+
- Stop Gate Hook 비활성화
|
|
223
|
+
- 변경 추적 로그 삭제
|
|
224
|
+
- Safety tag 제거 (성공 완료이므로)
|
|
225
|
+
7. 진행 표시: `✓ 6/6 Clean 완료 (삭제: {N}개, Dead Code: {N}개, CI: ✓)`
|
|
226
|
+
|
|
227
|
+
### 최종 출력
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
🏁 Auto 파이프라인 완료: {feature}
|
|
231
|
+
├─ Spec: US {N}개, FR {N}개
|
|
232
|
+
├─ Plan: Critic {FAIL 수정}건, 리서치 {있음/없음}
|
|
233
|
+
├─ Tasks: {전체}개 (병렬 {N}개)
|
|
234
|
+
├─ Implement: {완료}/{전체} 태스크, CI ✓, Checkpoint ✓
|
|
235
|
+
├─ Review: 🔴{N} 🟡{N} 🔵{N}, SC 미달: {N}건
|
|
236
|
+
├─ Clean: 아티팩트 {N}개 삭제, Dead Code {N}개 제거
|
|
237
|
+
├─ 변경 파일: {N}개
|
|
238
|
+
├─ Auto-Resolved: {N}개 (검토 권장)
|
|
239
|
+
├─ Retrospective: {있음/없음}
|
|
240
|
+
└─ specs/{feature}/ 정리 완료
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## 중단 조건
|
|
244
|
+
|
|
245
|
+
다음 상황에서 파이프라인을 **중단**하고 사용자에게 보고:
|
|
246
|
+
|
|
247
|
+
1. `{config.ci}` 3회 연속 실패
|
|
248
|
+
2. 구현 중 파일 충돌 (다른 브랜치 변경과 겹침)
|
|
249
|
+
3. Critical 보안 이슈 발견 (자동 수정 불가)
|
|
250
|
+
|
|
251
|
+
중단 시:
|
|
252
|
+
```
|
|
253
|
+
⚠ 파이프라인 중단 (Phase {N}/6)
|
|
254
|
+
├─ 원인: {중단 사유}
|
|
255
|
+
├─ 완료된 단계: {완료 목록}
|
|
256
|
+
├─ 롤백: git reset --hard selfish/pre-auto (구현 전 상태로 복원)
|
|
257
|
+
├─ 체크포인트: memory/checkpoint.md (마지막 Phase 게이트 통과 시점)
|
|
258
|
+
├─ 아티팩트: specs/{feature}/ (부분 완료, Clean 미실행 시 수동 삭제 필요)
|
|
259
|
+
└─ 재개: /selfish:resume → /selfish:implement (체크포인트 기반)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## 주의사항
|
|
263
|
+
|
|
264
|
+
- **Full Auto**: 중간 확인 없이 끝까지 실행. 빠르지만 방향 수정 불가.
|
|
265
|
+
- **Auto-Resolved 검토**: `[AUTO-RESOLVED]` 태그가 붙은 항목은 추정치이므로 사후 검토 권장.
|
|
266
|
+
- **대규모 기능 주의**: User Story 5개 초과 예상 시 시작 전 경고.
|
|
267
|
+
- **기존 코드 우선**: 수정 전 반드시 기존 파일 읽기. 맹목적 생성 금지.
|
|
268
|
+
- **프로젝트 규칙 준수**: `selfish.config.md`와 `CLAUDE.md`의 프로젝트 규칙 우선.
|
|
269
|
+
- **Critic Loop는 의식이 아니다**: "PASS" 한 줄은 Critic을 실행하지 않은 것과 동일. 반드시 Critic Loop 규칙 섹션의 형식을 따른다.
|
|
270
|
+
- **[P] 병렬은 강제다**: tasks.md에 [P] 마커를 붙였으면 반드시 Task 도구로 병렬 실행. 순차로 대체 금지.
|
|
271
|
+
- **스코프 외 삭제 금지**: Clean에서 현재 파이프라인이 생성하지 않은 파일/디렉토리를 삭제하지 않는다.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# /selfish:checkpoint — 세션 상태 저장
|
|
2
|
+
|
|
3
|
+
> 현재 작업 상태를 memory/checkpoint.md에 저장한다.
|
|
4
|
+
> 세션 중단 시에도 진행 상황을 보존한다.
|
|
5
|
+
|
|
6
|
+
## 인자
|
|
7
|
+
|
|
8
|
+
- `$ARGUMENTS` — (선택) 체크포인트 메시지 (예: "Phase 2 완료, UI 구현 시작 전")
|
|
9
|
+
|
|
10
|
+
## 실행 절차
|
|
11
|
+
|
|
12
|
+
### 1. 현재 상태 수집
|
|
13
|
+
|
|
14
|
+
자동으로 수집:
|
|
15
|
+
|
|
16
|
+
1. **Git 상태**:
|
|
17
|
+
- 현재 브랜치
|
|
18
|
+
- 마지막 커밋 해시 + 메시지
|
|
19
|
+
- 변경된 파일 목록 (`git status --short`)
|
|
20
|
+
2. **활성 Feature**:
|
|
21
|
+
- `specs/` 하위 디렉토리 확인
|
|
22
|
+
- 각 feature의 진행 상태 (spec만? plan까지? tasks까지? 구현 중?)
|
|
23
|
+
3. **Tasks 진행률**:
|
|
24
|
+
- tasks.md가 있으면 `[x]`/`[ ]` 카운트
|
|
25
|
+
4. **현재 작업 컨텍스트**:
|
|
26
|
+
- `$ARGUMENTS` 메시지
|
|
27
|
+
- 최근 수정한 파일 (git diff --name-only)
|
|
28
|
+
|
|
29
|
+
### 2. 체크포인트 저장
|
|
30
|
+
|
|
31
|
+
`memory/checkpoint.md`에 **덮어쓰기** (최신 상태만 유지):
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
# Session Checkpoint
|
|
35
|
+
|
|
36
|
+
> Saved: {YYYY-MM-DD HH:mm}
|
|
37
|
+
> Branch: {브랜치명}
|
|
38
|
+
> Commit: {해시} — {메시지}
|
|
39
|
+
|
|
40
|
+
## 메시지
|
|
41
|
+
{$ARGUMENTS 또는 "자동 체크포인트"}
|
|
42
|
+
|
|
43
|
+
## 활성 Feature
|
|
44
|
+
| Feature | 상태 | 진행률 |
|
|
45
|
+
|---------|------|--------|
|
|
46
|
+
| {이름} | {spec/plan/tasks/implementing/done} | {N/M tasks} |
|
|
47
|
+
|
|
48
|
+
## 미완료 작업
|
|
49
|
+
{구체적인 다음 단계}
|
|
50
|
+
|
|
51
|
+
## 변경된 파일
|
|
52
|
+
```
|
|
53
|
+
{git status --short 결과}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 컨텍스트 노트
|
|
57
|
+
{현재 작업에서 기억해야 할 사항}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 3. 최종 출력
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
💾 체크포인트 저장
|
|
64
|
+
├─ 시간: {HH:mm}
|
|
65
|
+
├─ 브랜치: {브랜치명}
|
|
66
|
+
├─ 활성 Feature: {개수}개
|
|
67
|
+
├─ 진행률: {완료 태스크}/{전체 태스크}
|
|
68
|
+
└─ 복원: /selfish:resume
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 주의사항
|
|
72
|
+
|
|
73
|
+
- **덮어쓰기**: 항상 최신 상태만 유지. 히스토리는 git이 담당.
|
|
74
|
+
- **자동 수집**: 가능한 한 자동으로 정보 수집. 사용자 입력 최소화.
|
|
75
|
+
- **간결하게**: 불필요한 상세 정보 제외. 복원에 필요한 것만.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# /selfish:clarify — 명세 모호성 해소
|
|
2
|
+
|
|
3
|
+
> spec.md의 모호하거나 불완전한 영역을 식별하고, 사용자 질의를 통해 해결한다.
|
|
4
|
+
> 답변은 spec.md에 인라인 업데이트된다.
|
|
5
|
+
|
|
6
|
+
## 인자
|
|
7
|
+
|
|
8
|
+
- `$ARGUMENTS` — (선택) 특정 영역 집중 (예: "보안", "성능", "UI 흐름")
|
|
9
|
+
|
|
10
|
+
## 설정 로드
|
|
11
|
+
|
|
12
|
+
**반드시** `.claude/selfish.config.md`를 먼저 읽는다. 설정 파일이 없으면 중단.
|
|
13
|
+
|
|
14
|
+
## 실행 절차
|
|
15
|
+
|
|
16
|
+
### 1. Spec 로드
|
|
17
|
+
|
|
18
|
+
1. `specs/{feature}/spec.md` 읽기 — 없으면 중단
|
|
19
|
+
2. `[NEEDS CLARIFICATION]` 섹션이 있으면 우선 처리
|
|
20
|
+
3. 기존 코드베이스에서 관련 패턴 빠르게 확인
|
|
21
|
+
|
|
22
|
+
### 2. 모호성 스캔
|
|
23
|
+
|
|
24
|
+
10가지 카테고리로 스캔:
|
|
25
|
+
|
|
26
|
+
| # | 카테고리 | 찾는 것 |
|
|
27
|
+
|---|----------|---------|
|
|
28
|
+
| 1 | 기능 범위 | 경계가 불분명한 기능 |
|
|
29
|
+
| 2 | 도메인/데이터 | 엔티티 관계, 필드 정의 불완전 |
|
|
30
|
+
| 3 | UX 흐름 | 사용자 동선 누락 |
|
|
31
|
+
| 4 | 비기능 품질 | 수치 없는 성능/보안 요구 |
|
|
32
|
+
| 5 | 외부 의존성 | API, 라이브러리 명확화 필요 |
|
|
33
|
+
| 6 | 엣지 케이스 | 경계 조건 미정의 |
|
|
34
|
+
| 7 | 제약/트레이드오프 | 양립 불가 요구사항 |
|
|
35
|
+
| 8 | 용어 일관성 | 같은 개념 다른 이름 |
|
|
36
|
+
| 9 | 완료 조건 | 측정 불가능한 성공 기준 |
|
|
37
|
+
| 10 | 잔류 플레이스홀더 | TODO/TBD/??? |
|
|
38
|
+
|
|
39
|
+
### 3. 질문 생성 및 제시
|
|
40
|
+
|
|
41
|
+
- 최대 **5개** 질문 생성
|
|
42
|
+
- 우선순위: scope > 보안/프라이버시 > UX > 기술
|
|
43
|
+
- **한 번에 1개씩** AskUserQuestion으로 제시:
|
|
44
|
+
- 가능하면 객관식 (2-4개 선택지)
|
|
45
|
+
- 선택지에 각각의 의미/영향 설명 포함
|
|
46
|
+
|
|
47
|
+
### 4. Spec 업데이트
|
|
48
|
+
|
|
49
|
+
각 답변 후:
|
|
50
|
+
1. spec.md에서 해당 영역을 찾아 **인라인 업데이트**
|
|
51
|
+
2. `[NEEDS CLARIFICATION]` 태그가 있었으면 제거
|
|
52
|
+
3. 답변에서 파생된 새 요구사항이 있으면 FR-* 추가
|
|
53
|
+
4. 변경 사항 사용자에게 간략히 고지
|
|
54
|
+
|
|
55
|
+
### 5. 최종 출력
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
✅ 명확화 완료
|
|
59
|
+
├─ 질문: {처리 수}/{생성 수}개
|
|
60
|
+
├─ spec.md 업데이트: {변경 영역}
|
|
61
|
+
├─ 새 요구사항: {추가된 FR 수}개
|
|
62
|
+
├─ 잔여 [NEEDS CLARIFICATION]: {남은 수}개
|
|
63
|
+
└─ 다음 단계: /selfish:plan
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 주의사항
|
|
67
|
+
|
|
68
|
+
- **5개 제한**: 질문이 5개를 초과하면 가장 중요한 것만 선택. 나머지는 plan 단계에서 해결.
|
|
69
|
+
- **spec만 수정**: plan.md나 tasks.md는 건드리지 않음.
|
|
70
|
+
- **중복 방지**: 이미 spec에 명확히 기술된 항목은 질문하지 않음.
|
|
71
|
+
- **`$ARGUMENTS`가 있으면**: 해당 영역에 집중하여 스캔.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# /selfish:debug — 버그 진단 및 수정
|
|
2
|
+
|
|
3
|
+
> 버그의 근본 원인을 분석하고 수정한다.
|
|
4
|
+
> Critic Loop 2회로 수정의 안전성과 정확성을 검증한다.
|
|
5
|
+
|
|
6
|
+
## 인자
|
|
7
|
+
|
|
8
|
+
- `$ARGUMENTS` — (필수) 버그 설명, 에러 메시지, 또는 재현 단계
|
|
9
|
+
|
|
10
|
+
## 설정 로드
|
|
11
|
+
|
|
12
|
+
**반드시** `.claude/selfish.config.md`를 먼저 읽는다. 설정 파일이 없으면 중단.
|
|
13
|
+
|
|
14
|
+
## 실행 절차
|
|
15
|
+
|
|
16
|
+
### 1. 정보 수집
|
|
17
|
+
|
|
18
|
+
1. `$ARGUMENTS`에서 추출:
|
|
19
|
+
- **증상**: 무엇이 잘못되는가?
|
|
20
|
+
- **재현 조건**: 언제 발생하는가?
|
|
21
|
+
- **에러 메시지**: 있으면 전문
|
|
22
|
+
- **예상 동작**: 어떻게 되어야 하는가?
|
|
23
|
+
|
|
24
|
+
2. 추가 정보 필요 시 사용자에게 질문 (최대 2개)
|
|
25
|
+
|
|
26
|
+
### 2. 근본 원인 분석 (RCA)
|
|
27
|
+
|
|
28
|
+
순서대로 진행:
|
|
29
|
+
|
|
30
|
+
1. **에러 추적**: 에러 메시지/스택 트레이스에서 파일:라인 추출 → 해당 코드 읽기
|
|
31
|
+
2. **데이터 흐름**: 문제 지점에서 역방향 추적 (어디서 잘못된 데이터가 들어왔는가?)
|
|
32
|
+
3. **상태 분석**: 관련 {config.state_management} 캐시 상태 확인
|
|
33
|
+
4. **최근 변경**: `git log --oneline -10 -- {관련 파일}` 으로 최근 변경 확인
|
|
34
|
+
5. **경쟁 조건**: 비동기 작업 간 타이밍 이슈 확인
|
|
35
|
+
|
|
36
|
+
### 3. 가설 수립
|
|
37
|
+
|
|
38
|
+
가능한 원인을 **가설 목록**으로 나열:
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
### 가설
|
|
42
|
+
1. **[가능성 높음]** {원인1}: {근거}
|
|
43
|
+
2. **[가능성 중간]** {원인2}: {근거}
|
|
44
|
+
3. **[가능성 낮음]** {원인3}: {근거}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
가능성 높은 것부터 검증.
|
|
48
|
+
|
|
49
|
+
### 4. 수정 구현
|
|
50
|
+
|
|
51
|
+
1. **최소 변경 원칙**: 버그 수정에 필요한 최소한의 코드만 변경
|
|
52
|
+
2. **영향 범위 분석**: 수정이 다른 코드에 미치는 영향 확인
|
|
53
|
+
3. **수정 적용**
|
|
54
|
+
|
|
55
|
+
### 5. Critic Loop (2회)
|
|
56
|
+
|
|
57
|
+
| 기준 | 검증 내용 |
|
|
58
|
+
|------|-----------|
|
|
59
|
+
| **SAFETY** | 수정이 다른 기능을 망가뜨리지 않는가? 사이드 이펙트는? |
|
|
60
|
+
| **CORRECTNESS** | 근본 원인을 실제로 해결했는가? 증상만 가린 것은 아닌가? |
|
|
61
|
+
|
|
62
|
+
FAIL 시:
|
|
63
|
+
- SAFETY 실패 → 영향받는 코드 추가 확인/수정
|
|
64
|
+
- CORRECTNESS 실패 → 가설 재검토, 다음 가설로 이동
|
|
65
|
+
|
|
66
|
+
### 6. 검증
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
{config.gate}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
실패 시 수정 후 재검증 (최대 3회).
|
|
73
|
+
|
|
74
|
+
### 7. 최종 출력
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
🐛 디버그 완료
|
|
78
|
+
├─ 근본 원인: {한 줄 요약}
|
|
79
|
+
├─ 수정 파일: {파일 목록}
|
|
80
|
+
├─ Critic: {N}회 완료
|
|
81
|
+
├─ 검증: ✓ typecheck + lint 통과
|
|
82
|
+
└─ 영향 범위: {영향받는 컴포넌트/기능}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 디버깅 체크리스트 (자동 적용)
|
|
86
|
+
|
|
87
|
+
CLAUDE.md의 Debugging Checklist를 항상 확인:
|
|
88
|
+
1. Race Conditions — 비동기 작업 간 경쟁 상태
|
|
89
|
+
2. Stale State — 오래된 상태 참조
|
|
90
|
+
3. Missing Error Handling — Promise .catch() 누락
|
|
91
|
+
4. Incorrect Ordering — 작업 순서 의존성
|
|
92
|
+
5. Boundary Conditions — 엣지 케이스 처리
|
|
93
|
+
|
|
94
|
+
## 주의사항
|
|
95
|
+
|
|
96
|
+
- **과도한 수정 금지**: 버그 수정에 필요한 것만 변경. 주변 코드 리팩토링 하지 않음.
|
|
97
|
+
- **증상 vs 원인**: 표면적 증상이 아닌 근본 원인을 찾을 것.
|
|
98
|
+
- **3회 시도 제한**: 수정 3회 시도 후에도 실패하면 사용자에게 상황 보고.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# /selfish:implement — 코드 구현 실행
|
|
2
|
+
|
|
3
|
+
> tasks.md의 태스크를 Phase별로 실행한다.
|
|
4
|
+
> 병렬 가능한 태스크([P])는 Agent Teams로 동시 실행하고, Phase 완료 시 CI 게이트를 통과해야 한다.
|
|
5
|
+
|
|
6
|
+
## 인자
|
|
7
|
+
|
|
8
|
+
- `$ARGUMENTS` — (선택) 특정 태스크 ID 또는 Phase 지정 (예: `T005`, `phase3`)
|
|
9
|
+
|
|
10
|
+
## 설정 로드
|
|
11
|
+
|
|
12
|
+
**반드시** `.claude/selfish.config.md`를 먼저 읽는다. 설정 파일이 없으면 중단.
|
|
13
|
+
|
|
14
|
+
## 실행 절차
|
|
15
|
+
|
|
16
|
+
### 0. Safety Snapshot
|
|
17
|
+
|
|
18
|
+
구현 시작 전 **롤백 포인트**를 생성한다:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git tag -f selfish/pre-implement
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- 실패 시 `git reset --hard selfish/pre-implement`로 즉시 롤백 가능
|
|
25
|
+
- 태그는 다음 `/selfish:implement` 실행 시 자동 덮어씌워짐
|
|
26
|
+
- `/selfish:auto` 파이프라인 내에서 실행 시 `selfish/pre-auto` 태그가 이미 존재하므로 생략
|
|
27
|
+
|
|
28
|
+
### 1. 컨텍스트 로드
|
|
29
|
+
|
|
30
|
+
1. **현재 브랜치** → `BRANCH_NAME`
|
|
31
|
+
2. `specs/{feature}/` 에서 다음 파일 로드:
|
|
32
|
+
- **tasks.md** (필수) — 없으면 중단: "tasks.md가 없습니다. `/selfish:tasks`를 먼저 실행하세요."
|
|
33
|
+
- **plan.md** (필수) — 없으면 중단
|
|
34
|
+
- **spec.md** (참고용)
|
|
35
|
+
- **research.md** (있으면)
|
|
36
|
+
3. tasks.md 파싱:
|
|
37
|
+
- 각 태스크의 ID, [P] 마커, [US*] 라벨, 설명, 파일 경로 추출
|
|
38
|
+
- Phase별 그룹화
|
|
39
|
+
- 이미 완료된 `[x]` 태스크 식별
|
|
40
|
+
|
|
41
|
+
### 2. 진행 상태 확인
|
|
42
|
+
|
|
43
|
+
- 완료된 태스크가 있으면 상태 표시:
|
|
44
|
+
```
|
|
45
|
+
진행 상태: {완료}/{전체} ({퍼센트}%)
|
|
46
|
+
다음: {미완료 첫 태스크 ID} - {설명}
|
|
47
|
+
```
|
|
48
|
+
- `$ARGUMENTS`로 특정 태스크/Phase 지정 시 해당 항목부터 시작
|
|
49
|
+
|
|
50
|
+
### 3. Phase별 실행
|
|
51
|
+
|
|
52
|
+
각 Phase를 순서대로 실행한다:
|
|
53
|
+
|
|
54
|
+
#### Phase 실행 규칙
|
|
55
|
+
|
|
56
|
+
1. **순차 태스크** (P 마커 없음):
|
|
57
|
+
- 하나씩 순서대로 실행
|
|
58
|
+
- 각 태스크 시작 시: `▶ {ID}: {설명}`
|
|
59
|
+
- 완료 시: `✓ {ID} 완료`
|
|
60
|
+
|
|
61
|
+
2. **병렬 태스크** ([P] 마커):
|
|
62
|
+
- 같은 Phase 내 연속된 [P] 태스크를 **배치 단위**(최대 5개)로 그룹화
|
|
63
|
+
- **파일 겹침 없음** 확인 (겹치면 순차로 강등)
|
|
64
|
+
- Task 도구로 병렬 서브에이전트 위임:
|
|
65
|
+
```
|
|
66
|
+
TaskCreate({
|
|
67
|
+
description: "{ID}: {설명}",
|
|
68
|
+
prompt: "다음 태스크를 구현하세요:\n\n## 태스크\n{설명}\n\n## 관련 파일\n{파일 경로}\n\n## Plan 컨텍스트\n{plan.md에서 관련 섹션}\n\n## 코드 스타일\n- {config.code_style} 규칙\n- {config.architecture} 규칙 준수\n- CLAUDE.md 및 selfish.config.md 규칙 따르기",
|
|
69
|
+
subagent_type: "general-purpose"
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
- 모든 배치 완료 대기 후 다음 배치/Phase 진행
|
|
73
|
+
|
|
74
|
+
3. **의존성 준수**:
|
|
75
|
+
- 태스크 설명에 `after T{ID}` 또는 `requires T{ID}`가 있으면 해당 태스크 완료 후 실행
|
|
76
|
+
- Phase 순서는 반드시 지킴
|
|
77
|
+
|
|
78
|
+
#### Phase 완료 게이트 (3단계)
|
|
79
|
+
|
|
80
|
+
각 Phase 완료 후 **3단계 검증**을 순차 수행한다:
|
|
81
|
+
|
|
82
|
+
**Step 1. CI 게이트**:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
{config.gate}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- **통과**: Step 2로 진행
|
|
89
|
+
- **실패**:
|
|
90
|
+
1. 에러 메시지 분석
|
|
91
|
+
2. 관련 태스크 파일 수정
|
|
92
|
+
3. 재검증
|
|
93
|
+
4. 3회 실패 시 → 사용자에게 보고 후 **중단**
|
|
94
|
+
|
|
95
|
+
**Step 2. Mini-Review**:
|
|
96
|
+
|
|
97
|
+
Phase 내 변경 파일 대상 `{config.mini_review}` 항목을 정량적으로 점검:
|
|
98
|
+
- 변경된 파일 목록을 나열하고 **각 파일에 대해** 점검 수행
|
|
99
|
+
- 출력 형식:
|
|
100
|
+
```
|
|
101
|
+
Mini-Review ({N}개 파일):
|
|
102
|
+
- file1.tsx: ✓ 전항목 통과
|
|
103
|
+
- file2.tsx: ⚠ {항목} 위반 → 수정
|
|
104
|
+
- 위반: {M}건 → 수정 후 CI 재실행
|
|
105
|
+
```
|
|
106
|
+
- 문제 발견 시 → 즉시 수정 후 CI 게이트(Step 1) 재실행
|
|
107
|
+
- 문제 없으면 → `✓ Phase {N} Mini-Review 통과`
|
|
108
|
+
|
|
109
|
+
**Step 3. Auto-Checkpoint**:
|
|
110
|
+
|
|
111
|
+
Phase 게이트 통과 후 자동으로 세션 상태를 저장한다:
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
# memory/checkpoint.md 자동 업데이트
|
|
115
|
+
현재 Phase: {N}/{전체}
|
|
116
|
+
완료 태스크: {완료 ID 목록}
|
|
117
|
+
변경 파일: {파일 목록}
|
|
118
|
+
마지막 CI: ✓
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
- 세션이 중단되어도 `/selfish:resume`로 이 지점부터 재개 가능
|
|
122
|
+
|
|
123
|
+
### 4. 태스크 실행 패턴
|
|
124
|
+
|
|
125
|
+
각 태스크에서:
|
|
126
|
+
|
|
127
|
+
1. **파일 읽기**: 수정할 파일이 있으면 반드시 먼저 읽기
|
|
128
|
+
2. **구현**: plan.md의 설계를 따라 코드 작성
|
|
129
|
+
3. **타입 확인**: 새 코드가 TypeScript strict 모드에 맞는지 확인
|
|
130
|
+
4. **tasks.md 업데이트**: 완료된 태스크를 `[x]`로 마크
|
|
131
|
+
```markdown
|
|
132
|
+
- [x] T001 {설명} ← 완료
|
|
133
|
+
- [ ] T002 {설명} ← 미완료
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 5. 최종 검증
|
|
137
|
+
|
|
138
|
+
모든 태스크 완료 후:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
{config.ci}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- **통과**: 최종 보고서 출력
|
|
145
|
+
- **실패**: 에러 수정 시도 (최대 3회)
|
|
146
|
+
|
|
147
|
+
### 6. 최종 출력
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
🚀 구현 완료
|
|
151
|
+
├─ 태스크: {완료}/{전체}
|
|
152
|
+
├─ Phase: {Phase 수}개 완료
|
|
153
|
+
├─ CI: ✓ {config.ci} 통과
|
|
154
|
+
├─ 변경 파일: {파일 수}개
|
|
155
|
+
└─ 다음 단계: /selfish:review (선택)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 주의사항
|
|
159
|
+
|
|
160
|
+
- **기존 코드 우선 읽기**: 수정 전 반드시 파일 내용 확인. 맹목적 코드 생성 금지.
|
|
161
|
+
- **과도한 변경 금지**: plan.md에 없는 리팩토링/개선 하지 않기.
|
|
162
|
+
- **아키텍처 준수**: {config.architecture} 규칙 준수.
|
|
163
|
+
- **{config.ci} 게이트**: Phase 완료 시 반드시 통과. 우회 금지.
|
|
164
|
+
- **Agent Teams 배치**: 최대 5개. 파일 겹침 절대 금지.
|
|
165
|
+
- **오류 시**: 무한 루프 방지. 3회 시도 후 사용자에게 상황 보고.
|
|
166
|
+
- **tasks.md 실시간 업데이트**: 태스크 완료마다 체크박스 마크.
|