@angar2/taskery 0.1.1 → 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 +44 -7
- package/bin/init.js +45 -2
- package/bin/lib.js +396 -2
- 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/plan-init/SKILL.md +27 -4
- package/template/.claude/skills/project-init/SKILL.md +32 -5
- package/template/.claude/skills/task-close/SKILL.md +269 -112
- package/template/.claude/skills/task-dev/SKILL.md +53 -8
- package/template/.claude/skills/task-init/SKILL.md +190 -50
- package/template/.claude/skills/task-plan/SKILL.md +114 -18
- package/template/.claude/skills/task-test/SKILL.md +59 -18
- 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 +72 -7
- package/template/.claude/hooks/pre-commit-verify.sh +0 -97
|
@@ -66,7 +66,11 @@ plan 버전(vX.X)마다 호출. `.project/plans/<vX.X>/` 안에 9 기획 문서
|
|
|
66
66
|
- **ARCHITECTURE.md**: 시스템 구조 (멀티 리포 / 레이어드 / 마이크로서비스 등)
|
|
67
67
|
- **DATA-MODEL.md** (해당 시): 주요 엔티티 + 관계
|
|
68
68
|
- **API-SPEC.md**: 엔드포인트 목록 + 인증 방식
|
|
69
|
-
- **ROADMAP.md**: 마일스톤 + 시기 +
|
|
69
|
+
- **ROADMAP.md**: 마일스톤 + 시기 + 우선순위. *ROADMAP 작성 4룰* (stash FRICTION_LOG #1 반영):
|
|
70
|
+
1. ROADMAP은 *현재 버전 한정* — 미래 버전 후보는 별도 `BACKLOG.md` (글로벌) 분리
|
|
71
|
+
2. 진행 순서에 task 번호(TASK-NNN) 강제 금지 — *Stage(영역) 단위*로만 명시 (예측 불가 task 합류 시 번호 어긋남 방지)
|
|
72
|
+
3. Stage 안 *작업 단위 명시* 필요 (한 task 분량 권장 — 다음 task 진행 시 메인 세션이 ROADMAP 보고 작업 범위 판단 가능)
|
|
73
|
+
4. 작업 단위에 task 번호 컬럼 추가 X / *상태 컬럼만* (⏳ 대기 / 🔧 진행 중 / ✅ 완료 / ❌ 폐기) — Living document
|
|
70
74
|
4. 받은 답 기반으로 각 문서 작성.
|
|
71
75
|
5. 마지막에 **PLAN.md** 작성 — 9 문서 인덱스 + 체크리스트.
|
|
72
76
|
6. **`.project/AGENT-GUIDE.md`의 활성 plan 버전 vX.X로 갱신** (신규도 동일 — 분기 2와 일관).
|
|
@@ -84,7 +88,26 @@ plan 버전(vX.X)마다 호출. `.project/plans/<vX.X>/` 안에 9 기획 문서
|
|
|
84
88
|
### Step 5 — `tasks/<vX.X>/` 디렉토리 준비
|
|
85
89
|
|
|
86
90
|
1. `.project/tasks/<vX.X>/` 디렉토리 생성 (빈 폴더).
|
|
87
|
-
2. `.project/tasks/<vX.X>/spec-diffs/`, `.project/tasks/<vX.X>/screenshots/` 빈 폴더 미리 생성.
|
|
91
|
+
2. `.project/tasks/<vX.X>/spec-diffs/`, `.project/tasks/<vX.X>/screenshots/`, `.project/tasks/<vX.X>/mockup/` 빈 폴더 미리 생성.
|
|
92
|
+
3. `.project/tasks/<vX.X>/BACKLOG.md` 빈 골격 Write (stash FRICTION_LOG #17 반영) — *버전별 task 후보 누적용*, 글로벌 `.project/BACKLOG.md`와 별개:
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
# BACKLOG — <vX.X>
|
|
96
|
+
|
|
97
|
+
> 본 파일은 *<vX.X> plan 진행 중 누적되는 후속 task 후보* 추적용.
|
|
98
|
+
> 글로벌 `.project/BACKLOG.md` (plan 기획 후보 카탈로그) 와 별개.
|
|
99
|
+
|
|
100
|
+
| 위치 | 영역 | 역할 |
|
|
101
|
+
|------|------|------|
|
|
102
|
+
| `.project/BACKLOG.md` (글로벌) | plan 기획 후보 카탈로그 (다음 plan 버전에서 검토) | Living document |
|
|
103
|
+
| `.project/tasks/<vX.X>/BACKLOG.md` (본 파일) | 현재 plan 진행 중 누적된 후속 task 후보 | 한 버전 내 task close 직후 후보 누적 |
|
|
104
|
+
|
|
105
|
+
## 후속 task 후보
|
|
106
|
+
|
|
107
|
+
(사용자 발화 또는 task-close 직후 메인 감지로 한 행씩 추가. 빈 상태 default.)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
빈 골격만 작성. 본문은 task 진행하면서 사용자 발화 또는 메인 감지로 누적.
|
|
88
111
|
|
|
89
112
|
### Step 6 — `PLAN.md` 작성/갱신
|
|
90
113
|
|
|
@@ -119,12 +142,12 @@ plan 버전(vX.X)마다 호출. `.project/plans/<vX.X>/` 안에 9 기획 문서
|
|
|
119
142
|
**결과 commit 흐름** (GIT_RULE 정합):
|
|
120
143
|
- dev 직접 commit *금지* (git-guard.sh 차단). 두 가지 default 흐름:
|
|
121
144
|
1. **첫 task에 묶기 (권장)**: 분기 1(신규)에서 `/project-init` 직후 본 스킬 호출이면 `/project-init` 산출물과 같은 작업 브랜치(보통 TASK-001 부트스트랩 chore)에 함께 commit. 분기 2(이어가기)면 새 task 브랜치 또는 임시 docs 브랜치에서.
|
|
122
|
-
2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_plan-{vX.X}` 후 commit → dev에 `--no-ff` 머지. 다음 task 생성 *전*에 plan 산출물을 깔끔히
|
|
145
|
+
2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_plan-{vX.X}` 후 commit → dev에 `--no-ff` 머지. 다음 task 생성 *전*에 plan 산출물을 깔끔히 기록하고 싶을 때.
|
|
123
146
|
|
|
124
147
|
## 도구 가이드
|
|
125
148
|
|
|
126
149
|
- **Read**: PROJECT.md / 기존 plans/vY.Y/ 정독
|
|
127
|
-
- **Bash**: `ls .project/plans/`, `cp -r plans/vY.Y plans/vX.X`, `mkdir -p plans/<vX.X> tasks/<vX.X>/{spec-diffs,screenshots}`
|
|
150
|
+
- **Bash**: `ls .project/plans/`, `cp -r plans/vY.Y plans/vX.X`, `mkdir -p plans/<vX.X> tasks/<vX.X>/{spec-diffs,screenshots,mockup}`
|
|
128
151
|
- **Write/Edit**: 9 기획 문서 작성/갱신
|
|
129
152
|
- **AskUserQuestion**: 9 문서별 핵심 질문 + 변경 인터뷰
|
|
130
153
|
|
|
@@ -92,7 +92,9 @@ taskery 도입 직후 **1회성**으로 호출. 사용자 또는 동료가 새
|
|
|
92
92
|
1. `CLAUDE.md` — 프로젝트 메타 + 검증 명령 + 룰 참조
|
|
93
93
|
2. `.project/PROJECT.md` — 프로젝트 개요
|
|
94
94
|
3. `.project/plans/<활성버전>/PLAN.md` — 활성 plan 진입 (이게 9 기획 문서 인덱스)
|
|
95
|
-
4. `.project/
|
|
95
|
+
4. `.project/GLOSSARY.md` — 도메인 용어집 (영문/한글 표기 일관성 단일 진실 소스)
|
|
96
|
+
5. `.project/tasks/<활성버전>/BACKLOG.md` — 현재 plan 진행 중 누적된 후속 task 후보 (사용자 발화 *"이건 다음 task로"* / task-close 직후 메인 감지로 추가)
|
|
97
|
+
6. `.project/AGENT-GUIDE.md` — 본 파일 (그대로)
|
|
96
98
|
|
|
97
99
|
## 작업 흐름
|
|
98
100
|
- task 시작: `/task-init` 또는 `/task-plan`
|
|
@@ -100,7 +102,7 @@ taskery 도입 직후 **1회성**으로 호출. 사용자 또는 동료가 새
|
|
|
100
102
|
- 불편 등록: `/log-friction` (사용자 호출 / 발화 캐치 / task-close 자체 감지)
|
|
101
103
|
|
|
102
104
|
## 폴더 구조
|
|
103
|
-
- `.project/rules/` — 코어 룰 (TASK_DOC_RULE / GIT_RULE)
|
|
105
|
+
- `.project/rules/` — 코어 룰 (TASK_DOC_RULE / GIT_RULE / CHANGELOG_RULE / MOCKUP_RULE)
|
|
104
106
|
- `.project/plans/<vX.X>/` — 9 기획 문서
|
|
105
107
|
- `.project/tasks/<vX.X>/` — task 문서
|
|
106
108
|
- `.project/flows/` — 도메인 흐름
|
|
@@ -113,8 +115,33 @@ taskery 도입 직후 **1회성**으로 호출. 사용자 또는 동료가 새
|
|
|
113
115
|
멀티 리포면 "LINKED-REPOS.md 참조">
|
|
114
116
|
```
|
|
115
117
|
|
|
118
|
+
### Step 4.5 — `.project/GLOSSARY.md` 작성 (도메인 용어집)
|
|
119
|
+
|
|
120
|
+
stash FRICTION_LOG #3 반영 — 프로젝트 도메인 용어를 *영문/한글 표기 일관성* 단일 진실 소스로 모음. 코드 메서드명·변수명 / 대화·문서 한글 표기 통일.
|
|
121
|
+
|
|
122
|
+
```markdown
|
|
123
|
+
# GLOSSARY — <프로젝트명>
|
|
124
|
+
|
|
125
|
+
> 본 프로젝트에서 사용하는 도메인 용어집. 코드 식별자 / 문서 / 대화 모두 본 표 기준.
|
|
126
|
+
> 새 용어 추가 시 영문 알파벳 순 정렬 유지.
|
|
127
|
+
|
|
128
|
+
| 영문 | 한글 | 정의 | 출처 |
|
|
129
|
+
|------|------|------|------|
|
|
130
|
+
| | | | |
|
|
131
|
+
|
|
132
|
+
## 운용 룰
|
|
133
|
+
|
|
134
|
+
- 영문 알파벳 순 정렬
|
|
135
|
+
- 출처: 본 용어가 도입된 task/plan 문서 경로 (예: `plans/v1.0/FEATURES.md`)
|
|
136
|
+
- 동의어 / 변형 표기 발견 시 본 표 기준으로 정합
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
빈 표만 작성. 본문은 plan/task 진행하면서 사용자가 채움.
|
|
140
|
+
|
|
116
141
|
### Step 5 — `.project/LINKED-REPOS.md` 작성
|
|
117
142
|
|
|
143
|
+
멀티리포 구성 명세. 단일 리포면 빈 템플릿만, 멀티 리포면 연결 리포 목록까지.
|
|
144
|
+
|
|
118
145
|
```markdown
|
|
119
146
|
# LINKED-REPOS.md
|
|
120
147
|
|
|
@@ -153,7 +180,7 @@ taskery 도입 직후 **1회성**으로 호출. 사용자 또는 동료가 새
|
|
|
153
180
|
- `.project/tasks/` (`.gitkeep` — `/task-init`이 `vX.X/<NNN>_<slug>.md` 작성)
|
|
154
181
|
- `.project/shared/{sent,received}/completed/` (`.gitkeep`)
|
|
155
182
|
- `.project/FRICTION_LOG.md` (빈 템플릿)
|
|
156
|
-
- `.project/rules/{TASK_DOC_RULE,GIT_RULE}.md` (코어 룰)
|
|
183
|
+
- `.project/rules/{TASK_DOC_RULE,GIT_RULE,CHANGELOG_RULE,MOCKUP_RULE}.md` (코어 룰)
|
|
157
184
|
|
|
158
185
|
→ `/project-init`은 폴더 생성 X. 누락 시(`init` 안 거치고 수동 셋업한 경우)에만 `mkdir -p` 실행.
|
|
159
186
|
|
|
@@ -193,12 +220,12 @@ git branch -a # main(또는 master) + dev
|
|
|
193
220
|
### Step 8 — 결과 보고
|
|
194
221
|
|
|
195
222
|
작성된 파일 목록 + 다음 단계 안내:
|
|
196
|
-
- *"PROJECT.md / AGENT-GUIDE.md / LINKED-REPOS.md / .env 생성. (FRICTION_LOG.md / 빈 골격 폴더는 npx init이 이미 카피한 것 그대로). **빈 폴더 케이스라 git init + dev 분기까지 완료** (이미 git 리포면 건너뜀). 다음은 `/plan-init <버전명>`으로 9 기획 문서 작성."*
|
|
223
|
+
- *"PROJECT.md / AGENT-GUIDE.md / LINKED-REPOS.md / GLOSSARY.md / .env 생성. (FRICTION_LOG.md / 빈 골격 폴더는 npx init이 이미 카피한 것 그대로). **빈 폴더 케이스라 git init + dev 분기까지 완료** (이미 git 리포면 건너뜀). 다음은 `/plan-init <버전명>`으로 9 기획 문서 작성."*
|
|
197
224
|
|
|
198
225
|
**결과 commit 흐름** (GIT_RULE 정합):
|
|
199
226
|
- dev 직접 commit *금지* (git-guard.sh 차단). 두 가지 default 흐름:
|
|
200
227
|
1. **첫 task에 묶기 (권장)**: `/plan-init` 끝나고 첫 `/task-init` (보통 TASK-001 부트스트랩 chore)으로 만든 작업 브랜치에서 init 산출물(PROJECT/AGENT-GUIDE/LINKED-REPOS/.env)도 함께 commit. task-close 단계의 "태스크 문서 커밋"에 자연스럽게 묶임.
|
|
201
|
-
2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_init-bootstrap` 후 commit → dev에 `--no-ff` 머지. 첫 task 생성 *전*에 init 결과를 깔끔히
|
|
228
|
+
2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_init-bootstrap` 후 commit → dev에 `--no-ff` 머지. 첫 task 생성 *전*에 init 결과를 깔끔히 기록하고 싶을 때.
|
|
202
229
|
|
|
203
230
|
## 도구 가이드
|
|
204
231
|
|
|
@@ -1,189 +1,338 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-close
|
|
3
|
-
description: task git 마무리 — 검증
|
|
3
|
+
description: task git 마무리 — 검증 게이트 + 커밋 순서 + 머지 락 직렬화 + dev --no-ff 병합 + 워크트리/브랜치 자동 정리, tested → closed (멀티세션 0.1.2+)
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /task-close
|
|
7
7
|
|
|
8
8
|
## 개요
|
|
9
9
|
|
|
10
|
-
`tested` 상태 task의 git 마무리.
|
|
10
|
+
`tested` 상태 task의 git 마무리. **워크트리에서 호출** 권장. 사전 rebase → 충돌 해결 (3단계 에스컬레이션) → 머지 락 → 락 안 재 rebase → dev `--no-ff` 머지 → 워크트리 제거 + 작업 브랜치 자동 삭제.
|
|
11
11
|
|
|
12
|
-
**최종 게이트**: 모든 검증 명령 재실행 —
|
|
12
|
+
**최종 게이트**: 모든 검증 명령 재실행 — 린트/타입체크/빌드 PASS여야 진행.
|
|
13
13
|
|
|
14
14
|
## 호출 시점
|
|
15
15
|
|
|
16
16
|
- `/task-test` PASS 후 + 사용자 OK.
|
|
17
17
|
- `/task-test` FAIL 후 사용자 *"OK 마무리"* (알려진 결함 명시 채로).
|
|
18
18
|
|
|
19
|
+
## 호출 위치 정책
|
|
20
|
+
|
|
21
|
+
- **워크트리에서 호출 권장** (CWD = 워크트리 폴더).
|
|
22
|
+
- **메인 워크트리에서 호출 시** → 진행중 태스크 목록 인터뷰 + 사용자 선택 → 해당 워크트리 컨텍스트로 진행.
|
|
23
|
+
|
|
19
24
|
## 입력 처리
|
|
20
25
|
|
|
21
26
|
인자 = (선택) `TASK-NNN` 또는 자동 선택.
|
|
22
27
|
|
|
23
28
|
분기:
|
|
24
|
-
- **인자 명시**: 해당 task
|
|
25
|
-
- **인자 없음**:
|
|
29
|
+
- **인자 명시**: 해당 task.
|
|
30
|
+
- **인자 없음**: 워크트리에서 호출 시 *그 워크트리의 태스크* 자동 / 메인에서 호출 시 *상태=tested 가장 최근 task* 인터뷰.
|
|
31
|
+
|
|
32
|
+
## 핵심 변수
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
36
|
+
WT_PATH=$(pwd) # 워크트리에서 호출됐다고 가정 (메인 호출 시 사용자 선택 결과)
|
|
37
|
+
PROJECT_ID=$(jq -r '.projectId' "$MAIN_WT/.taskery-manifest.json")
|
|
38
|
+
BRANCH=$(git -C "$WT_PATH" rev-parse --abbrev-ref HEAD)
|
|
39
|
+
LOCK_TIMEOUT_MS=$(jq -r '.lock_timeout_ms // 30000' "$MAIN_WT/.taskery-manifest.json")
|
|
40
|
+
LOCK_FILE="$HOME/.taskery/${PROJECT_ID}.merge.lock"
|
|
41
|
+
```
|
|
26
42
|
|
|
27
43
|
## 단계
|
|
28
44
|
|
|
29
|
-
### Step 1 —
|
|
45
|
+
### Step 1 — 사전 검증
|
|
30
46
|
|
|
31
|
-
1.
|
|
32
|
-
2.
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
1. **메인 워크트리 검출** (위 핵심 변수).
|
|
48
|
+
2. **메인 워크트리 = dev 검증**:
|
|
49
|
+
```sh
|
|
50
|
+
CURRENT=$(git -C "$MAIN_WT" rev-parse --abbrev-ref HEAD)
|
|
51
|
+
[ "$CURRENT" = "dev" ] || abort "메인 워크트리가 dev 아님 (현재: $CURRENT). taskery 정책 위배"
|
|
52
|
+
```
|
|
53
|
+
3. **워크트리 미커밋 변경 확인**:
|
|
54
|
+
```sh
|
|
55
|
+
git -C "$WT_PATH" status --porcelain
|
|
56
|
+
```
|
|
57
|
+
- 결과 *있음* = 정상 흐름 (taskery 정책: `/task-dev` = *git 작업 X*). 본 변경분은 Step 6-3에서 *task-close가 자동 Phase 커밋 생성*으로 처리.
|
|
58
|
+
- 결과 *없음* = 변경분 0건 → Step 2 검증만 수행 후 Step 6-3 자동 커밋 단계 자연 스킵 (빈 커밋 X).
|
|
59
|
+
- **차단 X** — 본 단계는 *상태 인지*용. close 중단 사유 X.
|
|
60
|
+
4. **task 파일 + GIT_RULE 확인**:
|
|
61
|
+
- task 문서 위치 분기 (`.gitignore` 케이스):
|
|
62
|
+
```sh
|
|
63
|
+
git -C "$MAIN_WT" check-ignore -q "$MAIN_WT/.project/dummy"
|
|
64
|
+
```
|
|
65
|
+
- exit 0 (등록됨): `$MAIN_WT/.project/tasks/<vX.X>/...` (단일 소스)
|
|
66
|
+
- exit 1 (미등록): `$WT_PATH/.project/tasks/<vX.X>/...` (워크트리 안)
|
|
67
|
+
- 상태 = `tested` 검증. 그 외면 종료 (단 알려진 결함 *"OK 마무리"*는 status=tested로 명시되어 있어야 함).
|
|
68
|
+
- GIT_RULE Read 우선순위:
|
|
69
|
+
- `$MAIN_WT/.project/rules/GIT_RULE.md` (프로젝트별 — 우선)
|
|
70
|
+
- `~/.claude/rules/GIT_RULE.md` (글로벌)
|
|
71
|
+
둘 다 없으면 종료 + *"GIT_RULE 누락"* 보고.
|
|
40
72
|
|
|
41
73
|
### Step 2 — 최종 검증 명령 재실행 (게이트)
|
|
42
74
|
|
|
43
|
-
|
|
75
|
+
`$MAIN_WT/CLAUDE.md`의 `## 검증 명령` (빌드/린트/타입체크) 만 재실행. **하나라도 FAIL이면 close 차단**.
|
|
44
76
|
|
|
45
77
|
| 명령 | 결과 |
|
|
46
78
|
|------|------|
|
|
47
79
|
| 린트 | exit 0 + 에러 0 |
|
|
48
80
|
| 타입체크 | exit 0 |
|
|
49
81
|
| 빌드 | exit 0 |
|
|
50
|
-
|
|
82
|
+
|
|
83
|
+
> 테스트 명령은 본 게이트에서 실행 X. `/task-test` 격리 세션이 단일 시점 (stash FRICTION_LOG #25).
|
|
84
|
+
|
|
85
|
+
> **검증 명령 실행 위치**: 워크트리(`$WT_PATH`)에서. 코드 변경은 워크트리 안에 있으므로 검증 대상도 거기.
|
|
51
86
|
|
|
52
87
|
FAIL 시:
|
|
53
88
|
- 사용자에게 보고 — *"검증 명령 X가 FAIL. 어떻게 할까?"*
|
|
54
89
|
- 분기:
|
|
55
|
-
- *"고쳐"* → status
|
|
90
|
+
- *"고쳐"* → status `developing`으로 되돌림 + `/task-dev` 안내 + close 중단.
|
|
56
91
|
- *"OK 마무리"* → 결함 명시한 채 진행 (Result 섹션에 *"검증 명령 X FAIL 알려진 결함 — 사유: ..."* 추가).
|
|
57
92
|
|
|
58
|
-
|
|
93
|
+
### Step 3 — 사전 rebase (락 외, UX용 조기 충돌 감지)
|
|
59
94
|
|
|
60
|
-
|
|
95
|
+
```sh
|
|
96
|
+
git -C "$WT_PATH" rebase dev
|
|
97
|
+
```
|
|
61
98
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- **현재 브랜치 = `{타입}/{개발자}_TASK-<NNN>_<slug>`** → 그대로 진행.
|
|
65
|
-
- **현재 브랜치 = `dev`** (또는 다른 곳) → 새 작업 브랜치 생성:
|
|
66
|
-
```
|
|
67
|
-
git checkout -b {타입}/{개발자}_TASK-<NNN>_<slug>
|
|
68
|
-
```
|
|
69
|
-
- **타입**: feature → `feature`, bug → `bug`, improvement → `improve`, refactor → `refactor`, docs → `docs`, chore → `chore`
|
|
70
|
-
- **개발자**: 메인 세션 = `claude`, 사용자 세션 = `angar2` 등 (실제 작업자)
|
|
71
|
-
- **slug**: task 파일명에서 그대로
|
|
72
|
-
- 예: `feature/claude_TASK-007_login-feature`
|
|
73
|
-
3. 작업 브랜치 진입 후 *변경분이 미리 stage* 되어 있어야 함. dev에서 작업했다면 이미 working tree에 변경분 있음 — 그대로 새 브랜치 진입 후 staging.
|
|
74
|
-
4. **작업 브랜치 생성과 staging/commit은 별도 Bash 호출로 분리**. `git checkout -b ... && git add ... && git commit ...` 같이 `&&`로 묶으면 git-guard.sh가 *명령 텍스트 분석 시점*에 dev 브랜치로 판정해 commit을 차단함 (분리하면 정상 통과). 묶음 명령 default X.
|
|
99
|
+
- 충돌 없음 → Step 6으로 (커밋 순서).
|
|
100
|
+
- 충돌 있음 → Step 4 (3단계 에스컬레이션).
|
|
75
101
|
|
|
76
|
-
### Step 4 —
|
|
102
|
+
### Step 4 — 충돌 자체 해결 (3단계 에스컬레이션)
|
|
77
103
|
|
|
78
|
-
|
|
104
|
+
#### 4-a. 단순 충돌 → 자동 해결
|
|
79
105
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- 메시지 형식 (GIT_RULE.md):
|
|
83
|
-
```
|
|
84
|
-
{태그}: [TASK-<NNN>] Phase <N> - <작업 요약>
|
|
106
|
+
- 공백 / 의미 같은 코드 차이 / 주석 / 명백한 add-add
|
|
107
|
+
- 자동 해결 후 `git -C "$WT_PATH" rebase --continue`
|
|
85
108
|
|
|
86
|
-
|
|
87
|
-
- <처리 내용 2>
|
|
88
|
-
- 사유: <변경 이유>
|
|
89
|
-
```
|
|
90
|
-
- 태그: feature → `feat:`, bug → `fix:`, improvement → `improve:`, refactor → `refactor:`, docs/chore → `docs:`, 테스트 파일 → `test:`
|
|
91
|
-
2. **flows/ 모듈 커밋 (해당 시)** — `.project/flows/<module>.md` 변경분 있으면 별도 커밋:
|
|
92
|
-
```
|
|
93
|
-
docs: [TASK-<NNN>] flows/<module>.md 갱신
|
|
109
|
+
#### 4-b. 의미적 충돌 → 자료 분석
|
|
94
110
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
111
|
+
**자료 우선순위**:
|
|
112
|
+
|
|
113
|
+
| 순위 | 자료 | 위치 |
|
|
114
|
+
|------|------|------|
|
|
115
|
+
| 1 | 태스크 문서 + plan 문서 (양쪽 정독 후 의도 종합) | 태스크: `$MAIN_WT/.project/tasks/<vX.X>/...` (등록 케이스) / `~/.taskery/worktrees/<projectId>/TASK-...` 다른 워크트리 (미등록 케이스, SSoT 조회로 경로 산출). plan: `$MAIN_WT/.project/plans/<vX.X>/` (ROADMAP / FEATURES / ARCHITECTURE / TECH-STACK 등) |
|
|
116
|
+
| 2 | 커밋 메시지 | `git log dev --grep` (GIT_RULE 풍부 메시지) |
|
|
117
|
+
| 3 | diff | 변경 코드 자체 |
|
|
118
|
+
|
|
119
|
+
- 1순위 부재 시 2/3순위 자동 fallback + 사용자에게 *자료 한계* 보고
|
|
120
|
+
- 태스크 문서 = 본 task의 *세부 의도* / plan 문서 = *전체 의도* (Stage 순 / 의존 그래프 / 의도된 위치 분리). 충돌 영역의 *그림 전체*는 plan 문서가 더 명확한 경우 많음 (Stage 순서로 *먼저 머지된 쪽 다음 줄에 추가* 등)
|
|
121
|
+
- 정독 후 *의미 의도 추출* → 충돌 해결 → `git rebase --continue`
|
|
122
|
+
|
|
123
|
+
#### 4-c. 판단 불가 → 사용자 호출
|
|
124
|
+
|
|
125
|
+
- 해결 방향 후보 제시 + 사용자 결정 후 재개.
|
|
126
|
+
- 사용자가 중단 결정 시: `git -C "$WT_PATH" rebase --abort` 자동 + close 중단.
|
|
127
|
+
|
|
128
|
+
### Step 5 — 태스크 문서에 충돌 해결 내역 추가 (해당 시)
|
|
129
|
+
|
|
130
|
+
충돌 해결 1건이라도 발생했으면 task 문서에 기록.
|
|
131
|
+
|
|
132
|
+
`.gitignore` 케이스 분기:
|
|
133
|
+
|
|
134
|
+
| 케이스 | 위치 | 흐름 |
|
|
135
|
+
|--------|------|------|
|
|
136
|
+
| 미등록 | `$WT_PATH/.project/tasks/<vX.X>/...` | 워크트리 안 task 문서 수정 → Step 6 Phase 커밋에 *코드 + 문서 = 한 커밋*에 포함 |
|
|
137
|
+
| 등록 | `$MAIN_WT/.project/tasks/<vX.X>/...` | 워크트리 안 코드만 한 커밋 + 메인 워크트리 절대 경로 task 문서를 **proper-lockfile**로 별도 수정 (`bin/lib.js` `withMetaLock` — 머지 커밋 미포함, 메인 로컬 보존) |
|
|
138
|
+
|
|
139
|
+
기록 형식 (task.md Result 섹션 안):
|
|
140
|
+
```markdown
|
|
141
|
+
### 충돌 해결 (close 직전 rebase)
|
|
142
|
+
- 자료 우선순위: 태스크 문서 (다른 세션 TASK-XXX) / 커밋 메시지 / diff
|
|
143
|
+
- 자료 한계 보고: (있으면 명시)
|
|
144
|
+
- 해결 방향: <한 줄 요약>
|
|
145
|
+
- 영향 파일: <목록>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Step 6 — 머지 락 획득 + 락 안 재 rebase + 커밋 시퀀스
|
|
149
|
+
|
|
150
|
+
#### 6-1. 머지 락 획득
|
|
151
|
+
|
|
152
|
+
`bin/lib.js` `withMergeLock(projectId, fn, opts)` 호출. 내부 동작:
|
|
153
|
+
|
|
154
|
+
```js
|
|
155
|
+
// proper-lockfile
|
|
156
|
+
await lockfile.lock(LOCK_FILE, {
|
|
157
|
+
stale: LOCK_TIMEOUT_MS,
|
|
158
|
+
retries: { retries: 5, factor: 1, minTimeout: 1000, maxTimeout: 1000 },
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
재시도 모두 실패 시 → 사용자 보고 + 중단.
|
|
163
|
+
|
|
164
|
+
#### 6-2. 락 안에서 rebase 재실행
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
git -C "$WT_PATH" rebase dev
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
락 외 rebase 이후 *다른 세션이 dev 머지했을 수 있음* — 락 안 rebase로 흡수.
|
|
171
|
+
- 재충돌 발견 시 Step 4 에스컬레이션 재실행 + Step 5 문서 기록 재실행.
|
|
172
|
+
|
|
173
|
+
#### 6-3. Phase 기능 커밋 (Dev Plan 각 Phase마다 1개 — task-close가 자동 생성)
|
|
174
|
+
|
|
175
|
+
> **책임 영역**: taskery 정책상 `/task-dev` = *git 작업 X* (워크트리 코드만 수정). 본 단계가 *task-close가 uncommitted 변경분 정독 → task.md `## Dev Plan` Phase 진행 [x] 매핑 → Phase별 commit 자동 생성*하는 단일 진입점이다.
|
|
176
|
+
|
|
177
|
+
자동 생성 절차:
|
|
178
|
+
|
|
179
|
+
1. **uncommitted 변경분 정독**:
|
|
180
|
+
```sh
|
|
181
|
+
git -C "$WT_PATH" status --porcelain
|
|
182
|
+
git -C "$WT_PATH" diff --name-only
|
|
101
183
|
```
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
184
|
+
2. **task.md `## Dev Plan` 정독** — Phase별 `진행: [x]` + 파일 매핑 추출.
|
|
185
|
+
3. **Phase ↔ 변경 파일 매핑**:
|
|
186
|
+
- 한 Phase가 단독 파일 영역이면 → Phase별 1 커밋.
|
|
187
|
+
- 같은 파일이 여러 Phase에 걸쳐 있으면 → *단일 통합 커밋 1개*로 묶음 (Phase 번호 표기는 *Phase X+Y*).
|
|
188
|
+
- 매핑 모호 / Dev Plan 본문 추적 불가 시 → 사용자 호출 + 결정 (자동 진행 X).
|
|
189
|
+
- 메시지 형식 (GIT_RULE.md):
|
|
190
|
+
```
|
|
191
|
+
{태그}: [TASK-<NNN>] Phase <N> - <작업 요약>
|
|
192
|
+
|
|
193
|
+
- <처리 내용 1>
|
|
194
|
+
- <처리 내용 2>
|
|
195
|
+
- 사유: <변경 이유>
|
|
196
|
+
```
|
|
197
|
+
- 태그: feature → `feat:`, bug → `fix:`, improvement → `improve:`, refactor → `refactor:`, docs/chore → `docs:`, 테스트 → `test:`
|
|
198
|
+
|
|
199
|
+
> **GIT_RULE 풍부 메시지** — 본 메시지는 *충돌 해결 자료 2순위*로 쓰인다. 의도 한 줄 압축.
|
|
200
|
+
|
|
201
|
+
> **자동 분리 로직 코드 구현**은 본 SKILL.md 영역 외 — 메인 세션이 본 절차를 따라 *수동/대화형* 진행. 향후 `bin/lib.js`에 `splitUncommittedByPhase(wtPath, taskMd)` 영역 별도 라운드.
|
|
202
|
+
|
|
203
|
+
#### 6-4. flows/ 모듈 커밋 (해당 시)
|
|
204
|
+
|
|
205
|
+
`$WT_PATH/.project/flows/<module>.md` 변경분 있으면 별도 커밋:
|
|
206
|
+
```
|
|
207
|
+
docs: [TASK-<NNN>] flows/<module>.md 갱신
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
- **`.gitignore` 미등록 케이스 한정** — 등록 케이스는 *워크트리 외부* 메인 워크트리 직접 수정 + `withMetaLock`.
|
|
211
|
+
|
|
212
|
+
#### 6-5. task 파일 status → `closed` Edit
|
|
213
|
+
|
|
214
|
+
closed-immutable.sh hook *허용* 영역 (status=closed 적용된 *후* 재수정이 차단).
|
|
215
|
+
|
|
216
|
+
- **.gitignore 등록 케이스**: 메인 워크트리 task 문서를 `withMetaLock`으로 status=`closed` 갱신.
|
|
217
|
+
- **.gitignore 미등록 케이스**: 워크트리 안 task 문서를 Edit.
|
|
218
|
+
|
|
219
|
+
#### 6-6. 태스크 문서 커밋 (미등록 케이스 한정)
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
docs: [TASK-<NNN>] 태스크 문서 완료
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
- 대상: `$WT_PATH/.project/tasks/<vX.X>/<NNN>_<slug>.md` (단일) 또는 `.../TASK-<NNN>_<slug>/task.md` (폴더 승격) + spec-diffs / screenshots / mockup (vX.X 공통, TASK_DOC_RULE §1.5).
|
|
226
|
+
- **등록 케이스**: Step 6-5에서 메인 워크트리 직접 수정으로 처리 — 별도 커밋 X (워크트리 머지에 포함 X).
|
|
227
|
+
|
|
228
|
+
#### 6-7. CHANGELOG 커밋 (해당 시)
|
|
229
|
+
|
|
230
|
+
`$MAIN_WT/.project/rules/CHANGELOG_RULE.md` 정독 후 형식 / 위치 준수.
|
|
119
231
|
|
|
120
|
-
|
|
232
|
+
- 위치 분기:
|
|
233
|
+
- 미등록 — 워크트리 안 `$WT_PATH/.project/changelog/<YYYY-MM>.md` 갱신 + 커밋
|
|
234
|
+
- 등록 — `$MAIN_WT/.project/changelog/<YYYY-MM>.md` `withMetaLock` 갱신 (커밋 X)
|
|
235
|
+
- 본 task에서 변경분 없으면 본 단계 *완전히 스킵* (빈 commit 금지).
|
|
121
236
|
|
|
122
|
-
|
|
123
|
-
2. 일반 타입(feature/bug/improvement/refactor/docs/chore) → **`git merge --no-ff <작업 브랜치>` 강제** (fast-forward 절대 금지).
|
|
124
|
-
- `-m` 옵션 사용 금지 — 머지 커밋 메시지는 git 기본값 사용.
|
|
125
|
-
3. plan/roadmap 임시 docs 브랜치 예외 — 단일 커밋이라 `--ff-only` 가능 (일반 흐름에서는 거의 발생 X).
|
|
126
|
-
4. **작업 브랜치 자동 삭제 금지** — 사용자 명시 승인(*"브랜치 삭제해"*)이 있을 때만 `git branch -d`. 미승인 시 보존.
|
|
237
|
+
### Step 7 — 메인 워크트리 uncommitted 검증 (머지 직전)
|
|
127
238
|
|
|
128
|
-
|
|
239
|
+
```sh
|
|
240
|
+
git -C "$MAIN_WT" status --porcelain
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
- 변경 있으면 → 사용자 호출 + 결정 (stash / 중단).
|
|
244
|
+
- 등록 케이스에서 task 문서 직접 수정이 *.gitignore 차단으로 status에 안 잡힘* — 정상.
|
|
245
|
+
|
|
246
|
+
### Step 8 — dev 머지
|
|
247
|
+
|
|
248
|
+
```sh
|
|
249
|
+
git -C "$MAIN_WT" merge --no-ff "$BRANCH"
|
|
250
|
+
```
|
|
129
251
|
|
|
130
|
-
|
|
252
|
+
- `-m` 옵션 금지 (git 기본 메시지).
|
|
253
|
+
- 머지 커밋 해시 캡처: `MERGE_COMMIT=$(git -C "$MAIN_WT" rev-parse HEAD)`
|
|
131
254
|
|
|
132
|
-
|
|
255
|
+
### Step 9 — 머지 락 해제
|
|
133
256
|
|
|
134
|
-
|
|
135
|
-
1. Step 4-1: Phase 기능 커밋
|
|
136
|
-
2. Step 4-2: flows/ 커밋 (해당 시)
|
|
137
|
-
3. **task 파일 status를 `closed`로 Edit** (closed-immutable.sh hook 차단되지 X — 이 Edit은 *허용*. status가 closed가 *된 후 재수정*이 차단)
|
|
138
|
-
4. Step 4-3: 태스크 문서 커밋 (status=closed 적용된 채로)
|
|
139
|
-
5. Step 4-4: CHANGELOG 커밋
|
|
140
|
-
6. Step 5: dev 병합
|
|
141
|
-
7. Step 7: 마찰 신호 자체 감지 (`/log-friction` 발동 후보)
|
|
142
|
-
8. Step 8: 결과 보고
|
|
257
|
+
`withMergeLock` 콜백 종료 시 자동 release.
|
|
143
258
|
|
|
144
|
-
### Step
|
|
259
|
+
### Step 10 — 마찰 신호 자체 감지 (`/log-friction` 발동 후보)
|
|
145
260
|
|
|
146
|
-
본 task 진행 중 *마찰 신호* 누적 여부를
|
|
261
|
+
본 task 진행 중 *마찰 신호* 누적 여부를 검사. 감지 시 `/log-friction` 등록을 사용자에게 제안.
|
|
147
262
|
|
|
148
263
|
검사 항목:
|
|
149
|
-
- 동일 단계 재호출 ≥ 2회
|
|
264
|
+
- 동일 단계 재호출 ≥ 2회
|
|
150
265
|
- 실패 반복 (검증 명령 FAIL 2회 이상 / 격리 세션 FAIL 후 재구현 반복)
|
|
151
|
-
- 사용자 부정 반응 발화 누적
|
|
266
|
+
- 사용자 부정 반응 발화 누적
|
|
267
|
+
- **충돌 해결에서 *판단 불가 (4-c)* 1회 이상** — 멀티세션 자료 한계 신호
|
|
152
268
|
|
|
153
269
|
분기:
|
|
154
|
-
-
|
|
155
|
-
-
|
|
270
|
+
- 감지 신호 있음 → *"이번 task에서 X 부분이 마찰이었어 보여 — `/log-friction`으로 등록할까?"* OK 시 자동 발동.
|
|
271
|
+
- 없음 → prompt X.
|
|
272
|
+
|
|
273
|
+
### Step 11 — worktree remove 사전 검증
|
|
274
|
+
|
|
275
|
+
```sh
|
|
276
|
+
git -C "$WT_PATH" status --porcelain # unstaged
|
|
277
|
+
git -C "$WT_PATH" ls-files --others --exclude-standard # 추적 X 파일
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
- 발견 시 사용자 호출 + 결정:
|
|
281
|
+
- 보존 → Step 12, 13 모두 건너뜀 (브랜치도 보존 — 정합)
|
|
282
|
+
- 삭제 → Step 12 진행
|
|
283
|
+
- 취소 → close 중단 (dev 머지는 이미 완료)
|
|
284
|
+
|
|
285
|
+
### Step 12 — 워크트리 제거
|
|
156
286
|
|
|
157
|
-
|
|
287
|
+
```sh
|
|
288
|
+
git -C "$MAIN_WT" worktree remove "$WT_PATH"
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Step 13 — 브랜치 자동 삭제 / 보존
|
|
292
|
+
|
|
293
|
+
- **보존 키워드 감지** (`keep` / `--keep-branch` / `브랜치 남겨` / `브랜치 보존` / `브랜치 유지`) → 보존 + 워크트리도 보존 (Step 11~13 건너뛴 것과 정합).
|
|
294
|
+
- **그 외** → `git -C "$MAIN_WT" branch -d "$BRANCH"`
|
|
295
|
+
|
|
296
|
+
### Step 14 — 안전망 출력
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
삭제됨: $BRANCH
|
|
300
|
+
복구: git -C "$MAIN_WT" branch $BRANCH $MERGE_COMMIT
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Step 15 — 결과 보고
|
|
158
304
|
|
|
159
305
|
```
|
|
160
306
|
✅ TASK-<NNN> closed
|
|
161
|
-
- 작업 브랜치:
|
|
307
|
+
- 작업 브랜치: <BRANCH> (삭제 / 보존)
|
|
308
|
+
- 워크트리: <WT_PATH> (제거 / 보존)
|
|
162
309
|
- 커밋: Phase <N>개 + 태스크 문서 + (CHANGELOG)
|
|
163
|
-
- dev 병합: --no-ff 완료
|
|
310
|
+
- dev 병합: --no-ff 완료 ($MERGE_COMMIT)
|
|
311
|
+
- 충돌 해결: <건수, 자료 한계 보고 있으면 포함>
|
|
164
312
|
- 상태: tested → closed
|
|
165
|
-
-
|
|
166
|
-
- 다음: 새 task 시작은 /task-init. 본 task에서 마찰 신호 감지된 경우 /log-friction 등록 제안
|
|
313
|
+
- 다음: 새 task 시작은 /task-init. 마찰 신호 감지된 경우 /log-friction 등록 제안
|
|
167
314
|
```
|
|
168
315
|
|
|
169
316
|
## 도구 가이드
|
|
170
317
|
|
|
171
318
|
- **Read**: GIT_RULE / task 파일 / CLAUDE.md 검증 명령 정독
|
|
172
|
-
- **Bash**: git 명령 (`branch`, `
|
|
173
|
-
- **Edit**: task 파일
|
|
174
|
-
- **
|
|
319
|
+
- **Bash**: git 명령 (`branch`, `rebase`, `merge`, `worktree`) + 검증 명령 재실행. **유일하게 git 사용 허가된 스킬**
|
|
320
|
+
- **Edit / Write**: task 파일 갱신, CHANGELOG (메타 위치는 `.gitignore` 케이스에 따라)
|
|
321
|
+
- **bin/lib.js**: `withMergeLock` (머지 락) / `withMetaLock` (메타 파일 쓰기 락)
|
|
175
322
|
|
|
176
323
|
## 주의사항
|
|
177
324
|
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
- **
|
|
186
|
-
-
|
|
325
|
+
- **사용자 명시 호출 외 자체 진입 영구 금지** (stash FRICTION_LOG #6+10/#20) — task-close는 git 영역. 사용자가 *"X부터 Y까지"* 범위 명시했는데 Y가 close 이전 단계면 close 자체 진입 영구 X.
|
|
326
|
+
- **검증 명령 재실행 게이트** — `/task-dev` self-check와 *별개*. 환경 변화 / 부분 작업 잡는 안전망.
|
|
327
|
+
- **dev 직접 커밋 절대 X** — 워크트리에서만. dev에서 `git commit` 시도 시 git-guard.sh 차단.
|
|
328
|
+
- **`--no-ff` 강제** — 머지 커밋 없으면 분기 정보 영구 손실.
|
|
329
|
+
- **머지 락 직렬화** — 두 세션이 동시 머지 시도해도 한쪽씩 순차 진행. 락 외 rebase로 race 흡수 + 락 안 재 rebase로 다른 세션 머지 흡수.
|
|
330
|
+
- **충돌 자체 해결 3단계** — 단순 자동 / 의미적 자료 / 판단 불가 사용자. 자료 한계 발견 시 *반드시 사용자에게 보고* (1순위 자료 부재 등).
|
|
331
|
+
- **자료 한계 보고** — 충돌 분석 시 *2/3순위 fallback 사용했음*을 사용자에게 명시. 묵묵히 진행 X.
|
|
332
|
+
- **destructive 명령 사용자 승인 필수** — `git reset --hard` / `git push --force` / `git branch -D` / `git clean -fd` 사용자 명시 승인 없이 절대 실행 X. (단 `/task-close` 자동 흐름 `git branch -d` + `worktree remove`는 §"작업 브랜치 삭제 정책 — 자동 삭제 면제 조항" 면제)
|
|
333
|
+
- **민감 정보 staging X** — `.env` / `credentials.json` / API key 등 staging 절대 X.
|
|
334
|
+
- **빈 commit 금지** — CHANGELOG 변경 없으면 6-7 단계 스킵. `--allow-empty` 사용 금지.
|
|
335
|
+
- **`-m` 옵션 머지 커밋에 사용 금지** — git 기본 메시지 사용.
|
|
187
336
|
|
|
188
337
|
## 상태 전이
|
|
189
338
|
|
|
@@ -192,3 +341,11 @@ PASS 시 Step 3으로.
|
|
|
192
341
|
| `tested` | `closed` |
|
|
193
342
|
|
|
194
343
|
(검증 명령 FAIL + 사용자 *"고쳐"* → `developing`으로 되돌림. 본 스킬 자체는 거기서 중단.)
|
|
344
|
+
|
|
345
|
+
## 멀티세션 정합
|
|
346
|
+
|
|
347
|
+
- **머지 락** — `~/.taskery/<projectId>.merge.lock` 단일. 모든 세션 직렬화.
|
|
348
|
+
- **task 문서 단일 진실 소스** — `.gitignore` 케이스에 따라 메인 워크트리 또는 워크트리. 다른 세션의 충돌 해결 자료 정독 시 *SSoT 조회 → 워크트리 경로 산출* (미등록 케이스) 또는 *메인 워크트리 절대 경로* (등록 케이스).
|
|
349
|
+
- **워크트리 + 브랜치 자동 제거** — GIT_RULE.md "작업 브랜치 삭제 정책" 면제 조항 (taskery 한정). 보존 키워드 시 양쪽 보존.
|
|
350
|
+
- **safety net** — Step 14 복구 명령 출력. 사용자가 잘못 삭제 인지 시 즉시 복구 가능.
|
|
351
|
+
- **BACKLOG.md 무관** — `.project/tasks/<vX.X>/BACKLOG.md` 체크 마킹은 `/task-init` Step 7.5가 처리(`[ ]` → `[x]` + `- TASK: TASK-NNN`). `[x]` = *task로 옮김* 의미라 close 시점에 추가 마킹 X. 완료 추적은 `git log dev --grep 'BL-NNN'` + `npx @angar2/taskery status`.
|