@angar2/taskery 0.1.0 → 0.1.2
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/README.md +207 -65
- package/bin/init.js +45 -2
- package/bin/lib.js +397 -3
- package/bin/prune.js +189 -0
- package/bin/status.js +148 -0
- package/bin/taskery.js +25 -0
- package/bin/update.js +26 -2
- package/package.json +7 -3
- package/template/.claude/hooks/closed-immutable.sh +5 -4
- package/template/.claude/hooks/git-guard.sh +1 -1
- package/template/.claude/settings.json +1 -2
- package/template/.claude/skills/add-backlog/SKILL.md +117 -0
- package/template/.claude/skills/log-friction/SKILL.md +76 -0
- package/template/.claude/skills/{plan-init.md → plan-init/SKILL.md} +28 -4
- package/template/.claude/skills/{project-init.md → project-init/SKILL.md} +60 -7
- package/template/.claude/skills/task-close/SKILL.md +351 -0
- package/template/.claude/skills/{task-dev.md → task-dev/SKILL.md} +54 -8
- package/template/.claude/skills/task-init/SKILL.md +283 -0
- package/template/.claude/skills/{task-plan.md → task-plan/SKILL.md} +115 -18
- package/template/.claude/skills/{task-test.md → task-test/SKILL.md} +60 -18
- package/template/.project/FRICTION_LOG.md +6 -13
- package/template/.project/rules/CHANGELOG_RULE.md +91 -0
- package/template/.project/rules/GIT_RULE.md +119 -8
- package/template/.project/rules/MOCKUP_RULE.md +85 -0
- package/template/.project/rules/TASK_DOC_RULE.md +78 -76
- package/template/CLAUDE.md +77 -12
- package/template/.claude/hooks/pre-commit-verify.sh +0 -97
- package/template/.claude/skills/refine.md +0 -177
- package/template/.claude/skills/task-close.md +0 -178
- package/template/.claude/skills/task-init.md +0 -142
package/template/CLAUDE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# CLAUDE.md
|
|
2
2
|
|
|
3
3
|
> 이 파일은 메인 세션이 *매 세션 시작 시 자동 로드*하는 단일 진입점이다.
|
|
4
|
-
> 프로젝트 메타 + 검증 명령 + 룰 참조 + 스킬
|
|
4
|
+
> 프로젝트 메타 + 검증 명령 + 룰 참조 + 스킬 9종 + 동기화 룰만 포함한다.
|
|
5
5
|
> 사람용 도메인 설명은 `.project/PROJECT.md`, 진입 가이드는 `.project/AGENT-GUIDE.md` 참조.
|
|
6
6
|
|
|
7
7
|
---
|
|
@@ -17,17 +17,78 @@
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
## 메인 세션 최상위 룰
|
|
21
|
+
|
|
22
|
+
> 본 룰은 *모든 스킬 호출 / 사용자 발화 처리 / 작업 진행*에 적용. 위반 시 사용자 마찰 직결.
|
|
23
|
+
|
|
24
|
+
1. **범위 준수** — 사용자가 명시한 범위/행동만 수행. 명시 외 자체 진입 영구 금지. 예: 사용자가 *"X부터 Y까지"* 지시 → Y 끝에서 정지 + 상태 보고 + 다음 단계 명시 호출 대기.
|
|
25
|
+
2. **Skill 정식 발동** — task 단계는 반드시 Skill 도구로 정식 호출. 가이드 본문을 머릿속 절차로 대체 금지 (컴팩트 세션 / 시스템 리마인더 인지 상태에서도 동일).
|
|
26
|
+
3. **워크트리 자가 진단** — 세션 시작 시 현재 cwd가 *메인 워크트리*인지 *태스크 워크트리*인지 자가 판단 (`git rev-parse --show-toplevel` + `~/.taskery/worktrees/` 경로 비교). 태스크 워크트리면 *해당 진행중 태스크 컨텍스트*로 진입, 메인 워크트리면 *새 태스크 / 진행중 목록 인터뷰* 흐름.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 멀티세션 워크트리 (0.1.2+)
|
|
31
|
+
|
|
32
|
+
> 멀티세션 = 같은 프로젝트에서 *여러 메인 세션이 독립 태스크를 병렬*로 진행. git worktree로 작업 폴더 격리, dev 머지 시 직렬화.
|
|
33
|
+
|
|
34
|
+
- **메인 워크트리 = dev 전용**: 메인 워크트리는 항상 `dev` 체크아웃 상태. 모든 태스크 작업은 별도 워크트리에서 수행.
|
|
35
|
+
- **워크트리 위치**: `~/.taskery/worktrees/<projectId>/TASK-NNN_<출처>_<슬러그>/`
|
|
36
|
+
- `<projectId>`: `.taskery-manifest.json` `projectId` (8자 hex)
|
|
37
|
+
- `<출처>`: `BL-NNN` / `RM-NNN` / `DR`
|
|
38
|
+
- **`/task-init`이 워크트리 생성** + **`/task-close`가 dev 머지 + 워크트리 자동 제거** (자동 흐름. 보존 키워드 `keep` / `브랜치 남겨` 등 발화 시 둘 다 보존).
|
|
39
|
+
- **메인 메타 접근**: 워크트리에서 `.project/`, `CLAUDE.md` 등 접근 시 *메인 워크트리 절대 경로* 사용:
|
|
40
|
+
```sh
|
|
41
|
+
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
42
|
+
```
|
|
43
|
+
- **수동 git 작업 시 정합성 보장 X** — taskery 명령(스킬 / `npx @angar2/taskery <서브>`)으로만 운영.
|
|
44
|
+
- **CLI 보조 명령**:
|
|
45
|
+
- `npx @angar2/taskery status` — 진행중 태스크 + 워크트리 + dev 머지 상태 요약
|
|
46
|
+
- `npx @angar2/taskery prune` — stale 워크트리 대화형 정리
|
|
47
|
+
|
|
48
|
+
상세: `.project/rules/GIT_RULE.md` "멀티세션 워크트리 정책" 섹션.
|
|
49
|
+
|
|
50
|
+
요건: git ≥ 2.31 (`--path-format=absolute` 옵션 필요).
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 백로그 (0.1.2+)
|
|
55
|
+
|
|
56
|
+
> `.project/tasks/<vX.X>/BACKLOG.md` = *버전별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
|
|
57
|
+
|
|
58
|
+
- **`/add-backlog`**: 사용자 *"~ 백로그에 추가"* 발화 → 얕은 분석(코드 탐색 X, 추정 수준) → BL-NNN 채번 → BACKLOG.md append (`[ ]` 대기).
|
|
59
|
+
- **`/task-init` 연동**: 사용자 *"백로그의 BL-NNN 진행"* 발화 → 해당 항목 *확인 마킹*. `[ ]` → `[x]` + `- TASK: TASK-NNN` 추가 (다회 진행 시 콤마).
|
|
60
|
+
- **체크박스 의미**: `[ ]` = 미확인 (task로 옮기지 않은 메모) / `[x]` = 확인 완료 (task로 옮김). **dev 머지 완료 의미 X** — 완료 여부는 `git log dev --grep 'BL-NNN'` + 브랜치명 추적 + `taskery status`.
|
|
61
|
+
- **글로벌 `.project/BACKLOG.md`** (plan 기획 후보 카탈로그) 는 본 흐름 무관 — `/plan-init` 영역.
|
|
62
|
+
|
|
63
|
+
상세: `.claude/skills/add-backlog/SKILL.md`.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
20
67
|
## 검증 명령
|
|
21
68
|
|
|
22
|
-
>
|
|
69
|
+
> *코드 상태 검증* (빌드 / 린트 / 타입체크). 테스트 실행은 본 섹션 X — `## 테스트 명령` 참조.
|
|
70
|
+
> `/task-dev` self-check / `/task-close` 최종 게이트가 *이 섹션을 단일 진실 소스로 참조*.
|
|
23
71
|
> 백틱(`...`) 안 명령 그대로 실행됨. 언어/프레임워크 따라 변경.
|
|
24
72
|
|
|
25
73
|
- 린트: `<예: npm run lint>`
|
|
26
74
|
- 타입체크: `<예: npm run typecheck>` (TypeScript / Flow / mypy 등 — 해당 시)
|
|
27
75
|
- 빌드: `<예: npm run build>`
|
|
76
|
+
|
|
77
|
+
> 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(\`\`)은 사용 금지.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 테스트 명령
|
|
82
|
+
|
|
83
|
+
> *테스트 실행* (단위 / 통합 / E2E 등). 코드 상태 검증은 `## 검증 명령` 참조.
|
|
84
|
+
> `/task-dev` 구현 후 테스트 + `/task-test` 격리 세션이 *이 섹션을 단일 진실 소스로 참조*.
|
|
85
|
+
> 백틱(`...`) 안 명령 그대로 실행됨. 언어/프레임워크 따라 변경.
|
|
86
|
+
|
|
28
87
|
- 단위 테스트: `<예: npm test>`
|
|
88
|
+
- 통합 테스트: `<예: npm run test:integration>` (있을 시)
|
|
89
|
+
- E2E 테스트: `<예: npx playwright test>` (있을 시)
|
|
29
90
|
|
|
30
|
-
> 위
|
|
91
|
+
> 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(\`\`)은 사용 금지.
|
|
31
92
|
|
|
32
93
|
---
|
|
33
94
|
|
|
@@ -37,11 +98,13 @@
|
|
|
37
98
|
|----|------|------|
|
|
38
99
|
| TASK_DOC_RULE | `.project/rules/TASK_DOC_RULE.md` | task 문서 양식 (헤더 5컬럼 / 6 섹션 / 7 상태) |
|
|
39
100
|
| GIT_RULE | `.project/rules/GIT_RULE.md` (있으면) → 글로벌 `~/.claude/rules/GIT_RULE.md` (fallback) | git 정책 (브랜치 / 커밋 / 머지) |
|
|
101
|
+
| CHANGELOG_RULE | `.project/rules/CHANGELOG_RULE.md` | CHANGELOG 작성 정책 (위치 / 형식 / 필수 필드) |
|
|
102
|
+
| MOCKUP_RULE | `.project/rules/MOCKUP_RULE.md` | UX/UI task의 HTML 목업 위치 / 형식 / 네이밍 |
|
|
40
103
|
| `*.local.md` | `.project/rules/` | (옵션) 사용자 오버라이드 — `*.local.md` suffix는 npx 미터치 |
|
|
41
104
|
|
|
42
105
|
---
|
|
43
106
|
|
|
44
|
-
## 스킬
|
|
107
|
+
## 스킬 9종 — project > plan > task 위계 + 회고
|
|
45
108
|
|
|
46
109
|
| 스킬 | 레벨 | 역할 |
|
|
47
110
|
|------|------|------|
|
|
@@ -52,28 +115,30 @@
|
|
|
52
115
|
| `/task-dev` | task | Phase 순서 구현 + self-check (planned → developed) |
|
|
53
116
|
| `/task-test` | task | Task tool 격리 검증 (developed → tested) |
|
|
54
117
|
| `/task-close` | task | 검증 명령 게이트 + 커밋 + dev 병합 (tested → closed) |
|
|
55
|
-
| `/
|
|
118
|
+
| `/add-backlog` | meta | 사용자 발화로 버전별 BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
|
|
119
|
+
| `/log-friction` | meta | FRICTION_LOG.md에 사용자 불편 한 행 기록 |
|
|
56
120
|
|
|
57
|
-
본문은 `.claude/skills
|
|
121
|
+
본문은 `.claude/skills/<스킬>/SKILL.md` 참조.
|
|
58
122
|
|
|
59
123
|
---
|
|
60
124
|
|
|
61
|
-
## Hook 안전망 — Catastrophic
|
|
125
|
+
## Hook 안전망 — Catastrophic 2종
|
|
62
126
|
|
|
63
127
|
| Hook | 영역 | 잡는 것 |
|
|
64
128
|
|------|------|--------|
|
|
65
129
|
| `git-guard.sh` | PreToolUse(Bash) | main/dev 직접 커밋 / `--force` / `--no-verify` / `branch -D` / `reset --hard` / `clean -fd` |
|
|
66
|
-
| `
|
|
67
|
-
| `closed-immutable.sh` | PreToolUse(Write\|Edit) | `closed` 상태 task.md 본 파일 재수정 차단 (정상 흐름은 새 task로). spec-diffs/screenshots는 자유 수정 (역사적 자료) |
|
|
130
|
+
| `closed-immutable.sh` | PreToolUse(Write\|Edit) | `closed` 상태 task.md 본 파일 재수정 차단 (정상 흐름은 새 task로). spec-diffs / screenshots / mockup은 자유 수정 (역사적 자료) |
|
|
68
131
|
|
|
69
132
|
**잘 지키면 hook 작동 0회 (무해). catastrophic만 차단.**
|
|
70
133
|
|
|
134
|
+
> 이전 `pre-commit-verify.sh` hook은 폐기 — task-close Step 2 게이트 + git-guard 안전망으로 충분 (redundant 검증 사이클 제거). 폐기 사유는 [plan/HOOKS.md](../plan/HOOKS.md) §5 참조.
|
|
135
|
+
|
|
71
136
|
---
|
|
72
137
|
|
|
73
|
-
##
|
|
138
|
+
## 불편 데이터
|
|
74
139
|
|
|
75
|
-
- **누적**: `.project/FRICTION_LOG.md` — 메인이 한 줄씩 추가 (사용자 발화
|
|
76
|
-
-
|
|
140
|
+
- **누적**: `.project/FRICTION_LOG.md` — 메인이 한 줄씩 추가 (사용자 불만 발화 캐치 또는 사용자 명시)
|
|
141
|
+
- **등록**: `/log-friction` 스킬 — 사용자 명시 호출 / 불만 발화 캐치 / task-close 직후 마찰 신호 자체 감지 시 한 행 기록
|
|
77
142
|
|
|
78
143
|
---
|
|
79
144
|
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# .claude/hooks/pre-commit-verify.sh
|
|
3
|
-
# PreToolUse(Bash) 훅 — git commit 시점에 검증 명령 모두 PASS 게이트
|
|
4
|
-
#
|
|
5
|
-
# 잡는 것:
|
|
6
|
-
# git commit 명령 감지 → 프로젝트 루트 CLAUDE.md '## 검증 명령' 섹션의 명령 모두 실행
|
|
7
|
-
# 하나라도 fail (exit code != 0) → exit 2 (commit 차단)
|
|
8
|
-
#
|
|
9
|
-
# Process catastrophic — 결정적 영역(린트/타입/빌드/테스트). 합리적 변형 없음.
|
|
10
|
-
# 잘 지키면 작동 0회 (무해 — /task-dev self-check + /task-close 게이트로 이미 PASS 상태에서 commit).
|
|
11
|
-
# 부분 작업 / 환경 변화 / 가정 누설 시 catastrophic 차단 안전망.
|
|
12
|
-
#
|
|
13
|
-
# Single source of truth: 프로젝트 루트 CLAUDE.md '## 검증 명령' 섹션
|
|
14
|
-
# 형식 예:
|
|
15
|
-
# ## 검증 명령
|
|
16
|
-
# - 린트: `npm run lint`
|
|
17
|
-
# - 타입체크: `npm run typecheck`
|
|
18
|
-
# - 빌드: `npm run build`
|
|
19
|
-
# - 단위테스트: `npm test`
|
|
20
|
-
|
|
21
|
-
INPUT=$(cat)
|
|
22
|
-
|
|
23
|
-
# tool_input.command 추출
|
|
24
|
-
CMD=$(echo "$INPUT" | python3 -c "
|
|
25
|
-
import sys, json
|
|
26
|
-
try:
|
|
27
|
-
d = json.load(sys.stdin)
|
|
28
|
-
print(d.get('tool_input', {}).get('command', ''))
|
|
29
|
-
except Exception:
|
|
30
|
-
print('')
|
|
31
|
-
" 2>/dev/null)
|
|
32
|
-
|
|
33
|
-
# git commit 명령 아니면 통과
|
|
34
|
-
if ! echo "$CMD" | grep -qE '(^|;|&&|\|\|)\s*git\s+commit\b'; then
|
|
35
|
-
exit 0
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# CLAUDE.md 정독 — 프로젝트 루트
|
|
39
|
-
if [ ! -f "./CLAUDE.md" ]; then
|
|
40
|
-
echo "pre-commit-verify: 프로젝트 루트 CLAUDE.md 없음. 검증 명령 단일 진실 소스 누락 — commit 차단." >&2
|
|
41
|
-
echo " '/project-init' 또는 'npx @angar2/taskery init' 호출해 CLAUDE.md 생성." >&2
|
|
42
|
-
exit 2
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# '## 검증 명령' 섹션 추출 + 백틱(`...`) 안 명령 추출
|
|
46
|
-
COMMANDS=$(python3 <<'PYEOF'
|
|
47
|
-
import re
|
|
48
|
-
|
|
49
|
-
try:
|
|
50
|
-
with open('./CLAUDE.md') as f:
|
|
51
|
-
content = f.read()
|
|
52
|
-
except Exception:
|
|
53
|
-
raise SystemExit('claude_md_read_failed')
|
|
54
|
-
|
|
55
|
-
# '## 검증 명령' 섹션 (다음 ## 헤딩 또는 EOF까지)
|
|
56
|
-
m = re.search(r'^##\s*검증\s*명령\s*$([\s\S]*?)(?=^##\s|\Z)', content, re.MULTILINE)
|
|
57
|
-
if not m:
|
|
58
|
-
raise SystemExit('section_missing')
|
|
59
|
-
|
|
60
|
-
section = m.group(1)
|
|
61
|
-
# 백틱 안 명령 추출 — list item(`-`로 시작) 줄에서만
|
|
62
|
-
# (blockquote `>` 메타 텍스트 등 비-list 백틱 오인식 방지)
|
|
63
|
-
cmds = []
|
|
64
|
-
for line in section.split('\n'):
|
|
65
|
-
stripped = line.strip()
|
|
66
|
-
if stripped.startswith('-'):
|
|
67
|
-
cmds.extend(re.findall(r'`([^`]+)`', stripped))
|
|
68
|
-
for c in cmds:
|
|
69
|
-
print(c)
|
|
70
|
-
PYEOF
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
# 섹션 누락 / 추출 실패 케이스
|
|
74
|
-
if [ -z "$COMMANDS" ]; then
|
|
75
|
-
echo "pre-commit-verify: CLAUDE.md '## 검증 명령' 섹션 없거나 명령 없음. commit 차단." >&2
|
|
76
|
-
echo " CLAUDE.md에 '## 검증 명령' 섹션 추가 + 백틱 안에 명령 작성 (예: \`npm run lint\`)." >&2
|
|
77
|
-
exit 2
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
|
-
# 각 명령 실행 — 하나라도 fail → 차단
|
|
81
|
-
FAILED=""
|
|
82
|
-
while IFS= read -r cmd; do
|
|
83
|
-
[ -z "$cmd" ] && continue
|
|
84
|
-
echo "pre-commit-verify: 실행 — $cmd" >&2
|
|
85
|
-
if ! eval "$cmd" >/dev/null 2>&1; then
|
|
86
|
-
FAILED="$FAILED\n - FAIL: $cmd"
|
|
87
|
-
fi
|
|
88
|
-
done <<< "$COMMANDS"
|
|
89
|
-
|
|
90
|
-
if [ -n "$FAILED" ]; then
|
|
91
|
-
echo "pre-commit-verify: 검증 명령 실패 — commit 차단." >&2
|
|
92
|
-
printf "%b\n" "$FAILED" >&2
|
|
93
|
-
echo " /task-dev self-check 또는 /task-close 게이트 통과 후 다시 시도." >&2
|
|
94
|
-
exit 2
|
|
95
|
-
fi
|
|
96
|
-
|
|
97
|
-
exit 0
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 회고 메타 — FRICTION_LOG 정독 + 반복 패턴 감지 + bottoms-up 보강 제안 (PLAYBOOK 부활 / 새 룰)
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /refine
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
5 task마다 또는 사용자 호출 시 메인이 `.project/FRICTION_LOG.md`를 정독해 *반복 패턴 감지* + *bottoms-up 보강 제안*. PLAYBOOK 미래 옵션 항목 부활 검토 또는 새 룰 추가 제안. 사용자 OK 시 적용.
|
|
10
|
-
|
|
11
|
-
**핵심 정신**: *"선제적 작성 금지, 진짜 데이터 모이면 그때 추가"* — top-down 선제적 작성 함정 회피.
|
|
12
|
-
|
|
13
|
-
## 호출 시점
|
|
14
|
-
|
|
15
|
-
- 5 task 닫고 나서 (`/task-close` 5회 후 메인이 사용자에게 *"`/refine` 돌릴까요?"* 제안 OK).
|
|
16
|
-
- 사용자가 *"짜증 정리 좀"* / *"`/refine`"* 명시 호출.
|
|
17
|
-
- 짜증 패턴이 단기 폭증할 때 (메인 자체 판단으로 사용자에게 제안).
|
|
18
|
-
|
|
19
|
-
## 입력 처리
|
|
20
|
-
|
|
21
|
-
인자 없음. 기본 흐름.
|
|
22
|
-
|
|
23
|
-
옵션 인자 = `--scope last-N` (예: `--scope last-10` — 최근 10개 짜증만). 미명시 시 *전체* 정독.
|
|
24
|
-
|
|
25
|
-
## 단계
|
|
26
|
-
|
|
27
|
-
### Step 1 — FRICTION_LOG.md 정독
|
|
28
|
-
|
|
29
|
-
1. `.project/FRICTION_LOG.md` Read.
|
|
30
|
-
2. 파일 없거나 비어 있으면 종료 + 안내:
|
|
31
|
-
*"FRICTION_LOG가 비어 있어. 짜증 데이터 누적되면 다시 호출. 평소 *'이거 짜증나'* 발화해주면 메인이 한 줄씩 추가."*
|
|
32
|
-
3. 인자 `--scope last-N` 있으면 마지막 N개 행만 추출.
|
|
33
|
-
|
|
34
|
-
### Step 2 — 패턴 분류 + 빈도 카운트
|
|
35
|
-
|
|
36
|
-
짜증 항목을 카테고리로 분류:
|
|
37
|
-
|
|
38
|
-
| 카테고리 | 예시 |
|
|
39
|
-
|---------|------|
|
|
40
|
-
| 형식 위반 | task 헤더 누락 / 섹션 빠짐 / status 잘못 작성 |
|
|
41
|
-
| 컨텍스트 부담 | 메인 세션이 무거워짐 / 답변 느림 / 압축 발생 |
|
|
42
|
-
| 스킬 미스매치 | `/task-init` 인터뷰 짜증 / `/task-plan` 질문 너무 많음 / 등 |
|
|
43
|
-
| Test Plan 가정 | 격리 세션이 메인 가정 못 풀어 헤맴 |
|
|
44
|
-
| git/커밋 흐름 | 브랜치 이름 충돌 / 커밋 순서 헛갈림 |
|
|
45
|
-
| 멀티리포 통신 | shared/ 메시지 못 잡음 / .env 빠짐 |
|
|
46
|
-
| 자동화 부족 | 같은 작업 반복 / 자동화 가능한데 수동 |
|
|
47
|
-
| 기타 | 위 카테고리 외 |
|
|
48
|
-
|
|
49
|
-
각 카테고리 *빈도 카운트* + 짜증 행 인용.
|
|
50
|
-
|
|
51
|
-
### Step 3 — 반복 패턴 감지
|
|
52
|
-
|
|
53
|
-
빈도 ≥ 3회 카테고리는 *반복 패턴*으로 간주. 빈도 < 3회는 *단발성*으로 분류.
|
|
54
|
-
|
|
55
|
-
```markdown
|
|
56
|
-
## 반복 패턴 (≥ 3회)
|
|
57
|
-
|
|
58
|
-
1. <카테고리>: <N회>
|
|
59
|
-
- 짜증 1: "<원문 인용>" (<날짜 / TASK 맥락>)
|
|
60
|
-
- 짜증 2: ...
|
|
61
|
-
- ...
|
|
62
|
-
|
|
63
|
-
2. <카테고리>: <N회>
|
|
64
|
-
...
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Step 4 — PLAYBOOK 항목 매핑
|
|
68
|
-
|
|
69
|
-
`plan/PLAYBOOK.md` Read. 반복 패턴마다 *부활 후보 항목* 매핑:
|
|
70
|
-
|
|
71
|
-
| 반복 패턴 카테고리 | PLAYBOOK 후보 항목 |
|
|
72
|
-
|------------------|--------------------|
|
|
73
|
-
| 형식 위반 | §4 minimal form hook |
|
|
74
|
-
| 컨텍스트 부담 | §1 컨텍스트 격리 강화 / §2 압축 평가 subagent |
|
|
75
|
-
| 스킬 미스매치 | (PLAYBOOK 외 — 스킬 instruction 보강 검토) |
|
|
76
|
-
| Test Plan 가정 | (PLAYBOOK 외 — TASK_DOC_RULE.md §3.3 보강 검토) |
|
|
77
|
-
| git/커밋 흐름 | (PLAYBOOK 외 — GIT_RULE.md 보강 검토) |
|
|
78
|
-
| 멀티리포 통신 | (PLAYBOOK 외 — LINKED-REPOS.md 보강 검토) |
|
|
79
|
-
| 자동화 부족 | §3 Python orchestrator (큰 그림) / §7 자동 PR 리뷰 |
|
|
80
|
-
| 큰 묶음 작업 부담 | §5 `/plan-roadmap` 스킬 |
|
|
81
|
-
| task 누적 우선순위 | §8 우선순위 컬럼 부활 |
|
|
82
|
-
| npx update 충돌 | §9 머지 로직 엣지 케이스 보강 |
|
|
83
|
-
|
|
84
|
-
### Step 5 — bottoms-up 제안서 작성
|
|
85
|
-
|
|
86
|
-
```markdown
|
|
87
|
-
## /refine 제안서 — <YYYY-MM-DD>
|
|
88
|
-
|
|
89
|
-
### 반복 패턴 (≥ 3회)
|
|
90
|
-
- <카테고리 1>: <N회>
|
|
91
|
-
- <카테고리 2>: <N회>
|
|
92
|
-
|
|
93
|
-
### PLAYBOOK 부활 검토
|
|
94
|
-
1. **§<N> <항목명>** 부활 검토
|
|
95
|
-
- 사유: <패턴 N회 누적 — PLAYBOOK §<N> 매핑>
|
|
96
|
-
- 도입 방법: <PLAYBOOK §<N> 본문 §방법 그대로 인용 + 적용 영역>
|
|
97
|
-
- 얻는 것: <효용>
|
|
98
|
-
- 주의: <함정 — PLAYBOOK §<N> §주의 인용>
|
|
99
|
-
|
|
100
|
-
2. ...
|
|
101
|
-
|
|
102
|
-
### PLAYBOOK 외 보강 제안
|
|
103
|
-
1. **<문서 / 스킬>** 보강
|
|
104
|
-
- 사유: <패턴 N회>
|
|
105
|
-
- 보강 방향: <구체 수정 제안>
|
|
106
|
-
- 영향 범위: <수정 대상 파일>
|
|
107
|
-
|
|
108
|
-
### 단발성 짜증 (< 3회 — 데이터 더 모이기 대기)
|
|
109
|
-
- <짜증 인용 N>회
|
|
110
|
-
|
|
111
|
-
### 추천 다음 행동
|
|
112
|
-
- <사용자 OK 시 적용 순서>
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Step 6 — 사용자 합의
|
|
116
|
-
|
|
117
|
-
제안서 보여주기 + *"어느 항목 적용할까?"* 묻기.
|
|
118
|
-
|
|
119
|
-
분기:
|
|
120
|
-
- **사용자 OK한 항목 → 즉시 적용 (또는 별도 task로 분리)**:
|
|
121
|
-
- PLAYBOOK 부활: 해당 PLAYBOOK 항목 *방법* 그대로 따라 새 task 생성 — `/task-init` 호출 권장 (큰 변경이면).
|
|
122
|
-
- 스킬 instruction 보강: 해당 `template/.claude/skills/<스킬>.md` 직접 Edit + 사유 기록.
|
|
123
|
-
- TASK_DOC_RULE / GIT_RULE 보강: 해당 룰 파일 Edit + 수정 이력 행 추가.
|
|
124
|
-
- **거부한 항목 → 보류** (FRICTION_LOG에 *"보류 — `/refine` <YYYY-MM-DD>"* 메모).
|
|
125
|
-
- **단발성 → 그대로 누적** (반복되면 다음 `/refine`에서 다시 검토).
|
|
126
|
-
|
|
127
|
-
### Step 7 — FRICTION_LOG 갱신
|
|
128
|
-
|
|
129
|
-
본 `/refine` 호출 결과를 FRICTION_LOG에 메타 행 추가:
|
|
130
|
-
|
|
131
|
-
```markdown
|
|
132
|
-
## /refine — <YYYY-MM-DD>
|
|
133
|
-
|
|
134
|
-
- 반복 패턴: <카테고리> N회 / <카테고리> N회
|
|
135
|
-
- 부활 적용: §<N> <항목명> (TASK-<NNN>으로 분리)
|
|
136
|
-
- 보강 적용: <문서명> §<N> Edit
|
|
137
|
-
- 보류: <항목>
|
|
138
|
-
- 단발성 누적: N건
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
이 메타 행은 다음 `/refine`이 *이전 회고 결과 참조*용.
|
|
142
|
-
|
|
143
|
-
### Step 8 — 결과 보고
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
✅ /refine 완료
|
|
147
|
-
- 정독한 짜증 행: <N>건
|
|
148
|
-
- 반복 패턴: <카테고리> N개
|
|
149
|
-
- 적용한 보강: <목록>
|
|
150
|
-
- 보류: <목록>
|
|
151
|
-
- 단발성 누적: <N>건 (다음 회고 대기)
|
|
152
|
-
|
|
153
|
-
다음 일정: <5 task 후 / 사용자 호출 시>
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## 도구 가이드
|
|
157
|
-
|
|
158
|
-
- **Read**: `.project/FRICTION_LOG.md` / `plan/PLAYBOOK.md` / 보강 대상 룰/스킬 파일 정독
|
|
159
|
-
- **Edit**: 보강 적용 (TASK_DOC_RULE / GIT_RULE / 스킬 instruction Edit) + FRICTION_LOG 메타 행 추가
|
|
160
|
-
- **AskUserQuestion**: Step 6 합의 — 어느 항목 적용할지 사용자 답
|
|
161
|
-
- **Write**: 신규 룰/문서 추가 (드뭄 — 보통 PLAYBOOK 부활 항목이 새 hook 등 신규 파일 생성 요청 시)
|
|
162
|
-
|
|
163
|
-
## 주의사항
|
|
164
|
-
|
|
165
|
-
- **선제적 작성 금지** — *진짜 데이터(반복 패턴) 없이* PLAYBOOK 부활 절대 X. 합리적 변형 차단 함정 회피의 핵심.
|
|
166
|
-
- **단발성 짜증 = 데이터 부족** — < 3회 패턴은 *부활 검토 X*. 누적 대기.
|
|
167
|
-
- **자체 판단으로 룰 작성 금지** — 보강 제안은 *사용자 합의 후* 적용. *"이거 좋아 보여"* 자체 판단으로 즉시 Edit X.
|
|
168
|
-
- **합리적 변형 차단 함정** — minimal form hook 부활 시 *섹션 존재* 검사만. *내용 검증 X* — 25행 화이트리스트 함정 회피 (PLAYBOOK §4 §주의 참조).
|
|
169
|
-
- **PLAYBOOK 본문 인용 그대로** — *방법* 인용 시 자체 추측 작성 금지. PLAYBOOK 본문 한 줄씩 따라가며 적용.
|
|
170
|
-
- **`/refine` 호출 빈도** — 매 task마다 호출 X. 5 task 또는 짜증 누적 폭증 시. 너무 잦으면 *회고 자체가 짜증*.
|
|
171
|
-
- **회고 → 보강 → 다음 task** 흐름 — 보강 적용은 *별도 task로 분리* 권장 (큰 변경이면). `/task-init` 호출하고 plan에 부활 사유 기록.
|
|
172
|
-
|
|
173
|
-
## 상태 전이
|
|
174
|
-
|
|
175
|
-
해당 없음 (meta 레벨 — task 상태 전이 X).
|
|
176
|
-
|
|
177
|
-
단 보강 적용이 *별도 task*로 분리되면 그 task는 일반 흐름 (draft → planned → ... → closed) 따라감.
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: task git 마무리 — 검증 명령 재실행 게이트 + 커밋 순서 준수 + dev --no-ff 병합, tested → closed
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /task-close
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
`tested` 상태 task의 git 마무리. 작업 브랜치(없으면 생성)에서 커밋 순서(GIT_RULE 준수) 따라 진행 + dev 병합 + status `closed`.
|
|
10
|
-
|
|
11
|
-
**최종 게이트**: 모든 검증 명령 재실행 — 린트/타입체크/빌드/단위테스트 PASS여야 진행.
|
|
12
|
-
|
|
13
|
-
## 호출 시점
|
|
14
|
-
|
|
15
|
-
- `/task-test` PASS 후 + 사용자 OK.
|
|
16
|
-
- `/task-test` FAIL 후 사용자 *"OK 마무리"* (알려진 결함 명시 채로).
|
|
17
|
-
|
|
18
|
-
## 입력 처리
|
|
19
|
-
|
|
20
|
-
인자 = (선택) `TASK-NNN` 또는 자동 선택.
|
|
21
|
-
|
|
22
|
-
분기:
|
|
23
|
-
- **인자 명시**: 해당 task 파일.
|
|
24
|
-
- **인자 없음**: 활성 plan 버전의 *상태=tested인 가장 최근 task* 자동 선택 + confirm.
|
|
25
|
-
|
|
26
|
-
## 단계
|
|
27
|
-
|
|
28
|
-
### Step 1 — task 파일 + GIT_RULE 확인
|
|
29
|
-
|
|
30
|
-
1. `.project/AGENT-GUIDE.md` Read → 활성 plan 버전 확인.
|
|
31
|
-
2. task 파일 Read:
|
|
32
|
-
- 인자 있음 → 해당 파일.
|
|
33
|
-
- 인자 없음 → `tested` 상태 가장 최근 task. confirm. 없으면 *"마무리할 task 없음."* + 종료.
|
|
34
|
-
3. 상태 = `tested` 검증. 그 외면 종료 (단 알려진 결함 *"OK 마무리"*는 status=tested로 명시되어 있어야 함).
|
|
35
|
-
4. GIT_RULE Read 우선순위:
|
|
36
|
-
- `.project/rules/GIT_RULE.md` (프로젝트별 — 우선)
|
|
37
|
-
- `~/.claude/rules/GIT_RULE.md` (글로벌)
|
|
38
|
-
둘 다 없으면 종료 + *"GIT_RULE 누락"* 보고.
|
|
39
|
-
|
|
40
|
-
### Step 2 — 최종 검증 명령 재실행 (게이트)
|
|
41
|
-
|
|
42
|
-
`CLAUDE.md`의 *검증 명령* 모두 재실행. **하나라도 FAIL이면 close 차단**:
|
|
43
|
-
|
|
44
|
-
| 명령 | 결과 |
|
|
45
|
-
|------|------|
|
|
46
|
-
| 린트 | exit 0 + 에러 0 |
|
|
47
|
-
| 타입체크 | exit 0 |
|
|
48
|
-
| 빌드 | exit 0 |
|
|
49
|
-
| 단위 테스트 | 모든 케이스 PASS |
|
|
50
|
-
|
|
51
|
-
FAIL 시:
|
|
52
|
-
- 사용자에게 보고 — *"검증 명령 X가 FAIL. 어떻게 할까?"*
|
|
53
|
-
- 분기:
|
|
54
|
-
- *"고쳐"* → status를 `developing`으로 되돌림 + `/task-dev` 안내 + close 중단.
|
|
55
|
-
- *"OK 마무리"* → 결함 명시한 채 진행 (Result 섹션에 *"검증 명령 X FAIL 알려진 결함 — 사유: ..."* 추가).
|
|
56
|
-
|
|
57
|
-
PASS 시 Step 3으로.
|
|
58
|
-
|
|
59
|
-
### Step 3 — 작업 브랜치 확인/생성
|
|
60
|
-
|
|
61
|
-
1. `git branch --show-current` 실행 → 현재 브랜치 확인.
|
|
62
|
-
2. 분기:
|
|
63
|
-
- **현재 브랜치 = `{타입}/{개발자}_TASK-<NNN>_<slug>`** → 그대로 진행.
|
|
64
|
-
- **현재 브랜치 = `dev`** (또는 다른 곳) → 새 작업 브랜치 생성:
|
|
65
|
-
```
|
|
66
|
-
git checkout -b {타입}/{개발자}_TASK-<NNN>_<slug>
|
|
67
|
-
```
|
|
68
|
-
- **타입**: feature → `feature`, bug → `bug`, improvement → `improve`, refactor → `refactor`, docs → `docs`, chore → `chore`
|
|
69
|
-
- **개발자**: 메인 세션 = `claude`, 사용자 세션 = `angar2` 등 (실제 작업자)
|
|
70
|
-
- **slug**: task 파일명에서 그대로
|
|
71
|
-
- 예: `feature/claude_TASK-007_login-feature`
|
|
72
|
-
3. 작업 브랜치 진입 후 *변경분이 미리 stage* 되어 있어야 함. dev에서 작업했다면 이미 working tree에 변경분 있음 — 그대로 새 브랜치 진입 후 staging.
|
|
73
|
-
4. **작업 브랜치 생성과 staging/commit은 별도 Bash 호출로 분리**. `git checkout -b ... && git add ... && git commit ...` 같이 `&&`로 묶으면 git-guard.sh가 *명령 텍스트 분석 시점*에 dev 브랜치로 판정해 commit을 차단함 (분리하면 정상 통과). 묶음 명령 default X.
|
|
74
|
-
|
|
75
|
-
### Step 4 — 커밋 (GIT_RULE 순서 준수)
|
|
76
|
-
|
|
77
|
-
**필수 순서**:
|
|
78
|
-
|
|
79
|
-
1. **Phase별 기능 커밋** — Dev Plan의 각 Phase마다 1개 커밋.
|
|
80
|
-
- 같은 파일이 여러 Phase에 걸쳐 변경됐으면 *단일 통합 커밋 1개*로 묶음. 커밋 메시지 본문에 Phase별 변경을 `-`로 나열, 헤더 태그/번호는 마지막 Phase 사용.
|
|
81
|
-
- 메시지 형식 (GIT_RULE.md):
|
|
82
|
-
```
|
|
83
|
-
{태그}: [TASK-<NNN>] Phase <N> - <작업 요약>
|
|
84
|
-
|
|
85
|
-
- <처리 내용 1>
|
|
86
|
-
- <처리 내용 2>
|
|
87
|
-
- 사유: <변경 이유>
|
|
88
|
-
```
|
|
89
|
-
- 태그: feature → `feat:`, bug → `fix:`, improvement → `improve:`, refactor → `refactor:`, docs/chore → `docs:`, 테스트 파일 → `test:`
|
|
90
|
-
2. **flows/ 모듈 커밋 (해당 시)** — `.project/flows/<module>.md` 변경분 있으면 별도 커밋:
|
|
91
|
-
```
|
|
92
|
-
docs: [TASK-<NNN>] flows/<module>.md 갱신
|
|
93
|
-
|
|
94
|
-
- <변경 요약>
|
|
95
|
-
- 사유: <변경 이유>
|
|
96
|
-
```
|
|
97
|
-
3. **태스크 문서 커밋**:
|
|
98
|
-
```
|
|
99
|
-
docs: [TASK-<NNN>] 태스크 문서 완료
|
|
100
|
-
```
|
|
101
|
-
- 대상: `.project/tasks/<vX.X>/<NNN>_<slug>.md` (단일 파일) 또는 `.project/tasks/<vX.X>/TASK-<NNN>_<slug>/task.md` (폴더 승격) — *task 본 파일 + 해당 NNN의 vX.X 공통 spec-diffs/<NNN>_<slug>_spec-diff.md / screenshots/<NNN>_*.png* 묶음.
|
|
102
|
-
- spec-diffs/screenshots는 *vX.X 공통* 위치 — 폴더 승격 시에도 task 폴더 안에 만들지 X (TASK_DOC_RULE §1.5 참조).
|
|
103
|
-
4. **CHANGELOG 커밋 (해당 시)**:
|
|
104
|
-
- `.project/changelog/<YYYY-MM>.md` Edit (없으면 신규 Write):
|
|
105
|
-
```markdown
|
|
106
|
-
# <YYYY-MM>
|
|
107
|
-
|
|
108
|
-
## TASK-<NNN> — <제목>
|
|
109
|
-
- <Phase 1 요약>
|
|
110
|
-
- <Phase 2 요약>
|
|
111
|
-
- ...
|
|
112
|
-
```
|
|
113
|
-
- 커밋:
|
|
114
|
-
```
|
|
115
|
-
docs: [TASK-<NNN>] CHANGELOG 업데이트
|
|
116
|
-
```
|
|
117
|
-
- 본 task에서 변경분 없으면 본 단계 *완전히 스킵* (빈 commit 금지).
|
|
118
|
-
|
|
119
|
-
### Step 5 — dev 병합
|
|
120
|
-
|
|
121
|
-
1. `git checkout dev` 실행.
|
|
122
|
-
2. 일반 타입(feature/bug/improvement/refactor/docs/chore) → **`git merge --no-ff <작업 브랜치>` 강제** (fast-forward 절대 금지).
|
|
123
|
-
- `-m` 옵션 사용 금지 — 머지 커밋 메시지는 git 기본값 사용.
|
|
124
|
-
3. plan/roadmap 임시 docs 브랜치 예외 — 단일 커밋이라 `--ff-only` 가능 (일반 흐름에서는 거의 발생 X).
|
|
125
|
-
4. **작업 브랜치 자동 삭제 금지** — 사용자 명시 승인(*"브랜치 삭제해"*)이 있을 때만 `git branch -d`. 미승인 시 보존.
|
|
126
|
-
|
|
127
|
-
### Step 6 — task 파일 status 전환
|
|
128
|
-
|
|
129
|
-
헤더 status → `closed` Edit. 단 이 Edit은 closed-immutable.sh hook에 잡힐 수 있음 — task 파일 *마지막* 수정으로 적용한 후 별도 커밋 불필요(이미 Step 4-3에서 커밋함).
|
|
130
|
-
|
|
131
|
-
→ Edit이 Step 4-3 커밋 *전*에 일어나야 하므로 실제 흐름은:
|
|
132
|
-
|
|
133
|
-
**실제 순서 재정리**:
|
|
134
|
-
1. Step 4-1: Phase 기능 커밋
|
|
135
|
-
2. Step 4-2: flows/ 커밋 (해당 시)
|
|
136
|
-
3. **task 파일 status를 `closed`로 Edit** (closed-immutable.sh hook 차단되지 X — 이 Edit은 *허용*. status가 closed가 *된 후 재수정*이 차단)
|
|
137
|
-
4. Step 4-3: 태스크 문서 커밋 (status=closed 적용된 채로)
|
|
138
|
-
5. Step 4-4: CHANGELOG 커밋
|
|
139
|
-
6. Step 5: dev 병합
|
|
140
|
-
|
|
141
|
-
### Step 7 — 결과 보고
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
✅ TASK-<NNN> closed
|
|
145
|
-
- 작업 브랜치: <브랜치명>
|
|
146
|
-
- 커밋: Phase <N>개 + 태스크 문서 + (CHANGELOG)
|
|
147
|
-
- dev 병합: --no-ff 완료
|
|
148
|
-
- 상태: tested → closed
|
|
149
|
-
- 작업 브랜치 보존 (삭제하려면 "브랜치 삭제해" 명시)
|
|
150
|
-
- 다음: 새 task 시작은 /task-init, 5 task 누적 시 /refine으로 회고
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## 도구 가이드
|
|
154
|
-
|
|
155
|
-
- **Read**: GIT_RULE / task 파일 / CLAUDE.md 검증 명령 정독
|
|
156
|
-
- **Bash**: git 명령 (`branch`, `checkout`, `add`, `commit`, `merge`) + 검증 명령 재실행. **유일하게 git 사용 허가된 스킬**
|
|
157
|
-
- **Edit**: task 파일 status → `closed`, CHANGELOG 갱신
|
|
158
|
-
- **Write**: CHANGELOG 신규 (없으면)
|
|
159
|
-
|
|
160
|
-
## 주의사항
|
|
161
|
-
|
|
162
|
-
- **검증 명령 재실행 게이트** — `/task-dev` self-check / `/task-test` 격리 세션 PASS와 *별개로* 본 단계에서 한 번 더 실행. 환경 변화 / 부분 작업 / 메인 가정 등 잡는 안전망. 무리하게 게이트 우회 X.
|
|
163
|
-
- **dev 직접 커밋 절대 X** — 작업 브랜치에서만. dev 브랜치에서 `git commit` 시도하면 git-guard.sh hook이 차단. hook이 0회 작동하도록 정상 흐름 준수.
|
|
164
|
-
- **`--no-ff` 강제** — 머지 커밋 없으면 작업 브랜치 분기 정보 영구 손실. fast-forward 시도 절대 X.
|
|
165
|
-
- **destructive 명령 사용자 승인 필수** — `git reset --hard` / `git push --force` / `git branch -D` / `git clean -fd` 사용자 명시 승인 없이 절대 실행 X. 충돌/오류 시 사용자에게 보고 + 승인 요청 의무.
|
|
166
|
-
- **민감 정보 staging X** — `.env` / `credentials.json` / API key 등 staging 절대 X. `.gitignore`에 포함되어 있어도 한 번 더 점검.
|
|
167
|
-
- **빈 commit 금지** — CHANGELOG 변경 없으면 4-4 단계 스킵. `--allow-empty` 사용 금지.
|
|
168
|
-
- **작업 브랜치 자동 삭제 X** — 사용자 명시 승인 있을 때만. 머지 후 자동 삭제 룰 X (분기 정보 보존).
|
|
169
|
-
- **branch -D 사용자 승인 필수** — `-d` (안전 삭제)는 머지 확인된 브랜치만 가능. `-D` (강제 삭제)는 사용자 명시 승인 필수.
|
|
170
|
-
- **`-m` 옵션 머지 커밋에 사용 금지** — git 기본 메시지 사용 (GIT_RULE §병합 커밋).
|
|
171
|
-
|
|
172
|
-
## 상태 전이
|
|
173
|
-
|
|
174
|
-
| 진입 시 | 종료 시 |
|
|
175
|
-
|--------|--------|
|
|
176
|
-
| `tested` | `closed` |
|
|
177
|
-
|
|
178
|
-
(검증 명령 FAIL + 사용자 *"고쳐"* → `developing`으로 되돌림. 본 스킬 자체는 거기서 중단.)
|