@angar2/taskery 0.1.2 → 0.1.3
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 +1 -1
- package/package.json +1 -1
- package/template/.claude/hooks/git-guard.sh +38 -4
- package/template/.claude/skills/task-close/SKILL.md +16 -5
- package/template/.claude/skills/task-dev/SKILL.md +1 -1
- package/template/.claude/skills/task-init/SKILL.md +1 -1
- package/template/.claude/skills/task-plan/SKILL.md +30 -1
- package/template/.claude/skills/task-test/SKILL.md +2 -1
- package/template/.project/rules/GIT_RULE.md +8 -2
- package/template/.project/rules/MOCKUP_RULE.md +2 -1
- package/template/.project/rules/TASK_DOC_RULE.md +24 -0
- package/template/CLAUDE.md +2 -1
package/README.md
CHANGED
|
@@ -135,7 +135,7 @@ my-app/
|
|
|
135
135
|
같은 프로젝트에서 여러 메인 세션을 동시에 운영해 독립 task를 병렬로 진행한다.
|
|
136
136
|
|
|
137
137
|
- 새 task를 시작하면(`/task-init`) 작업 폴더(`~/.taskery/worktrees/<projectId>/TASK-NNN_<출처>_<슬러그>/`)와 작업 브랜치를 함께 분기한다.
|
|
138
|
-
-
|
|
138
|
+
- 작업 폴더에서 새 메인 세션을 열어 진행하거나, 메인 세션 1개로 모든 작업을 지휘하거나, 메인이 서브 세션을 호출해 병렬로 진행한다 — 운영 방식은 자유. 메인 워크트리(원본 폴더)는 `dev` 전용 상태로 유지된다.
|
|
139
139
|
- task 완료(`/task-close`) 시 머지 락으로 직렬화한 후 dev에 `--no-ff` 병합한다. 다른 세션이 먼저 머지해 충돌이 발생하면 본 세션이 단순/의미적/판단 불가 3단계로 해결을 시도한다.
|
|
140
140
|
- 머지 직후 작업 폴더와 작업 브랜치는 자동 정리된다(보존 키워드 사용 시 양쪽 유지). 안전망으로 복구 명령이 함께 출력된다.
|
|
141
141
|
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# PreToolUse(Bash) 훅 — catastrophic git 명령 차단
|
|
4
4
|
#
|
|
5
5
|
# 잡는 것:
|
|
6
|
-
# 1. main / dev 브랜치 직접 커밋
|
|
6
|
+
# 1. main / dev 브랜치 직접 커밋 (5종 변형 인식: -C / --git-dir / --work-tree)
|
|
7
7
|
# 2. git push --force / -f
|
|
8
8
|
# 3. git commit --no-verify
|
|
9
9
|
# 4. git branch -D (강제 삭제)
|
|
@@ -31,12 +31,46 @@ if ! echo "$CMD" | grep -qE '(^|;|&&|\|\|)\s*git\s'; then
|
|
|
31
31
|
exit 0
|
|
32
32
|
fi
|
|
33
33
|
|
|
34
|
-
#
|
|
34
|
+
# 헬퍼: git 명령에서 대상 워크트리 경로 추출 (5종 변형)
|
|
35
|
+
# 1. git -C <경로>
|
|
36
|
+
# 2. git --git-dir=<경로> (= 형태)
|
|
37
|
+
# 3. git --git-dir <경로> (공백 분리)
|
|
38
|
+
# 4. git --work-tree=<경로> (= 형태)
|
|
39
|
+
# 5. git --work-tree <경로> (공백 분리)
|
|
40
|
+
# 추출 실패 시 빈 문자열 (cwd 사용).
|
|
41
|
+
# --git-dir 변형은 `.git` 디렉토리를 가리키므로 dirname 처리해 워크트리 경로로 변환.
|
|
42
|
+
extract_target_path() {
|
|
43
|
+
local cmd="$1"
|
|
44
|
+
local path=""
|
|
45
|
+
|
|
46
|
+
if [[ "$cmd" =~ git[[:space:]]+-C[[:space:]]+([^[:space:]]+) ]]; then
|
|
47
|
+
path="${BASH_REMATCH[1]}"
|
|
48
|
+
elif [[ "$cmd" =~ --git-dir=([^[:space:]]+) ]]; then
|
|
49
|
+
path=$(dirname "${BASH_REMATCH[1]}")
|
|
50
|
+
elif [[ "$cmd" =~ --git-dir[[:space:]]+([^[:space:]]+) ]]; then
|
|
51
|
+
path=$(dirname "${BASH_REMATCH[1]}")
|
|
52
|
+
elif [[ "$cmd" =~ --work-tree=([^[:space:]]+) ]]; then
|
|
53
|
+
path="${BASH_REMATCH[1]}"
|
|
54
|
+
elif [[ "$cmd" =~ --work-tree[[:space:]]+([^[:space:]]+) ]]; then
|
|
55
|
+
path="${BASH_REMATCH[1]}"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
echo "$path"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# 1. main / dev 직접 커밋 차단 (5종 변형 인식)
|
|
35
62
|
# 현재 브랜치 확인 + git commit 명령 감지 시 차단
|
|
36
|
-
if echo "$CMD" | grep -qE '(^|;|&&|\|\|)\s*git\s+commit\b'; then
|
|
37
|
-
|
|
63
|
+
if echo "$CMD" | grep -qE '(^|;|&&|\|\|)\s*git(\s+(-C\s+\S+|--git-dir[= ]\S+|--work-tree[= ]\S+))*\s+commit\b'; then
|
|
64
|
+
TARGET_PATH=$(extract_target_path "$CMD")
|
|
65
|
+
if [ -n "$TARGET_PATH" ]; then
|
|
66
|
+
CURRENT_BRANCH=$(git -C "$TARGET_PATH" branch --show-current 2>/dev/null)
|
|
67
|
+
else
|
|
68
|
+
CURRENT_BRANCH=$(git branch --show-current 2>/dev/null)
|
|
69
|
+
fi
|
|
38
70
|
if [ "$CURRENT_BRANCH" = "main" ] || [ "$CURRENT_BRANCH" = "dev" ]; then
|
|
39
71
|
echo "git-guard: '$CURRENT_BRANCH' 브랜치 직접 커밋 차단. 작업 브랜치({타입}/{개발자}_TASK-NNN_slug)에서 커밋. (.project/rules/GIT_RULE.md §기본 원칙)" >&2
|
|
72
|
+
echo " 변형 인식: 'git -C <경로> ...' / 'git --git-dir=<경로> ...' / 'git --work-tree=<경로> ...' — 메인 cwd에서 워크트리 대상 커밋 가능." >&2
|
|
73
|
+
echo " 셸 prefix('cd <경로> && git ...' / '(cd ... && git ...)')는 hook이 정확히 인식 X — 'git -C <경로> ...' 형태로만 발행." >&2
|
|
40
74
|
exit 2
|
|
41
75
|
fi
|
|
42
76
|
fi
|
|
@@ -7,7 +7,7 @@ description: task git 마무리 — 검증 게이트 + 커밋 순서 + 머지
|
|
|
7
7
|
|
|
8
8
|
## 개요
|
|
9
9
|
|
|
10
|
-
`tested` 상태 task의 git 마무리.
|
|
10
|
+
`tested` 상태 task의 git 마무리. **호출 위치 자유** — 워크트리 cwd / 메인 워크트리 cwd / 다른 세션이 호출한 서브 세션 모두 동작 동일 (모든 git 명령이 `git -C <경로>` 형태라 cwd 무관). 사전 rebase → 충돌 해결 (3단계 에스컬레이션) → 머지 락 → 락 안 재 rebase → dev `--no-ff` 머지 → 워크트리 제거 + 작업 브랜치 자동 삭제.
|
|
11
11
|
|
|
12
12
|
**최종 게이트**: 모든 검증 명령 재실행 — 린트/타입체크/빌드 PASS여야 진행.
|
|
13
13
|
|
|
@@ -18,8 +18,19 @@ description: task git 마무리 — 검증 게이트 + 커밋 순서 + 머지
|
|
|
18
18
|
|
|
19
19
|
## 호출 위치 정책
|
|
20
20
|
|
|
21
|
-
-
|
|
22
|
-
-
|
|
21
|
+
- **호출 위치 자유** — 운영 모델에 따라 다양:
|
|
22
|
+
- *멀티세션 병렬* (system default) — 각 워크트리에 새 메인 세션 열어 그 세션이 본 스킬 호출
|
|
23
|
+
- *단일 메인 지휘* — 메인 cwd 세션 1개가 모든 task 호출 (서브 세션 X)
|
|
24
|
+
- *메인이 서브 세션 호출 병렬* — 메인이 다른 세션 spawn해서 각 task 진행
|
|
25
|
+
- **호출 분기**:
|
|
26
|
+
- 인자 명시 (`TASK-NNN`) → 해당 워크트리 컨텍스트로 진입 (`$WT_PATH = ~/.taskery/worktrees/<projectId>/TASK-NNN_<...>/`).
|
|
27
|
+
- 인자 없음 → 워크트리 cwd면 *그 워크트리의 태스크* 자동 / 메인 cwd면 진행중 태스크 (status=tested) 인터뷰 + 사용자 선택.
|
|
28
|
+
- **cwd 무관 동작** — 본 SKILL의 모든 git 명령이 `git -C "$WT_PATH" ...` / `git -C "$MAIN_WT" ...` 형태라 어느 cwd에서 호출되든 결과 동일.
|
|
29
|
+
- **내부 git 명령 형태 강제** (메인 cwd 호출 시 git-guard 오판 + 변형 우회 방지):
|
|
30
|
+
- 본 SKILL의 모든 git 명령은 *`git -C <경로> ...` 형태로만 발행*.
|
|
31
|
+
- 셸 prefix(`cd <경로> && git ...` / `(cd <경로> && git ...)`) **영구 금지** — git-guard.sh가 변형 인식 X (catastrophic 우회 위험).
|
|
32
|
+
- `--git-dir=` / `--work-tree=` 변형 **영구 금지** — 가독성 ↓, 다른 워크트리 조작 혼동.
|
|
33
|
+
- 근거: stash FRICTION_LOG 2026-06-01 — 메인 cwd 세션에서 워크트리 브랜치 커밋이 git-guard에 dev 직접 커밋으로 오인 차단된 마찰.
|
|
23
34
|
|
|
24
35
|
## 입력 처리
|
|
25
36
|
|
|
@@ -33,7 +44,7 @@ description: task git 마무리 — 검증 게이트 + 커밋 순서 + 머지
|
|
|
33
44
|
|
|
34
45
|
```sh
|
|
35
46
|
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
36
|
-
WT_PATH=$(pwd) #
|
|
47
|
+
WT_PATH=$(pwd) # 워크트리 cwd 호출 시. 메인 cwd / 서브 세션 호출 시 인자 또는 인터뷰 결과로 결정
|
|
37
48
|
PROJECT_ID=$(jq -r '.projectId' "$MAIN_WT/.taskery-manifest.json")
|
|
38
49
|
BRANCH=$(git -C "$WT_PATH" rev-parse --abbrev-ref HEAD)
|
|
39
50
|
LOCK_TIMEOUT_MS=$(jq -r '.lock_timeout_ms // 30000' "$MAIN_WT/.taskery-manifest.json")
|
|
@@ -324,7 +335,7 @@ git -C "$MAIN_WT" worktree remove "$WT_PATH"
|
|
|
324
335
|
|
|
325
336
|
- **사용자 명시 호출 외 자체 진입 영구 금지** (stash FRICTION_LOG #6+10/#20) — task-close는 git 영역. 사용자가 *"X부터 Y까지"* 범위 명시했는데 Y가 close 이전 단계면 close 자체 진입 영구 X.
|
|
326
337
|
- **검증 명령 재실행 게이트** — `/task-dev` self-check와 *별개*. 환경 변화 / 부분 작업 잡는 안전망.
|
|
327
|
-
- **dev 직접 커밋 절대 X** —
|
|
338
|
+
- **dev 직접 커밋 절대 X** — 작업 브랜치에서만. dev에서 `git commit` 시도 시 git-guard.sh 차단. 모든 git 명령은 cwd 무관 `git -C "$WT_PATH" ...` / `git -C "$MAIN_WT" ...` 형태 강제. 셸 prefix(`cd && git`) / `--git-dir=` / `--work-tree=` 변형 영구 금지 (§호출 위치 정책).
|
|
328
339
|
- **`--no-ff` 강제** — 머지 커밋 없으면 분기 정보 영구 손실.
|
|
329
340
|
- **머지 락 직렬화** — 두 세션이 동시 머지 시도해도 한쪽씩 순차 진행. 락 외 rebase로 race 흡수 + 락 안 재 rebase로 다른 세션 머지 흡수.
|
|
330
341
|
- **충돌 자체 해결 3단계** — 단순 자동 / 의미적 자료 / 판단 불가 사용자. 자료 한계 발견 시 *반드시 사용자에게 보고* (1순위 자료 부재 등).
|
|
@@ -13,7 +13,7 @@ self-check 명령은 프로젝트 루트 `CLAUDE.md`의 *검증 명령* 섹션
|
|
|
13
13
|
|
|
14
14
|
## 멀티세션 메타 위치 (0.1.2+)
|
|
15
15
|
|
|
16
|
-
본 스킬은 워크트리에서
|
|
16
|
+
본 스킬은 워크트리에서 호출되는 게 default (멀티세션 — 각 워크트리 = 독립 세션). 다만 호출 위치 자유 — 메인 cwd / 서브 세션 호출 등 다른 운영 모델에서도 cwd 무관 동작. 메타(`.project/`, `CLAUDE.md`) 접근 시 **메인 워크트리 절대 경로** 우선.
|
|
17
17
|
|
|
18
18
|
```sh
|
|
19
19
|
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
@@ -244,7 +244,7 @@ git -C "$MAIN_WT" check-ignore -q "$MAIN_WT/.project/dummy"
|
|
|
244
244
|
- task 문서: <TASK_DOC_PATH> (메인 워크트리 / 워크트리 안 — 위 케이스에 따라)
|
|
245
245
|
- 헤더: <생성일> / <vX.X> / <유형> / <규모> / draft
|
|
246
246
|
- BL 마킹: BL-<NNN> [x] (BL 출처 시. RM/DR이면 생략)
|
|
247
|
-
- 다음: 워크트리 폴더에서 새 세션
|
|
247
|
+
- 다음: /task-plan TASK-<NNN> 으로 기획 채우기 (워크트리 폴더에서 새 세션 열어 진행 / 메인 세션 그대로 진행 / 메인이 서브 세션 spawn 등 운영 모델 자유)
|
|
248
248
|
```
|
|
249
249
|
|
|
250
250
|
## 도구 가이드
|
|
@@ -13,7 +13,7 @@ description: task 기획 채우기 — Requirements / Scope / Dev Plan / Test Pl
|
|
|
13
13
|
|
|
14
14
|
## 멀티세션 메타 위치 (0.1.2+)
|
|
15
15
|
|
|
16
|
-
본 스킬은 워크트리에서
|
|
16
|
+
본 스킬은 워크트리에서 호출되는 게 default (멀티세션 — 각 워크트리 = 독립 세션). 다만 호출 위치 자유 — 메인 cwd / 서브 세션 호출 등 다른 운영 모델에서도 cwd 무관 동작. 메타(`.project/`, `CLAUDE.md`) 접근 시 **메인 워크트리 절대 경로** 우선 — *task 문서 단일 진실 소스* 유지.
|
|
17
17
|
|
|
18
18
|
```sh
|
|
19
19
|
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
@@ -150,9 +150,15 @@ Step 2 Requirements 인터뷰 결과로 본 task가 *UX/UI 구현 (페이지/컴
|
|
|
150
150
|
|
|
151
151
|
#### 2. 목업 confirm
|
|
152
152
|
|
|
153
|
+
**예외 없이 사용자에게 발화 강제** — UX/UI 포함 판단=O이면 본 confirm 질문은 *반드시* 발화. 메인의 효용 판단(*"이 케이스는 목업 효용 낮음"* / *"SF Symbol은 HTML 재현 X"* 등)으로 confirm 단계 자체를 건너뛰는 행위 영구 금지. 효용 판단은 질문에 *곁들이는 의견*으로만 표현 가능 (생략 결정 대체 X — 목업 제작 여부는 *사용자 검수 방식 선택권*이라 *개발 자율 판단* 영역 X).
|
|
154
|
+
|
|
155
|
+
근거: stash FRICTION_LOG 2026-06-01 — UX/UI 구현 task인데 메인이 *목업 효용 낮음* 자체 판단으로 Step 4.5 confirm 자체를 생략한 마찰.
|
|
156
|
+
|
|
153
157
|
사용자에게 한 줄 질문:
|
|
154
158
|
*"이 task UX/UI 구현 포함되어 있어. HTML 목업 만들까? 구현 정확도 + 사용자 사전 시각 확인 + task-test 검수 기준 확보 효과."*
|
|
155
159
|
|
|
160
|
+
(효용 한계 의견 곁들이기 — 해당 시): *"단, <기술 한계 — 예: SF Symbol 아이콘은 HTML 재현 X> 영역은 목업 효용 제한적."* — 의견 표현만 가능, 생략 결정 대체 X.
|
|
161
|
+
|
|
156
162
|
- 사용자 *"OK"* → 3 진행
|
|
157
163
|
- 사용자 *"NO"* → 본 Step 패스 (목업 없이 진행)
|
|
158
164
|
|
|
@@ -233,6 +239,29 @@ Test Plan = *본 task에서 구현한 요구사항이 정상 동작하는지*
|
|
|
233
239
|
- **자기완결적**: `/task-test` 격리 세션이 *task.md만 보고* 수행 가능. 메인의 plan/dev 컨텍스트 없이.
|
|
234
240
|
- **명령/기대값 포함**: 무엇을 실행하고 무엇이 기대되는지 명확.
|
|
235
241
|
- **메인 가정 X**: *"잘 될 거야"* / *"문제 없을 듯"* 같은 가정 금지.
|
|
242
|
+
- **grep/Read-only 존재 확인 시나리오 = 보조용** (stash FRICTION_LOG 2026-06-01 반영) — 구현 코드의 존재 여부를 grep/Read로 재확인하는 시나리오는 *동어반복*. PASS 카운트에서 제외하거나 실동작 시나리오의 *보조*로만 사용. 단독 검증 가치 X.
|
|
243
|
+
- **요구사항당 end-to-end 1개 이상 강제** — Requirements 각 항목이 *사용자 관점에서 실제 작동하는지* 검증하는 end-to-end 실동작 시나리오 최소 1개 보장. 산출물 실행 → 결과 확인 형태.
|
|
244
|
+
- **무거운 검증 회피 영구 금지** — 부담(빌드 수 분+ / 외부 의존 / 환경 설정) 이유로 실동작 시나리오를 grep 동어반복으로 대체 X. 최소 1회는 실제 산출물로 확인. 부담은 *fix 사이클 1~2회 예상* 같은 사전 예고로 처리 (생략 사유 X).
|
|
245
|
+
|
|
246
|
+
#### 요구사항 ↔ 시나리오 커버리지 점검 (필수 — stash FRICTION_LOG 2026-06-01 반영)
|
|
247
|
+
|
|
248
|
+
Test Plan 작성 완료 후 *반드시* 점검 단계 수행. *"누적/리셋 안 함"* 같은 요구사항이 시나리오에서 통째로 빠지는 누락 차단용.
|
|
249
|
+
|
|
250
|
+
1. Requirements 섹션 합의 항목 전체를 *매트릭스*로 펼침.
|
|
251
|
+
2. 각 요구사항 항목당 *최소 1개 시나리오 커버* 확인.
|
|
252
|
+
3. 미커버 항목 발견 시 → 시나리오 보강 후 재점검.
|
|
253
|
+
|
|
254
|
+
형식 (Test Plan 끝에 첨부):
|
|
255
|
+
|
|
256
|
+
```markdown
|
|
257
|
+
### Requirements ↔ Test Plan 매트릭스
|
|
258
|
+
|
|
259
|
+
| 요구사항 | 커버 시나리오 # |
|
|
260
|
+
|---------|----------------|
|
|
261
|
+
| <Req 1 한 줄> | #1, #3 |
|
|
262
|
+
| <Req 2 한 줄> | #2 (end-to-end) |
|
|
263
|
+
| <Req 3 한 줄> | #5 |
|
|
264
|
+
```
|
|
236
265
|
|
|
237
266
|
#### 검증/테스트 명령 참조
|
|
238
267
|
|
|
@@ -13,7 +13,7 @@ description: task 격리 세션 검증 — Task tool 격리 호출 + Test Plan
|
|
|
13
13
|
|
|
14
14
|
## 멀티세션 메타 위치 (0.1.2+)
|
|
15
15
|
|
|
16
|
-
본 스킬은 워크트리에서
|
|
16
|
+
본 스킬은 워크트리에서 호출되는 게 default (멀티세션 — 각 워크트리 = 독립 세션). 다만 호출 위치 자유 — 메인 cwd / 서브 세션 호출 등 다른 운영 모델에서도 cwd 무관 동작 (격리 세션 prompt에 *task 문서 절대 경로* + *작업 디렉토리=$WT_PATH* 명시). 격리 세션 prompt에 넘기는 task 문서 + 검증/테스트 명령 출처:
|
|
17
17
|
|
|
18
18
|
```sh
|
|
19
19
|
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
@@ -83,6 +83,7 @@ Task tool로 sub-agent spawn. prompt는 *자기완결적* — task.md 경로 +
|
|
|
83
83
|
7. 코드와 동작만 신뢰. *"잘 될 거야"* / *"문제 없을 듯"* 같은 가정 일체 금지.
|
|
84
84
|
8. 코드 파일 직접 수정 절대 금지. 임시 파일(테스트 스크립트 등) 생성 시 종료 후 삭제.
|
|
85
85
|
9. **task.md 본문 메타 발언과 raw 결과 분리** — task.md (Requirements / Scope / Dev Plan / Test Plan 본문)의 *어떠한 메타 발언* (*"본 Test Plan은 Dev Plan과 의도적 mismatch"* / *"본 task는 FAIL이 정상"* / *"aborted 시뮬"* 등) 도 raw 시나리오 결과 판정을 *덮을 수 없다*. raw 결과 판정 = *실행 명령 exit code / 로그 출력 / 어서션 통과 여부*만. 본문 의도 해석 영역 외 — 결과 기반 판정만.
|
|
86
|
+
10. **grep/Read-only 존재 확인 시나리오 = 보조 검증** (stash FRICTION_LOG 2026-06-01 반영) — 시나리오가 *코드/파일에 X가 존재하나*를 grep / Read로 재확인하는 형태(동어반복)면 *보조 검증*으로 분류. 종합 판정의 PASS 카운트에서 제외하고, 같은 영역의 *실동작 시나리오*가 PASS인 경우에만 보조 자료로 첨부. 단독 PASS 가치 X. 실동작 시나리오 없이 grep-only 시나리오만으로 종합 PASS 단정 영구 금지 — 그 경우 *실동작 시나리오 부재*로 UNCERTAIN/FAIL 판정 + 메인 보고.
|
|
86
87
|
|
|
87
88
|
## 결과 형식 (이 포맷 그대로 리턴)
|
|
88
89
|
|
|
@@ -191,7 +191,9 @@ docs: [TASK-{NNN}] CHANGELOG 업데이트
|
|
|
191
191
|
### 메인 워크트리 = dev 전용
|
|
192
192
|
|
|
193
193
|
- 메인 워크트리는 항상 dev 체크아웃 상태 유지
|
|
194
|
-
- 모든 태스크 작업은
|
|
194
|
+
- 모든 태스크 작업은 *예외 없이* 별도 워크트리에서 수행
|
|
195
|
+
- **메인 워크트리 HEAD를 dev에서 떼는 어떤 명령도 영구 금지**: `git checkout <task-branch>` / `git switch <task-branch>` / `git reset` HEAD 이동 / `git rebase` HEAD 이동 등. *"잠깐만 메인에서"* / *"테스트 한 번만"* 같은 예외 발화도 거부 (별도 워크트리로 처리)
|
|
196
|
+
- **모호 발화 자의 해석 금지**: *"워크트리 없이"* / *"메인에서"* / *"이 자리에서"* 류 발화 = 본 규칙 충돌 신호 → 즉시 정지 + 규칙 명시 + 1줄 confirm 요청 (자의 해석 후 진행 영구 금지). 사용자 의도가 *오타/모호*일 가능성은 *워크트리 사용*으로 읽는 게 자연스러움
|
|
195
197
|
- `/task-init` / `/task-close` 시작 시 검증 (위배 시 사용자 호출 + 중단)
|
|
196
198
|
|
|
197
199
|
### 워크트리 위치
|
|
@@ -243,11 +245,14 @@ git -C "$MAIN_WT" branch --no-merged dev --list \
|
|
|
243
245
|
## Hook 안전망 — `git-guard.sh`
|
|
244
246
|
|
|
245
247
|
`.claude/hooks/git-guard.sh`가 PreToolUse(Bash)로 다음 명령 차단:
|
|
246
|
-
- `main` / `dev` 직접 커밋
|
|
248
|
+
- `main` / `dev` 직접 커밋 — **5종 변형 인식** (0.1.3+): `git -C <경로>` / `git --git-dir=<경로>` / `git --git-dir <경로>` / `git --work-tree=<경로>` / `git --work-tree <경로>` 모두 인식해 *대상 경로의 브랜치*로 검사. 어느 cwd에서 호출하든 워크트리 브랜치 커밋이 dev 직접 커밋으로 오인 차단되지 않음
|
|
247
249
|
- `git push --force` (작업 브랜치 외 / 사용자 미승인)
|
|
248
250
|
- `git commit --no-verify`
|
|
249
251
|
- `git branch -D` (사용자 미승인)
|
|
250
252
|
- `git reset --hard` (사용자 미승인)
|
|
253
|
+
- `git clean -fd` (사용자 미승인)
|
|
254
|
+
|
|
255
|
+
**셸 prefix 금지**: `cd <경로> && git ...` / `(cd <경로> && git ...)` 형태는 hook이 정확히 인식 X (변형 우회 위험). 모든 워크트리 대상 명령은 `git -C <경로> ...` 형태로만 발행.
|
|
251
256
|
|
|
252
257
|
이 hook은 *catastrophic 차단 안전망*. 잘 지키면 작동 0회 (무해).
|
|
253
258
|
|
|
@@ -278,3 +283,4 @@ git -C "$MAIN_WT" branch --no-merged dev --list \
|
|
|
278
283
|
| 2026-05-30 | docs/* 브랜치 ff-only 예외 명시 — plan-init 단일 커밋 한정. task 진행 중 ROADMAP/플랜 갱신은 작업 브랜치 + --no-ff 명시 추가 (stash FRICTION_LOG #4 반영) |
|
|
279
284
|
| 2026-05-31 | 멀티세션 0.1.2 오버라이드 — 브랜치명에 출처(BL/RM/DR) 추가 / 케이스 2(TASK 없는 브랜치) 시스템 외 명시 / `/task-close` 자동 삭제 + 워크트리 제거 면제 조항 / 멀티세션 워크트리 정책 섹션 신규 (메인=dev 전용 / SSoT 조회 / 머지 락 직렬화) |
|
|
280
285
|
| 2026-05-31 | 0.1.2 백로그 스킬 추가 정합 — 출처 표 `BL-NNN` 채번 주체 `/backlog-add` → `/add-backlog`로 갱신 + 버전별 경로(`.project/tasks/<vX.X>/BACKLOG.md`) 명시 |
|
|
286
|
+
| 2026-06-02 | 0.1.3 F2·F3 정합 — §멀티세션 워크트리 정책 *메인 HEAD 떼기 금지* + *모호 발화 자의 해석 금지* / §git-guard.sh 5종 변형 인식 (-C / --git-dir / --work-tree) + 셸 prefix 금지 명시. stash FRICTION_LOG 2026-06-01 반영 |
|
|
@@ -51,7 +51,7 @@ UX/UI 구현 task의 *시각 영역 사전 정합* + *task-test 시 USER 검수
|
|
|
51
51
|
## 5. 생성 흐름 (`/task-plan` Step 4.5 정합)
|
|
52
52
|
|
|
53
53
|
1. UX/UI 구현 task 판단 (Step 2 Requirements 인터뷰 결과)
|
|
54
|
-
2. 사용자에게 *"HTML 목업 만들까?"* 한 줄 confirm
|
|
54
|
+
2. 사용자에게 *"HTML 목업 만들까?"* 한 줄 confirm — **예외 없이 발화 강제**. 메인의 효용 판단(*"이 케이스는 목업 효용 낮음"* / *"SF Symbol은 HTML 재현 X"* 등)으로 confirm 자체를 생략하는 행위 영구 금지. 효용 판단은 질문에 *곁들이는 의견*으로만 가능 (생략 결정 대체 X — 목업 제작 여부는 *사용자 검수 방식 선택권*이라 *개발 자율 판단* 영역 X).
|
|
55
55
|
3. OK → 메인이 정적 HTML 생성 → 사용자 시각 승인 (✓ → 진행 / ✗ → 수정 재승인)
|
|
56
56
|
4. 승인된 목업 = task-test의 *시각 영역 USER 검수 기준*
|
|
57
57
|
|
|
@@ -83,3 +83,4 @@ UX/UI 구현 task의 *시각 영역 사전 정합* + *task-test 시 USER 검수
|
|
|
83
83
|
| 날짜 | 변경 사항 |
|
|
84
84
|
|------|----------|
|
|
85
85
|
| 2026-05-30 | 신규 작성 — UX/UI task HTML 목업 위치 / 형식 / 생성 흐름 / 두 시점 활용 / 시각 fix 사이클 예고 / 디자인 정독 의무 정의 (stash FRICTION_LOG #14+19 / #12 반영) |
|
|
86
|
+
| 2026-06-02 | §5 #2 — 목업 confirm *예외 없이 발화 강제* 명시 추가 (메인 효용 판단으로 confirm 자체 생략 금지). stash FRICTION_LOG 2026-06-01 F1 반영 |
|
|
@@ -208,6 +208,29 @@ draft → planned → developing → developed → testing → tested → closed
|
|
|
208
208
|
- **자기완결적**: `/task-test` 격리 세션이 *task.md만 보고도* 수행 가능. 메인의 plan/dev 컨텍스트 없이.
|
|
209
209
|
- **명령 / 기대값 포함**: 무엇을 실행하고 무엇이 기대되는지 명확.
|
|
210
210
|
- **메인 가정 X**: 격리 세션이 *코드와 동작만 신뢰*. *"잘 될 거야"* 같은 가정 금지.
|
|
211
|
+
- **grep/Read-only 존재 확인 시나리오 = 보조용** (stash FRICTION_LOG 2026-06-01 반영) — 구현 코드의 존재 여부를 grep/Read로 재확인하는 시나리오는 *동어반복*. PASS 카운트에서 제외하거나 실동작 시나리오의 *보조*로만 사용. 단독 검증 가치 X.
|
|
212
|
+
- **요구사항당 end-to-end 1개 이상 강제** — Requirements 각 항목이 *사용자 관점에서 실제 작동하는지* 검증하는 end-to-end 실동작 시나리오 최소 1개 보장. 산출물 실행 → 결과 확인 형태.
|
|
213
|
+
- **무거운 검증 회피 영구 금지** — 부담(빌드 수 분+ / 외부 의존 / 환경 설정) 이유로 실동작 시나리오를 grep 동어반복으로 대체 X. 최소 1회는 실제 산출물로 확인. 부담은 *fix 사이클 1~2회 예상* 같은 사전 예고로 처리 (생략 사유 X).
|
|
214
|
+
|
|
215
|
+
**요구사항 ↔ 시나리오 커버리지 점검** (필수 — stash FRICTION_LOG 2026-06-01 반영):
|
|
216
|
+
|
|
217
|
+
Test Plan 작성 완료 후 *반드시* 점검. *"누적/리셋 안 함"* 같은 요구사항이 시나리오에서 통째로 빠지는 누락 차단용.
|
|
218
|
+
|
|
219
|
+
1. Requirements 합의 항목 전체를 *매트릭스*로 펼침.
|
|
220
|
+
2. 각 항목당 *최소 1개 시나리오 커버* 확인.
|
|
221
|
+
3. 미커버 발견 시 → 시나리오 보강 후 재점검.
|
|
222
|
+
|
|
223
|
+
형식 (Test Plan 끝에 첨부):
|
|
224
|
+
|
|
225
|
+
```markdown
|
|
226
|
+
### Requirements ↔ Test Plan 매트릭스
|
|
227
|
+
|
|
228
|
+
| 요구사항 | 커버 시나리오 # |
|
|
229
|
+
|---------|----------------|
|
|
230
|
+
| <Req 1 한 줄> | #1, #3 |
|
|
231
|
+
| <Req 2 한 줄> | #2 (end-to-end) |
|
|
232
|
+
| <Req 3 한 줄> | #5 |
|
|
233
|
+
```
|
|
211
234
|
|
|
212
235
|
### 2.6 Result 기록 (`/task-dev`, `/task-test` 끝)
|
|
213
236
|
|
|
@@ -614,3 +637,4 @@ draft → planned → developing → developed → testing → tested → closed
|
|
|
614
637
|
| 2026-05-08 | §1.5 추가 — task 파일/폴더/부속 자료 위치 단일 진실 소스. spec-diffs/screenshots는 vX.X 공통 통일. closed-immutable hook 보호 범위는 task.md 본 파일만 (스킬 본문 간 위치 모순 통일) |
|
|
615
638
|
| 2026-05-09 | 표현 정제 — 인명 / 경박 표현 / 스킬 용어 / 이전 버전 비교 단락 정리 |
|
|
616
639
|
| 2026-05-30 | stash FRICTION_LOG 기반 정합 — §1.5 mockup 행 추가 (vX.X 공통, 단일 진실 소스 MOCKUP_RULE) + §2.5 Test Plan 본질 재정의 (실질 동작 시나리오 + `[AUTO]` / `[USER]` 분류 강제 + 카탈로그 7방식 + UX/UI 영역 분리 매트릭스 + 시각 fix 사이클 사전 예고 + 검증 / 테스트 명령 두 섹션 참조) + §4.5 / §5 완성 예시 3개 Test Plan 형식 갱신 (분류 표 + PASS 기준 명시. 기존 번호 매김 시나리오 + 검증 명령 나열은 옛 형식). (stash FRICTION_LOG #14+19 / #25 정합) |
|
|
640
|
+
| 2026-06-02 | 0.1.3 F5 정합 — §2.5 가이드라인 안티패턴 3종 추가 (grep/Read-only 보조용 / 요구사항당 end-to-end 1개 이상 / 무거운 검증 회피 금지) + 요구사항 ↔ 시나리오 커버리지 점검 단계 신설 (stash FRICTION_LOG 2026-06-01 Test Plan 동어반복 + 누락 마찰 반영) |
|
package/template/CLAUDE.md
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
1. **범위 준수** — 사용자가 명시한 범위/행동만 수행. 명시 외 자체 진입 영구 금지. 예: 사용자가 *"X부터 Y까지"* 지시 → Y 끝에서 정지 + 상태 보고 + 다음 단계 명시 호출 대기.
|
|
25
25
|
2. **Skill 정식 발동** — task 단계는 반드시 Skill 도구로 정식 호출. 가이드 본문을 머릿속 절차로 대체 금지 (컴팩트 세션 / 시스템 리마인더 인지 상태에서도 동일).
|
|
26
26
|
3. **워크트리 자가 진단** — 세션 시작 시 현재 cwd가 *메인 워크트리*인지 *태스크 워크트리*인지 자가 판단 (`git rev-parse --show-toplevel` + `~/.taskery/worktrees/` 경로 비교). 태스크 워크트리면 *해당 진행중 태스크 컨텍스트*로 진입, 메인 워크트리면 *새 태스크 / 진행중 목록 인터뷰* 흐름.
|
|
27
|
+
4. **모호 발화 자의 해석 금지** — *"워크트리 없이"* / *"메인에서"* / *"이 자리에서 그냥"* 류로 읽히는 발화 = 코어 규칙(메인 워크트리 = dev 전용) 충돌 신호. 즉시 정지 + 규칙 한 줄 명시 + 1줄 confirm 요청. 자의 해석 후 진행 영구 금지. 사용자 의도가 *오타/모호*일 가능성을 *워크트리 사용*으로 읽는 게 자연스러움.
|
|
27
28
|
|
|
28
29
|
---
|
|
29
30
|
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
|
|
32
33
|
> 멀티세션 = 같은 프로젝트에서 *여러 메인 세션이 독립 태스크를 병렬*로 진행. git worktree로 작업 폴더 격리, dev 머지 시 직렬화.
|
|
33
34
|
|
|
34
|
-
- **메인 워크트리 = dev 전용**: 메인 워크트리는 항상 `dev` 체크아웃 상태. 모든 태스크 작업은 별도 워크트리에서 수행.
|
|
35
|
+
- **메인 워크트리 = dev 전용**: 메인 워크트리는 항상 `dev` 체크아웃 상태. 모든 태스크 작업은 *예외 없이* 별도 워크트리에서 수행. 메인 워크트리 HEAD를 dev에서 떼는 어떤 작업(`git checkout <task-branch>` / `git switch <task-branch>` / `git reset` HEAD 이동 / `git rebase` HEAD 이동 등)도 영구 금지. *"잠깐만 메인에서"* / *"테스트 한 번만 메인에서"* 같은 예외 발화도 거부 — 별도 워크트리에서 처리.
|
|
35
36
|
- **워크트리 위치**: `~/.taskery/worktrees/<projectId>/TASK-NNN_<출처>_<슬러그>/`
|
|
36
37
|
- `<projectId>`: `.taskery-manifest.json` `projectId` (8자 hex)
|
|
37
38
|
- `<출처>`: `BL-NNN` / `RM-NNN` / `DR`
|