@angar2/taskery 0.2.1 → 0.3.1

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.
@@ -59,7 +59,7 @@
59
59
 
60
60
  ## 백로그 (0.1.2+)
61
61
 
62
- > `.project/tasks/<vX.X>/BACKLOG.md` = *버전별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
62
+ > `.project/tasks/<NNN_slug>/BACKLOG.md` = *plan(기능 그룹)별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
63
63
 
64
64
  - **`/add-backlog`**: 사용자 *"~ 백로그에 추가"* 발화 → 얕은 분석(코드 탐색 X, 추정 수준) → BL-NNN 채번 → BACKLOG.md append (`[ ]` 대기).
65
65
  - **`/task-init` 연동**: 사용자 *"백로그의 BL-NNN 진행"* 발화 → 해당 항목 *확인 마킹*. `[ ]` → `[x]` + `- TASK: TASK-NNN` 추가 (다회 진행 시 콤마).
@@ -68,6 +68,7 @@
68
68
  - **머지 여부를 직접 알아야 할 경우에만** 아래 순서로 작업 완료 여부를 확인한다:
69
69
  1. `taskery status` 진행중 목록에 그 TASK가 **있으면** → 아직 진행 중(dev 미머지)이므로 `git log dev --grep`이 비는 것이 정상이다. 재조회하지 않는다.
70
70
  2. 목록에 **없으면** → `git log dev --grep 'BL-NNN'` + 브랜치명으로 작업 완료 여부를 확인한다.
71
+ - **글로벌 `.project/BACKLOG.md`** (다음 기능 그룹 후보 카탈로그) 는 본 흐름 무관 — `/plan-init` 영역.
71
72
 
72
73
  상세: `.agents/skills/add-backlog/SKILL.md`.
73
74
 
@@ -99,6 +100,8 @@
99
100
 
100
101
  > 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(``)은 사용 금지.
101
102
 
103
+ > **검증 방법 → `.project/TEST-GUIDE.md`** — 각 테스트 방식(데이터 조회 / API 호출 / E2E / 시각 실행)을 *이 프로젝트에서 실제로 어떻게 돌리나*는 거기 단일 소스. `/task-plan`이 채우고 `/task-test` 격리 세션이 읽는다.
104
+
102
105
  ---
103
106
 
104
107
  ## 검수 실행 명령 (해당 시 — 앱 실행·검수가 필요한 프로젝트)
@@ -129,14 +132,14 @@
129
132
 
130
133
  | 스킬 | 레벨 | 역할 |
131
134
  |------|------|------|
132
- | `/project-init` | project | PROJECT/AGENT-GUIDE/LINKED-REPOS/.env 골격 생성 (1회성) |
133
- | `/plan-init` | plan | `.project/plans/<vX.X>/` 안 기획 문서 작성 |
135
+ | `/project-init` | project | 진입 문서(PROJECT/AGENT-GUIDE/LINKED-REPOS/GLOSSARY/.env) + 제품 관통 문서(그룹 A 작성 / 그룹 B 골격, `.project/` 루트) 생성 (1회성) |
136
+ | `/plan-init` | plan | `.project/plans/<NNN_slug>/` PLAN/ROADMAP + 제품 관통 문서 FEATURES/UX-UI에 의도 추가 (plan = 기능 그룹 단위) |
134
137
  | `/task-init` | task | task.md 빈 골격 + status=draft |
135
138
  | `/task-plan` | task | Requirements/Scope/Dev Plan/Test Plan 작성 (draft → planned) |
136
139
  | `/task-dev` | task | Phase 순서 구현 + self-check (planned → developed) |
137
140
  | `/task-test` | task | task-tester 서브에이전트 격리 검증 (developed → tested) |
138
141
  | `/task-close` | task | 검증 명령 게이트 + 커밋 + dev 병합 (tested → closed) |
139
- | `/add-backlog` | meta | 사용자 발화로 버전별 BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
142
+ | `/add-backlog` | meta | 사용자 발화로 활성 plan BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
140
143
  | `/log-friction` | meta | FRICTION_LOG.md에 사용자 불편 한 행 기록 |
141
144
 
142
145
  본문은 `.agents/skills/<스킬>/SKILL.md` 참조.
@@ -169,7 +172,7 @@
169
172
 
170
173
  > taskery는 *plan/ ↔ template/ 자동 빌드 X*. 사용자가 직접 정합 유지.
171
174
 
172
- - **`.project/plans/<vX.X>/` 변경 시** → 관련 task의 `spec-diffs/` 갱신 (`/task-plan` Phase 0 흐름 — 진행 중 task 있으면)
175
+ - **`.project/` 루트 제품 관통 문서 변경 시** → 관련 task의 `spec-diffs/` 갱신 (`/task-plan` Phase 0 흐름 — 진행 중 task 있으면)
173
176
  - **`AGENTS.md` 검증 명령 변경 시** → 모든 스킬 + hook이 그대로 따름. 별도 동기화 불필요
174
177
  - **룰(`*.md` in `.project/rules/`) 변경 시** → 스킬 instruction이 다음 호출부터 변경 반영
175
178
  - **`*.local.md` 사용자 오버라이드** → `npx @angar2/taskery update`가 미터치. 코어 룰 갱신 시 `*.bak` 백업 후 사용자 confirm
@@ -190,5 +193,5 @@
190
193
 
191
194
  1. 본 파일(`AGENTS.md`) 정독 — 검증 명령 + 룰 위치 + 스킬 목록 파악
192
195
  2. `.project/AGENT-GUIDE.md` 정독 — 활성 plan 버전 + 폴더 구조 + 작업 흐름
193
- 3. `.project/plans/<활성버전>/PLAN.md` 정독 — 기획 문서 인덱스 + 진행 상태
196
+ 3. `.project/` 루트 제품 관통 문서(FEATURES / ARCHITECTURE 등) + `.project/plans/<활성 plan>/PLAN.md` 정독 — 활성 plan 인덱스 + 진행 상태
194
197
  4. 사용자 발화 받기 → 적절한 스킬 호출 또는 직접 작업
@@ -54,7 +54,7 @@
54
54
 
55
55
  ## 백로그 (0.1.2+)
56
56
 
57
- > `.project/tasks/<vX.X>/BACKLOG.md` = *버전별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
57
+ > `.project/tasks/<NNN_slug>/BACKLOG.md` = *plan(기능 그룹)별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
58
58
 
59
59
  - **`/add-backlog`**: 사용자 *"~ 백로그에 추가"* 발화 → 얕은 분석(코드 탐색 X, 추정 수준) → BL-NNN 채번 → BACKLOG.md append (`[ ]` 대기).
60
60
  - **`/task-init` 연동**: 사용자 *"백로그의 BL-NNN 진행"* 발화 → 해당 항목 *확인 마킹*. `[ ]` → `[x]` + `- TASK: TASK-NNN` 추가 (다회 진행 시 콤마).
@@ -63,7 +63,7 @@
63
63
  - **머지 여부를 직접 알아야 할 경우에만** 아래 순서로 작업 완료 여부를 확인한다:
64
64
  1. `taskery status` 진행중 목록에 그 TASK가 **있으면** → 아직 진행 중(dev 미머지)이므로 `git log dev --grep`이 비는 것이 정상이다. 재조회하지 않는다.
65
65
  2. 목록에 **없으면** → `git log dev --grep 'BL-NNN'` + 브랜치명으로 작업 완료 여부를 확인한다.
66
- - **글로벌 `.project/BACKLOG.md`** (plan 기획 후보 카탈로그) 는 본 흐름 무관 — `/plan-init` 영역.
66
+ - **글로벌 `.project/BACKLOG.md`** (다음 기능 그룹 후보 카탈로그) 는 본 흐름 무관 — `/plan-init` 영역.
67
67
 
68
68
  상세: `.claude/skills/add-backlog/SKILL.md`.
69
69
 
@@ -95,6 +95,8 @@
95
95
 
96
96
  > 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(\`\`)은 사용 금지.
97
97
 
98
+ > **검증 방법 → `.project/TEST-GUIDE.md`** — 각 테스트 방식(데이터 조회 / API 호출 / E2E / 시각 실행)을 *이 프로젝트에서 실제로 어떻게 돌리나*는 거기 단일 소스. `/task-plan`이 채우고 `/task-test` 격리 세션이 읽는다.
99
+
98
100
  ---
99
101
 
100
102
  ## 검수 실행 명령 (해당 시 — 앱 실행·검수가 필요한 프로젝트)
@@ -125,14 +127,14 @@
125
127
 
126
128
  | 스킬 | 레벨 | 역할 |
127
129
  |------|------|------|
128
- | `/project-init` | project | PROJECT/AGENT-GUIDE/LINKED-REPOS/.env 골격 생성 (1회성) |
129
- | `/plan-init` | plan | `.project/plans/<vX.X>/` 안 기획 문서 작성 |
130
+ | `/project-init` | project | 진입 문서(PROJECT/AGENT-GUIDE/LINKED-REPOS/GLOSSARY/.env) + 제품 관통 문서(그룹 A 작성 / 그룹 B 골격, `.project/` 루트) 생성 (1회성) |
131
+ | `/plan-init` | plan | `.project/plans/<NNN_slug>/` PLAN/ROADMAP + 제품 관통 문서 FEATURES/UX-UI에 의도 추가 (plan = 기능 그룹 단위) |
130
132
  | `/task-init` | task | task.md 빈 골격 + status=draft |
131
133
  | `/task-plan` | task | Requirements/Scope/Dev Plan/Test Plan 작성 (draft → planned) |
132
134
  | `/task-dev` | task | Phase 순서 구현 + self-check (planned → developed) |
133
135
  | `/task-test` | task | Task tool 격리 검증 (developed → tested) |
134
136
  | `/task-close` | task | 검증 명령 게이트 + 커밋 + dev 병합 (tested → closed) |
135
- | `/add-backlog` | meta | 사용자 발화로 버전별 BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
137
+ | `/add-backlog` | meta | 사용자 발화로 활성 plan BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
136
138
  | `/log-friction` | meta | FRICTION_LOG.md에 사용자 불편 한 행 기록 |
137
139
 
138
140
  본문은 `.claude/skills/<스킬>/SKILL.md` 참조.
@@ -163,7 +165,7 @@
163
165
 
164
166
  > taskery는 *plan/ ↔ template/ 자동 빌드 X*. 사용자가 직접 정합 유지.
165
167
 
166
- - **`.project/plans/<vX.X>/` 변경 시** → 관련 task의 `spec-diffs/` 갱신 (`/task-plan` Phase 0 흐름 — 진행 중 task 있으면)
168
+ - **`.project/` 루트 제품 관통 문서 변경 시** → 관련 task의 `spec-diffs/` 갱신 (`/task-plan` Phase 0 흐름 — 진행 중 task 있으면)
167
169
  - **`CLAUDE.md` 검증 명령 변경 시** → 모든 스킬 + hook이 그대로 따름. 별도 동기화 불필요
168
170
  - **룰(`*.md` in `.project/rules/`) 변경 시** → 스킬 instruction이 다음 호출부터 변경 반영
169
171
  - **`*.local.md` 사용자 오버라이드** → `npx @angar2/taskery update`가 미터치. 코어 룰 갱신 시 `*.bak` 백업 후 사용자 confirm
@@ -184,5 +186,5 @@
184
186
 
185
187
  1. 본 파일(`CLAUDE.md`) 정독 — 검증 명령 + 룰 위치 + 스킬 목록 파악
186
188
  2. `.project/AGENT-GUIDE.md` 정독 — 활성 plan 버전 + 폴더 구조 + 작업 흐름
187
- 3. `.project/plans/<활성버전>/PLAN.md` 정독 — 기획 문서 인덱스 + 진행 상태
189
+ 3. `.project/` 루트 제품 관통 문서(FEATURES / ARCHITECTURE 등) + `.project/plans/<활성 plan>/PLAN.md` 정독 — 활성 plan 인덱스 + 진행 상태
188
190
  4. 사용자 발화 받기 → 적절한 스킬 호출 또는 직접 작업
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: add-backlog
3
- description: 사용자 발화로 *버전별* tasks/<vX.X>/BACKLOG.md에 task 후보 1건 추가 — 얕은 분석(개요/대상 영역) + BL-NNN 채번 + withMetaLock 직렬화 (0.1.2+)
3
+ description: 사용자 발화로 *plan(기능 그룹)별* tasks/<NNN_slug>/BACKLOG.md에 task 후보 1건 추가 — 얕은 분석(개요/대상 영역) + BL-NNN 채번 + withMetaLock 직렬화 (0.1.2+)
4
4
  ---
5
5
 
6
6
  # /add-backlog
7
7
 
8
8
  ## 개요
9
9
 
10
- `/add-backlog`는 사용자 발화를 받아 *버전별 백로그* `.project/tasks/<vX.X>/BACKLOG.md`에 task 후보를 1건씩 누적한다. 멀티세션 환경에서 `withMetaLock`으로 동시 쓰기 직렬화. **얕은 분석**만 — 코드 직접 탐색 X, 추정 수준. 본격 분석은 다음 단계 `/task-plan`에서.
10
+ `/add-backlog`는 사용자 발화를 받아 *plan(기능 그룹)별 백로그* `.project/tasks/<NNN_slug>/BACKLOG.md`에 task 후보를 1건씩 누적한다. 멀티세션 환경에서 `withMetaLock`으로 동시 쓰기 직렬화. **얕은 분석**만 — 코드 직접 탐색 X, 추정 수준. 본격 분석은 다음 단계 `/task-plan`에서.
11
11
 
12
12
  글로벌 `.project/BACKLOG.md` (plan 기획 후보 카탈로그) 는 `/plan-init` 영역으로 본 스킬 무관.
13
13
 
@@ -30,8 +30,8 @@ description: 사용자 발화로 *버전별* tasks/<vX.X>/BACKLOG.md에 task 후
30
30
  MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
31
31
  ```
32
32
  - 메인 워크트리 dev 체크아웃 검증 — 위배 시 사용자 호출 + 중단
33
- - 활성 버전 검출 — `$MAIN_WT/.project/AGENT-GUIDE.md` `## 활성 plan 버전` 섹션 다음 비어 있지 않은 첫 줄에서 `vX.X` 패턴 추출
34
- - BACKLOG.md 경로 = `$MAIN_WT/.project/tasks/<vX.X>/BACKLOG.md`. 부재 시 사용자 호출: *"`/plan-init` 먼저 호출해 활성 버전 디렉토리 + 빈 BACKLOG.md 생성 필요"* + 중단
33
+ - 활성 plan 검출 — `$MAIN_WT/.project/AGENT-GUIDE.md` `## 활성 plan 버전` 섹션 다음 비어 있지 않은 첫 줄에서 활성 plan 식별자(첫 토큰 — `NNN_slug` 폴더명) 추출
34
+ - BACKLOG.md 경로 = `$MAIN_WT/.project/tasks/<NNN_slug>/BACKLOG.md`. 부재 시 사용자 호출: *"`/plan-init` 먼저 호출해 활성 plan 디렉토리 + 빈 BACKLOG.md 생성 필요"* + 중단
35
35
 
36
36
  ### Step 2 — 백로그 항목 후보 추출
37
37
 
@@ -82,7 +82,7 @@ const blNum = await lib.appendBacklogItem(MAIN_WT, {
82
82
  ### Step 6 — 결과 보고
83
83
 
84
84
  ```
85
- ✅ BL-<NNN> [<유형>] <제목> — <vX.X> 백로그 추가됐어.
85
+ ✅ BL-<NNN> [<유형>] <제목> — <NNN_slug> 백로그 추가됐어.
86
86
  - 개요: <개요>
87
87
  - 대상 영역: <대상 영역>
88
88
  - 슬러그: <slug>
@@ -92,7 +92,7 @@ const blNum = await lib.appendBacklogItem(MAIN_WT, {
92
92
  ## 도구 가이드
93
93
 
94
94
  - **Bash**: 메인 워크트리 검출 / dev 체크아웃 검증
95
- - **Read**: `$MAIN_WT/.project/AGENT-GUIDE.md` (활성 버전 검출) / 기존 BACKLOG.md 정독 (중복 / 유사 항목 사전 확인)
95
+ - **Read**: `$MAIN_WT/.project/AGENT-GUIDE.md` (활성 plan 검출) / 기존 BACKLOG.md 정독 (중복 / 유사 항목 사전 확인)
96
96
  - **bin/lib.js**: `getActiveVersion` / `getBacklogPath` / `appendBacklogItem` 호출
97
97
  - **AskUserQuestion**: 유형 모호 시 confirm — 한 번에 한 질문
98
98
 
@@ -101,9 +101,9 @@ const blNum = await lib.appendBacklogItem(MAIN_WT, {
101
101
  - **얕은 분석만** — 본 스킬에서 도메인 코드 Read · Grep 금지. 본격 분석은 `/task-plan`
102
102
  - **유형 자동 추정 + 모호 시 confirm** — *"메뉴 검색 개선"* 같이 feature/improve 모호 시 사용자 결정 받기
103
103
  - **메인 워크트리 dev 검증 누락 X** — 위배 시 즉시 중단. 워크트리 안에서 호출돼도 메인 절대 경로의 BACKLOG.md에 쓰기
104
- - **활성 버전 부재 시 즉시 중단** — `AGENT-GUIDE.md` 부재 / `## 활성 plan 버전` 섹션 부재 / vX.X 패턴 추출 실패 모두 명확한 에러 메시지 후 사용자 호출
104
+ - **활성 plan 부재 시 즉시 중단** — `AGENT-GUIDE.md` 부재 / `## 활성 plan 버전` 섹션 부재 / plan 식별자 미설정(`<예: …>` 자리표시자) 모두 명확한 에러 메시지 후 사용자 호출
105
105
  - **결정적 슬러그 best-effort** — LLM 비결정성 수용. race 차단 본체는 SSoT 2층(`/task-init` §4.4)이 담당. 슬러그 변형 발생 시 사용자 confirm
106
- - **글로벌 BACKLOG.md (plan 기획 후보)** 와 혼동 X — 본 스킬은 *버전별*만 다룸. 글로벌은 `/plan-init` 영역
106
+ - **글로벌 BACKLOG.md (plan 기획 후보)** 와 혼동 X — 본 스킬은 *활성 plan(기능 그룹)별*만 다룸. 글로벌은 `/plan-init` 영역
107
107
  - **자동 추정 진행 X** — 유형 / 제목 / 개요 / 대상 영역 모두 사용자 OK 또는 명백한 발화 매칭 후에만 BACKLOG.md 쓰기
108
108
 
109
109
  ## 상태 전이
@@ -1,106 +1,141 @@
1
1
  ---
2
2
  name: plan-init
3
- description: plan 버전 단위 9 기획 문서 작성 — 신규 vX.X/ 또는 기존 카피 후 변경 인터뷰
3
+ description: plan(기능 그룹) 생성 — NNN 채번 폴더 + PLAN.md/ROADMAP.md + 제품 관통 문서(FEATURES/UX-UI) 의도 레벨 delta
4
4
  ---
5
5
 
6
6
  # /plan-init
7
7
 
8
8
  ## 개요
9
9
 
10
- plan 버전(vX.X)마다 호출. `.project/plans/<vX.X>/` 안에 9 기획 문서 생성. 사용자 결정 버전명(v1.0 / alpha / mvp 등 자유).
10
+ plan(기능 그룹)마다 호출. **plan = 작업을 묶는 기능 그룹 단위** — 제품 전체 스냅샷(버전)이 아니다. 규모는 가변: 기능 그룹 하나가 보편이나, 첫 plan(MVP처럼 여러 기능 그룹을 묶은 큰 plan)도 같은 흐름으로 처리한다(특례 없음).
11
11
 
12
- 9 기획 문서:
13
- - PLAN.md (진입 인덱스 + 체크리스트)
14
- - SERVICE-POLICY.md (백엔드/풀스택)
15
- - FEATURES.md
16
- - UX-UI.md (프론트엔드/풀스택)
17
- - TECH-STACK.md
18
- - ARCHITECTURE.md
19
- - DATA-MODEL.md (백엔드/풀스택)
20
- - API-SPEC.md
21
- - ROADMAP.md
12
+ 본 스킬이 만드는 것:
13
+ - **plan 로컬(그룹 C)** — `.project/plans/<NNN_slug>/`에 `PLAN.md` + `ROADMAP.md` 생성.
14
+ - **제품 관통 문서(그룹 B) delta — 의도 레벨만** — `.project/FEATURES.md` / `.project/UX-UI.md`에 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append.
15
+
16
+ 본 스킬이 만들지 *않는* 것:
17
+ - **제품 관통 문서 전체 생성** — SERVICE-POLICY/TECH-STACK/ARCHITECTURE/DATA-MODEL/API-SPEC/FEATURES/UX-UI 7종은 `/project-init`이 루트에 작성/골격화 완료. plan-init은 부수적 add/mod만.
18
+ - **DATA-MODEL/API-SPEC 상세 본문** — 스키마·엔드포인트는 *선기획 금지*. 구현 동반으로 task 진행(`/task-plan` Phase 0 / `/task-dev`)이 채운다. plan-init은 빈 섹션 헤더만 둘 수 있다.
19
+
20
+ > plan 폴더명은 `NNN_<slug>` 형식(3자리 채번 + 기능 그룹 slug). 예: `001_mvp`, `002_compare-products`. tasks 폴더도 동일명.
22
21
 
23
22
  ## 호출 시점
24
23
 
25
- - `/project-init` 직후 첫 plan 생성 시.
26
- - 새 plan 버전(예: v1.0 → v1.1) 시작 시.
27
- - 기존 plan 분기/리비전 시.
24
+ - `/project-init` 직후 첫 plan(보통 MVP) 생성 시.
25
+ - 새 기능 그룹(예: `compare-products` 다음 `auth-system`) 착수 시.
28
26
 
29
- ## 입력 처리
27
+ > **자투리는 plan 없이** — 급한 버그·오타·의존성 업데이트 같은 단발 작업은 어느 기능 그룹에도 안 묶인다. plan-init 호출 없이 `/task-init`로 바로 진행(무소속). 전역 TASK-NNN이 순서를 보장하므로 소속과 무관하다.
30
28
 
31
- 인자 = 버전명 (예: `/plan-init v1.0`). 인자 없으면 사용자에게 *"어느 버전?"* 질문.
29
+ ## 입력 처리
32
30
 
33
- 두 분기:
34
- - **분기 1 (신규)**: `.project/plans/v*/` 없음 → 새 vX.X/ 생성 + 9 문서별 질문 라운드.
35
- - **분기 2 (이어가기)**: 기존 plans/vY.Y/ 있음 → 가장 최신 카피 → 새 vX.X/ 생성 → 변경 인터뷰 → 변경된 문서만 갱신 → AGENT-GUIDE.md 활성 버전 갱신.
31
+ 인자 = plan slug (예: `/plan-init compare-products`). 인자 없으면 사용자에게 *"어느 plan(기능 그룹)? slug 알려줘 (예: mvp, compare-products)"* 질문. 형식: 한국어면 영어 *의미 변환* → kebab-case(공백 불가, 3 단어 이내 권장).
36
32
 
37
33
  ## 단계
38
34
 
39
- ### Step 1 — 분기 판단
40
-
41
- 1. `.project/plans/` 디렉토리 존재 확인.
42
- 2. 하위 vX.X 폴더 목록 추출 (`ls .project/plans/`).
43
- 3. 비어 있음 → 분기 1 (신규).
44
- 4. 1개 이상 있음 → 분기 2 (이어가기).
45
-
46
- ### Step 2 — 버전명 확정
47
-
48
- 1. 인자로 들어왔으면 그대로 사용 (단 기존 충돌 시 사용자 confirm).
49
- 2. 인자 없으면 사용자에게 질문:
50
- - 분기 1: *"첫 plan 버전명? (예: v1.0, alpha, mvp)"*
51
- - 분기 2: *"기존 최신은 vY.Y. 새 버전명? (예: vY.Y+1)"*
52
- 3. 형식 강제 X. 사용자 자유.
53
-
54
- ### Step 3 — 분기 1 처리 (신규)
55
-
56
- 1. `.project/plans/<vX.X>/` 디렉토리 생성.
57
- 2. 프로젝트 타입(PROJECT.md에서 추출) 확인:
58
- - frontend → SERVICE-POLICY/DATA-MODEL 제외 가능 (선택)
59
- - backend → UX-UI 제외 가능 (선택)
60
- - fullstack → 9개 모두
61
- 3. 9 문서별 질문 라운드 — *한 문서씩, 핵심 질문 1~3개*:
62
- - **SERVICE-POLICY.md** (해당 시): 사용자 권한 / 데이터 보존 / 결제 정책 등
63
- - **FEATURES.md**: 핵심 기능 목록 (기능 단위 — 짧게)
64
- - **UX-UI.md** (해당 시): 페이지/화면 목록 + 핵심 인터랙션
65
- - **TECH-STACK.md**: 언어/프레임워크/주요 라이브러리 + 선택 이유
66
- - **ARCHITECTURE.md**: 시스템 구조 (멀티 리포 / 레이어드 / 마이크로서비스 등)
67
- - **DATA-MODEL.md** (해당 시): 주요 엔티티 + 관계
68
- - **API-SPEC.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
74
- 4. 받은 답 기반으로 각 문서 작성.
75
- 5. 마지막에 **PLAN.md** 작성 — 9 문서 인덱스 + 체크리스트.
76
- 6. **`.project/AGENT-GUIDE.md`의 활성 plan 버전 vX.X로 갱신** (신규도 동일 — 분기 2와 일관).
77
-
78
- ### Step 4 — 분기 2 처리 (이어가기)
79
-
80
- 1. 가장 최신 vY.Y/ 디렉토리 전체 카피 → vX.X/.
81
- 2. 변경 인터뷰 — 사용자에게 *"이번 버전에서 어느 문서가 변경되나? (다중 선택)"*:
82
- - SERVICE-POLICY / FEATURES / UX-UI / TECH-STACK / ARCHITECTURE / DATA-MODEL / API-SPEC / ROADMAP
83
- 3. 선택된 문서별 변경 사항 인터뷰 — *"이 문서에서 무엇이 달라지나?"*.
84
- 4. 받은 답으로 해당 문서만 수정. 나머지는 카피 그대로.
85
- 5. PLAN.md 갱신 — 변경 문서 표시.
86
- 6. **`.project/AGENT-GUIDE.md`의 활성 plan 버전 vX.X로 갱신**.
87
-
88
- ### Step 5 — `tasks/<vX.X>/` 디렉토리 준비
89
-
90
- 1. `.project/tasks/<vX.X>/` 디렉토리 생성 (빈 폴더).
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`와 별개:
35
+ ### Step 1 — 사전 검증 + 메인 워크트리 검출
36
+
37
+ 1. **메인 워크트리 검출**:
38
+ ```sh
39
+ MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
40
+ ```
41
+ 2. 메인 워크트리 dev 체크아웃 검증 — 위배 시 사용자 호출 + 중단.
42
+ 3. `$MAIN_WT/.project/PROJECT.md` 존재 확인 — 없으면 *"`/project-init` 먼저 호출 필요"* + 중단.
43
+
44
+ ### Step 2 — plan slug 확정 + NNN 채번 + legacy 게이트
45
+
46
+ 1. slug 확정 (인자 또는 사용자 질문 — 위 입력 처리).
47
+ 2. **다음 plan 번호 + legacy 검출** — `bin/lib.js`의 `computeNextPlanNumber(MAIN_WT)` 호출:
48
+ ```js
49
+ const lib = require('@angar2/taskery/bin/lib');
50
+ const { next, legacyDirs } = lib.computeNextPlanNumber(MAIN_WT);
51
+ // next = '001'/'002'/... (3자리 zero-pad), legacyDirs = NNN_ 패턴 아닌 기존 폴더 목록
52
+ ```
53
+ bash 등가(참고):
54
+ ```sh
55
+ ls -1 "$MAIN_WT/.project/plans" 2>/dev/null | grep -E '^[0-9]{3}_' \
56
+ | sed -E 's/^([0-9]{3})_.*/\1/' | sort -n | tail -1
57
+ ```
58
+ 3. **legacy 게이트** — `legacyDirs`가 비어 있지 않으면(예: 구버전 `v1.0`, `alpha` 폴더 잔존):
59
+ - 즉시 사용자 호출 + 경고: *"`plans/`에 NNN 채번이 아닌 폴더(<legacyDirs>)가 있어. 새 plan을 NNN로 채번하면 활성 plan이 갈려 원래 문제가 재발해. 먼저 수동 이전(문서 루트 이동 + 폴더 `NNN_slug` 리네임 + AGENT-GUIDE 활성 plan 갱신)을 끝낸 뒤 진행할지, 그래도 진행할지 결정해줘."*
60
+ - 사용자 명시 confirm 전 폴더 생성 금지.
61
+ 4. plan 폴더명 = `${next}_${slug}` (예: `001_mvp`).
62
+
63
+ ### Step 3 — plan 폴더 생성 + ROADMAP.md 작성
64
+
65
+ 1. `$MAIN_WT/.project/plans/<NNN_slug>/` 디렉토리 생성.
66
+ 2. **ROADMAP.md** 작성 — *현재 plan(기능 그룹) 한정* task 단계 로드맵. *ROADMAP 작성 4룰*:
67
+ 1. ROADMAP은 *현재 plan 한정* — 다른 기능 그룹 후보는 글로벌 `.project/BACKLOG.md`. 프로젝트 전체 거시 빌드 순서는 `PROJECT.md ## 초기 빌드 로드맵`(별개).
68
+ 2. 진행 순서에 task 번호(TASK-NNN) 강제 금지 — *Stage(영역) 단위*로만 명시 (예측 불가 task 합류 시 번호 어긋남 방지).
69
+ 3. Stage 안 *작업 단위 명시* 필요 (한 task 분량 권장 — 다음 task 진행 시 메인 세션이 ROADMAP 보고 작업 범위 판단 가능).
70
+ 4. 작업 단위에 task 번호 컬럼 추가 X / *상태 컬럼만* (⏳ 대기 / 🔧 진행 중 / ✅ 완료 / ❌ 폐기) — Living document.
71
+
72
+ ```markdown
73
+ # ROADMAP — <NNN_slug>
74
+
75
+ > 본 plan(기능 그룹) 한정 task 단계. Stage 단위(task 번호 강제 X), 상태 컬럼만 Living.
76
+ > 프로젝트 거시 빌드 순서는 PROJECT.md, 다음 기능 그룹 후보는 글로벌 BACKLOG.md.
77
+
78
+ ## Stage 1 — <영역명>
79
+ | 작업 단위 | 상태 |
80
+ |-----------|------|
81
+ | <한 task 분량 작업> | ⏳ 대기 |
82
+ ```
83
+
84
+ ### Step 4 — PLAN.md 작성 (얇은 인덱스 — 하드룰)
85
+
86
+ PLAN.md는 *얇은 인덱스*다. 이 기능 그룹이 건드린 루트 문서 요약 + task 체크리스트만 둔다.
87
+
88
+ **하드룰 (중복 차단):**
89
+ - **각 항목 = 루트 문서 섹션 *링크 1줄*. 본문 복제 금지.** 기능 상세는 `.project/` 루트 문서에만 존재(단일 홈).
90
+ - `## 활성 task 버전` 류 *자기선언 라인 작성 금지* — 활성 plan의 단일 진실은 `AGENT-GUIDE.md`뿐. plan 로컬이 중복 선언하지 않는다.
91
+
92
+ ```markdown
93
+ # PLAN — <NNN_slug>
94
+
95
+ > 이 plan(기능 그룹)의 얇은 인덱스. 각 항목은 루트 문서 섹션 링크 1줄 — 본문은 복제하지 않는다.
96
+
97
+ ## 이 기능 그룹이 건드리는 루트 문서
98
+ - [FEATURES.md › <이 그룹 섹션>](../../FEATURES.md) — <한 줄 요약>
99
+ - [UX-UI.md › <이 그룹 섹션>](../../UX-UI.md) — <한 줄 요약>
100
+ - (DATA-MODEL / API-SPEC — task 진행이 구현 동반으로 채움)
101
+
102
+ ## task 체크리스트
103
+ - [ ] <작업 단위> (ROADMAP Stage N)
104
+ ```
105
+
106
+ ### Step 5 — 제품 관통 문서(그룹 B) 의도 레벨 delta
107
+
108
+ `.project/` 루트 제품 관통 문서에 이 기능 그룹의 *의도*를 명시한다. **의도 레벨만 — 상세 선작성 금지.**
109
+
110
+ - **FEATURES.md / UX-UI.md (필수)**: 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append. "이 기능이 무엇 / 어떤 화면" — 구현 전에도 선언 가능(그게 기능 그룹 기획의 본질). 섹션은 *기능/도메인 자기기술* — 어느 plan이 추가했는지 태그하지 않는다(기능 분류 = 제품 관통 문서 섹션 구조가 단일 진실).
111
+ ```markdown
112
+ ## <기능 그룹 이름>
113
+ <의도 1~3줄: 무엇을 / 누구를 위해 / 핵심 화면·동작. 상세 스펙은 task 진행에서.>
114
+ ```
115
+ - **DATA-MODEL.md / API-SPEC.md (선택 — 빈 헤더까지만)**: 이 그룹이 데이터/엔드포인트를 도입할 거면 *빈 섹션 헤더*만 둘 수 있다. **스키마·엔드포인트 본문 선작성 금지** — 구현 동반으로 `/task-plan` Phase 0 / `/task-dev`가 채운다(taskery anti-waterfall: TASK_DOC_RULE §1.4 / DEV_RULE §2 정합).
116
+
117
+ 타입 조건부: project-init이 만들지 않은 문서(예: frontend의 DATA-MODEL)는 delta도 없음.
118
+
119
+ ### Step 6 — 그룹 A 점검 (부수적 add/mod)
120
+
121
+ 이 기능 그룹이 *새 정책 / 새 스택 / 새 구조*를 도입하면 해당 루트 문서(SERVICE-POLICY / TECH-STACK / ARCHITECTURE)를 수정한다. 도입 없으면 건너뜀. (그룹 A는 project-init이 작성한 정적 제품 관통 문서 — plan-init은 부수적 변경만.)
122
+
123
+ ### Step 7 — `tasks/<NNN_slug>/` 디렉토리 준비
124
+
125
+ 1. `$MAIN_WT/.project/tasks/<NNN_slug>/` 디렉토리 생성 (빈 폴더).
126
+ 2. `tasks/<NNN_slug>/spec-diffs/`, `screenshots/`, `mockup/` 빈 폴더 미리 생성.
127
+ 3. `tasks/<NNN_slug>/BACKLOG.md` 빈 골격 Write — *plan(기능 그룹)별 task 후보 누적용*, 글로벌 `.project/BACKLOG.md`와 별개:
93
128
 
94
129
  ```markdown
95
- # BACKLOG — <vX.X>
130
+ # BACKLOG — <NNN_slug>
96
131
 
97
- > 본 파일은 *<vX.X> plan 진행 중 누적되는 후속 task 후보* 추적용.
98
- > 글로벌 `.project/BACKLOG.md` (plan 기획 후보 카탈로그) 와 별개.
132
+ > 본 파일은 *<NNN_slug> plan 진행 중 누적되는 후속 task 후보* 추적용.
133
+ > 글로벌 `.project/BACKLOG.md` (다음 기능 그룹 후보 카탈로그) 와 별개.
99
134
 
100
135
  | 위치 | 영역 | 역할 |
101
136
  |------|------|------|
102
- | `.project/BACKLOG.md` (글로벌) | plan 기획 후보 카탈로그 (다음 plan 버전에서 검토) | Living document |
103
- | `.project/tasks/<vX.X>/BACKLOG.md` (본 파일) | 현재 plan 진행 중 누적된 후속 task 후보 | 한 버전 내 task close 직후 후보 누적 |
137
+ | `.project/BACKLOG.md` (글로벌) | 다음 기능 그룹 후보 카탈로그 (다음 plan에서 검토) | Living document |
138
+ | `.project/tasks/<NNN_slug>/BACKLOG.md` (본 파일) | 현재 plan 진행 중 누적된 후속 task 후보 | 한 plan 내 task close 직후 후보 누적 |
104
139
 
105
140
  ## 후속 task 후보
106
141
 
@@ -109,55 +144,37 @@ plan 버전(vX.X)마다 호출. `.project/plans/<vX.X>/` 안에 9 기획 문서
109
144
 
110
145
  빈 골격만 작성. 본문은 task 진행하면서 사용자 발화 또는 메인 감지로 누적.
111
146
 
112
- ### Step 6 — `PLAN.md` 작성/갱신
147
+ ### Step 8 — `AGENT-GUIDE.md` 활성 plan 갱신
113
148
 
114
- ```markdown
115
- # PLAN <vX.X>
116
-
117
- ## 9 기획 문서 인덱스
118
-
119
- - [x] SERVICE-POLICY.md (해당 / 미해당)
120
- - [x] FEATURES.md
121
- - [x] UX-UI.md (해당 / 미해당)
122
- - [x] TECH-STACK.md
123
- - [x] ARCHITECTURE.md
124
- - [x] DATA-MODEL.md (해당 / 미해당)
125
- - [x] API-SPEC.md
126
- - [x] ROADMAP.md
127
-
128
- ## 변경 이력
129
- | 버전 | 날짜 | 변경 문서 | 요약 |
130
- |------|------|----------|------|
131
- | <vX.X> | <YYYY-MM-DD> | <목록 또는 "전체 (신규)"> | <요약> |
132
-
133
- ## 활성 task 버전
134
- - `.project/tasks/<vX.X>/` 사용
135
- ```
149
+ `$MAIN_WT/.project/AGENT-GUIDE.md`의 `## 활성 plan 버전` 섹션 다음 줄을 `<NNN_slug>`로 갱신 (헤딩 텍스트 자체는 변경 X — lib.js/스킬이 의존). **반드시** — 누락 시 메인 세션이 옛 plan 보고 헤맴.
136
150
 
137
- ### Step 7 — 결과 보고
151
+ ### Step 9 — 결과 보고
138
152
 
139
- 작성/갱신된 문서 목록 + 다음 단계 안내:
140
- - *"<vX.X>/ 9 기획 문서 작성 완료. AGENT-GUIDE.md 활성 버전 <vX.X>로 갱신. 다음은 `/task-init`으로 첫 task 생성."*
153
+ 작성된 산출물 목록 + 다음 단계 안내:
154
+ - *"`<NNN_slug>/` plan 생성 완료 — PLAN.md / ROADMAP.md + 제품 관통 문서 FEATURES/UX-UI 의도 stub 추가. AGENT-GUIDE.md 활성 plan `<NNN_slug>`로 갱신. 다음은 `/task-init`으로 첫 task 생성 (스키마/엔드포인트 상세는 task 진행에서 구현 동반)."*
141
155
 
142
156
  **결과 commit 흐름** (GIT_RULE 정합):
143
157
  - dev 직접 commit *금지* (git-guard.sh 차단). 두 가지 default 흐름:
144
- 1. **첫 task에 묶기 (권장)**: 분기 1(신규)에서 `/project-init` 직후 본 스킬 호출이면 `/project-init` 산출물과 같은 작업 브랜치(보통 TASK-001 부트스트랩 chore)에 함께 commit. 분기 2(이어가기)면 새 task 브랜치 또는 임시 docs 브랜치에서.
145
- 2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_plan-{vX.X}` 후 commit → dev에 `--no-ff` 머지. 다음 task 생성 *전*에 plan 산출물을 깔끔히 기록하고 싶을 때.
158
+ 1. **첫 task에 묶기 (권장)**: `/project-init` 직후 본 스킬 호출이면 init 산출물과 같은 작업 브랜치(보통 TASK-001 부트스트랩 chore)에 함께 commit. 새 기능 그룹 착수면 새 task 브랜치 또는 임시 docs 브랜치에서.
159
+ 2. **임시 docs 브랜치**: `git checkout -b docs/{개발자}_plan-{NNN_slug}` 후 commit → dev에 `--no-ff` 머지. 다음 task 생성 *전*에 plan 산출물을 깔끔히 기록하고 싶을 때.
146
160
 
147
161
  ## 도구 가이드
148
162
 
149
- - **Read**: PROJECT.md / 기존 plans/vY.Y/ 정독
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}`
151
- - **Write/Edit**: 9 기획 문서 작성/갱신
152
- - **AskUserQuestion**: 9 문서별 핵심 질문 + 변경 인터뷰
163
+ - **Read**: PROJECT.md / `.project/` 루트 제품 관통 문서(FEATURES/UX-UI 등 delta 대상)
164
+ - **Bash**: `MAIN_WT` 검출, `mkdir -p plans/<NNN_slug> tasks/<NNN_slug>/{spec-diffs,screenshots,mockup}`
165
+ - **bin/lib.js**: `computeNextPlanNumber`(채번 + legacy 검출)
166
+ - **Write/Edit**: PLAN.md / ROADMAP.md 작성, 제품 관통 문서 FEATURES/UX-UI delta append, AGENT-GUIDE 활성 plan 갱신
167
+ - **AskUserQuestion**: slug 확정 / legacy 게이트 confirm
153
168
 
154
169
  ## 주의사항
155
170
 
156
- - 9 문서 *전부 강제 X*. 프로젝트 타입에 따라 일부 제외 가능 (frontend → SERVICE-POLICY/DATA-MODEL 미해당 등).
157
- - 분기 2(이어가기)에서 *전체 재작성 금지*. 변경된 문서만 갱신.
158
- - 질문 라운드는 *한 번에 한 문서씩*. 한꺼번에 9 문서 질문 X.
159
- - 답 받기 전 자동 추정 진행 X. 단 PROJECT.md / 기존 plans 정보로 *제안*은 OK (사용자 confirm 후).
160
- - AGENT-GUIDE.md 활성 버전 갱신 *반드시*. 누락 시 메인 세션이 옛 plan 보고 헤맴.
171
+ - **plan-init은 *제품 관통 문서 전체를 만드는 스킬이 아니다*** — 7종은 project-init 영역. 본 스킬은 plan 로컬(PLAN/ROADMAP) + 제품 관통 문서 delta(의도)만.
172
+ - **delta는 의도 레벨까지만** — FEATURES/UX-UI 의도 스텁은 두되, DATA-MODEL/API-SPEC 스키마·엔드포인트 *본문 선작성 금지*. 상세는 구현 동반(task).
173
+ - **제품 관통 문서에 plan 태그 금지** — 기능 섹션은 자기기술. 어느 plan이 만들었는지 표기하지 않는다(plan은 작업 묶음이지 영구 기능 분류 단위가 아님).
174
+ - **PLAN.md 본문 복제 금지** — 각 항목 = 루트 문서 섹션 링크 1줄. `## 활성 task 버전` 자기선언 라인 작성 X.
175
+ - **legacy 폴더 감지 시 진행 보류** — NNN 아닌 폴더 잔존 시 사용자 confirm 전 새 plan 생성 금지.
176
+ - **AGENT-GUIDE 활성 plan 갱신 *반드시*** — 값 = `NNN_slug`. 헤딩 텍스트 변경 X.
177
+ - 답 받기 전 자동 추정 진행 X. 단 PROJECT.md / 기존 루트 문서 정보로 *제안*은 OK (사용자 confirm 후).
161
178
 
162
179
  ## 상태 전이
163
180