@angar2/taskery 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -7
- package/bin/fork.js +4 -2
- package/bin/init.js +7 -2
- package/bin/lib.js +147 -55
- package/bin/mcp.js +3 -3
- package/bin/migrate.js +306 -0
- package/bin/plan.js +61 -21
- package/bin/set-status.js +18 -3
- package/bin/status.js +12 -0
- package/bin/taskery.js +7 -2
- package/bin/update.js +72 -0
- package/package.json +1 -1
- package/template/.claude/skills/run-team/SKILL.md +4 -4
- package/template/.codex/agents/task-tester.toml +9 -6
- package/template/.project/rules/CHANGELOG_RULE.md +1 -1
- package/template/.project/rules/GIT_RULE.md +19 -5
- package/template/.project/rules/MOCKUP_RULE.md +1 -1
- package/template/.project/rules/TASKERY_RULE.md +237 -0
- package/template/.project/rules/TASK_DOC_RULE.md +3 -2
- package/template/AGENTS.md +26 -177
- package/template/CLAUDE.md +1 -206
- package/template/shared/skills/log-friction/SKILL.md +21 -1
- package/template/shared/skills/plan-init/SKILL.md +8 -8
- package/template/shared/skills/project-init/SKILL.md +79 -43
- package/template/shared/skills/task-close/SKILL.md +42 -8
- package/template/shared/skills/task-dev/SKILL.md +45 -13
- package/template/shared/skills/task-init/SKILL.md +13 -13
- package/template/shared/skills/task-plan/SKILL.md +24 -17
- package/template/shared/skills/task-test/SKILL.md +71 -20
- package/template/.project/FRICTION_LOG.md +0 -16
- package/template/.project/TEST-GUIDE.md +0 -51
package/template/AGENTS.md
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
> 본 문서는 에이전트 최상위 지침이다. 세션 시작 시 자동 로드된다.
|
|
4
|
+
> **본 문서에는 규칙·사용법을 추가하지 않는다** — 규칙은 `.project/rules/`, 이 리포의 커스텀은 `*.local.md`가 담당한다. 본 문서에서 갱신이 허용되는 것은 아래 리포 값 칸(프로젝트 메타 · 각 명령)뿐이다.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 최상위 지침 — taskery 강제
|
|
9
|
+
|
|
10
|
+
1. 본 리포지토리는 **taskery로 운영된다.** taskery는 task 단위 라이프사이클(문서 · 상태 · git · 검증)을 스킬과 CLI로 관리하는 시스템이다.
|
|
11
|
+
2. **taskery 사용은 선택이 아니라 강제다.** 모든 작업은 예외 없이 taskery의 흐름을 통해서만 수행한다. taskery를 우회한 임의 진행 — 수동 git 운영 · 스킬 미호출 작업 · 규칙 밖 문서 생성 — 은 전면 금지된다.
|
|
12
|
+
3. **`.project/rules/TASKERY_RULE.md`를 필독하라.** taskery의 전체 사용법은 전부 그 설명서에 있다. 읽지 않은 채로 작업을 시작하지 않는다.
|
|
13
|
+
4. **`.project/rules/`의 모든 규칙을 무조건 따른다.** 코어 룰과 이 리포의 `*.local.md` 커스텀 룰 전부가 대상이다. 겹치는 조항은 로컬이 최우선이고, 겹치지 않는 로컬 조항도 그대로 준수한다. **어떤 사유로도 규칙 위반은 정당화되지 않는다.**
|
|
14
|
+
5. **사용자가 명시한 범위만 수행한다.** 명시하지 않은 단계로 스스로 진입하는 것은 영구 금지다.
|
|
15
|
+
6. **세션 시작 시 현재 위치를 자가 진단한다** — 메인 워크트리인지 task 워크트리인지 판정한 후 그에 맞는 흐름으로 진입한다. *"메인에서 그냥"* 류의 발화는 규칙 충돌 신호다. 정지하고 확인한다. (방법과 상세는 `TASKERY_RULE` §5.)
|
|
11
16
|
|
|
12
17
|
---
|
|
13
18
|
|
|
@@ -18,189 +23,33 @@
|
|
|
18
23
|
- **소개 (한 줄)**: <도메인 / 비전>
|
|
19
24
|
- **상세**: `.project/PROJECT.md` 참조
|
|
20
25
|
|
|
21
|
-
> `/project-init` 호출 시 위 4 항목 채워짐. 변경 필요하면 직접 편집.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 메인 세션 최상위 룰
|
|
26
|
-
|
|
27
|
-
> 본 룰은 *모든 스킬 호출 / 사용자 발화 처리 / 작업 진행*에 적용. 위반 시 사용자 마찰 직결.
|
|
28
|
-
|
|
29
|
-
1. **범위 준수** — 사용자가 명시한 범위/행동만 수행. 명시 외 자체 진입 영구 금지. 예: 사용자가 *"X부터 Y까지"* 지시 → Y 끝에서 정지 + 상태 보고 + 다음 단계 명시 호출 대기.
|
|
30
|
-
2. **Skill 정식 발동** — task 단계는 반드시 해당 스킬(`.agents/skills/<스킬>/SKILL.md`)을 정식 호출. 가이드 본문을 머릿속 절차로 대체 금지 (컴팩트 세션 / 시스템 리마인더 인지 상태에서도 동일).
|
|
31
|
-
3. **워크트리 자가 진단** — 세션 시작 시 현재 cwd가 *메인 워크트리*인지 *태스크 워크트리*인지 자가 판단 (`git rev-parse --show-toplevel` + `~/.taskery/worktrees/` 경로 비교). 태스크 워크트리면 *해당 진행중 태스크 컨텍스트*로 진입, 메인 워크트리면 *새 태스크 / 진행중 목록 인터뷰* 흐름.
|
|
32
|
-
4. **모호 발화 자의 해석 금지** — *"워크트리 없이"* / *"메인에서"* / *"이 자리에서 그냥"* 류로 읽히는 발화 = 코어 규칙(메인 워크트리 = 부모 브랜치 고정, task는 워크트리에서) 충돌 신호. 즉시 정지 + 규칙 한 줄 명시 + 1줄 confirm 요청. 자의 해석 후 진행 영구 금지. 사용자 의도가 *오타/모호*일 가능성을 *워크트리 사용*으로 읽는 게 자연스러움.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## 멀티세션 워크트리 (0.1.2+)
|
|
37
|
-
|
|
38
|
-
> 멀티세션 = 같은 프로젝트에서 *여러 메인 세션이 독립 태스크를 병렬*로 진행. git worktree로 작업 폴더 격리, 부모 브랜치 머지 시 직렬화.
|
|
39
|
-
|
|
40
|
-
- **메인 워크트리 = 부모 브랜치 고정**: 메인 워크트리는 `/task-init` 시점에 체크아웃돼 있는 브랜치(= 그 task의 *부모 브랜치*)를 유지한다. 개인 기본은 `dev`, 회사/로드맵은 `dev_feat_x` / `master` 등 — taskery는 *현재 서 있는 브랜치*를 부모로 삼는다(특정 이름 고정 X). 모든 태스크 작업은 *예외 없이* 별도 워크트리에서 수행. 진행 중 태스크가 있는 동안 메인 워크트리 HEAD를 옮기는 어떤 작업(`git checkout <task-branch>` / `git switch` / `git reset` HEAD 이동 / `git rebase` HEAD 이동 등)도 영구 금지 — close가 부모로 되병합해야 하므로 부모에 서 있어야 한다. *"잠깐만 메인에서"* / *"테스트 한 번만 메인에서"* 같은 예외 발화도 거부 — 별도 워크트리에서 처리. (부모 브랜치 자체를 바꾸려면 진행 중 태스크가 없을 때 원하는 브랜치로 체크아웃 후 새 task 시작.)
|
|
41
|
-
- **워크트리 위치**: `~/.taskery/worktrees/<projectId>/TASK-NNN_<출처>_<슬러그>/`
|
|
42
|
-
- `<projectId>`: `.taskery-manifest.json` `projectId` (8자 hex)
|
|
43
|
-
- `<출처>`: `BL-NNN` / `RM-NNN` / `DR`
|
|
44
|
-
- **`/task-init`이 부모 브랜치에서 워크트리 생성** + **`/task-close`가 부모 브랜치 머지 + 워크트리 자동 제거** (자동 흐름. 보존 키워드 `keep` / `브랜치 남겨` 등 발화 시 둘 다 보존).
|
|
45
|
-
- **메인 메타 접근**: 워크트리에서 `.project/`, `AGENTS.md` 등 접근 시 *메인 워크트리 절대 경로* 사용:
|
|
46
|
-
```sh
|
|
47
|
-
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
48
|
-
```
|
|
49
|
-
- **수동 git 작업 시 정합성 보장 X** — taskery 명령(스킬 / `npx @angar2/taskery <서브>`)으로만 운영.
|
|
50
|
-
- **CLI 보조 명령**:
|
|
51
|
-
- `npx @angar2/taskery status` — 진행중 태스크 + 워크트리 + 부모 머지 상태 요약
|
|
52
|
-
- `npx @angar2/taskery prune` — stale 워크트리 대화형 정리
|
|
53
|
-
|
|
54
|
-
상세: `.project/rules/GIT_RULE.md` "멀티세션 워크트리 정책" 섹션.
|
|
55
|
-
|
|
56
|
-
요건: git ≥ 2.31 (`--path-format=absolute` 옵션 필요).
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## agent teams 자동 병렬 — Codex 미지원
|
|
61
|
-
|
|
62
|
-
> 다건 태스크를 리더가 팀원(독립 세션)에 분배해 자동 병렬 처리하는 고기능(`/run-team`)은 **Claude 전용**이다 — 기반인 agent teams 기능이 Codex에 없다.
|
|
63
|
-
|
|
64
|
-
- *"백로그 한 번에 진행해"* / *"팀에게 전부 독립으로 맡겨"* 류 자동 병렬 발화가 들어와도 Codex에서는 지원하지 않는다. **단일 태스크 흐름**(`/task-init` ~ `/task-close`)으로 안내하고 진행한다.
|
|
65
|
-
- 멀티세션 병렬 자체(사용자가 워크트리별 세션을 직접 띄워 진행)는 Codex에서도 가능 — 자동화(리더가 팀을 띄우고 관리)만 미지원이다.
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 백로그 (0.1.2+)
|
|
70
|
-
|
|
71
|
-
> `.project/tasks/<NNN_slug>/BACKLOG.md` = *plan(기능 그룹)별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
|
|
72
|
-
|
|
73
|
-
- **`/add-backlog`**: 사용자 *"~ 백로그에 추가"* 발화 → 얕은 분석(코드 탐색 X, 추정 수준) → BL-NNN 채번 → BACKLOG.md append (`[ ]` 대기).
|
|
74
|
-
- **`/task-init` 연동**: 사용자 *"백로그의 BL-NNN 진행"* 발화 → 해당 항목 *확인 마킹*. `[ ]` → `[x]` + `- TASK: TASK-NNN` 추가 (다회 진행 시 콤마).
|
|
75
|
-
- **체크박스 의미**: `[ ]` = 미확인 (task로 옮기지 않은 메모) / `[x]` = 확인 완료 (task로 옮김). `[x]`는 *task로 옮겼다*는 메모일 뿐, 부모 머지·완료 여부와는 무관하다.
|
|
76
|
-
- **`[x]` 항목이 실제로 완료된 작업인지 굳이 확인하려 들지 않는다.** 진행·완료 상태는 백로그가 아니라 `taskery status`(살아있는 브랜치) + 부모 머지커밋이 판단한다.
|
|
77
|
-
- **머지 여부를 직접 알아야 할 경우에만** 아래 순서로 작업 완료 여부를 확인한다:
|
|
78
|
-
1. `taskery status` 진행중 목록에 그 TASK가 **있으면** → 아직 진행 중(부모 미머지)이므로 `git log --all --grep`이 비는 것이 정상이다. 재조회하지 않는다.
|
|
79
|
-
2. 목록에 **없으면** → `git log --all --grep 'BL-NNN'` + 브랜치명으로 작업 완료 여부를 확인한다.
|
|
80
|
-
- **글로벌 `.project/BACKLOG.md`** (다음 기능 그룹 후보 카탈로그) 는 본 흐름 무관 — `/plan-init` 영역.
|
|
81
|
-
|
|
82
|
-
상세: `.agents/skills/add-backlog/SKILL.md`.
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
26
|
## 검증 명령
|
|
87
27
|
|
|
88
|
-
>
|
|
89
|
-
> `/task-dev` self-check / `/task-close` 최종 게이트가 *이 섹션을 단일 진실 소스로 참조*.
|
|
90
|
-
> 백틱(`...`) 안 명령 그대로 실행됨. 언어/프레임워크 따라 변경.
|
|
28
|
+
> 각 명령은 그대로 실행 가능한 형태로 적는다. 해당 없는 항목은 행을 삭제한다.
|
|
91
29
|
|
|
92
30
|
- 린트: `<예: npm run lint>`
|
|
93
|
-
- 타입체크: `<예: npm run typecheck>`
|
|
31
|
+
- 타입체크: `<예: npm run typecheck>`
|
|
94
32
|
- 빌드: `<예: npm run build>`
|
|
95
33
|
|
|
96
|
-
> 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(``)은 사용 금지.
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
34
|
## 테스트 명령
|
|
101
35
|
|
|
102
|
-
> *테스트 실행* (단위 / 통합 / E2E 등). 코드 상태 검증은 `## 검증 명령` 참조.
|
|
103
|
-
> `/task-dev` 구현 후 테스트 + `/task-test` 격리 세션이 *이 섹션을 단일 진실 소스로 참조*.
|
|
104
|
-
> 백틱(`...`) 안 명령 그대로 실행됨. 언어/프레임워크 따라 변경.
|
|
105
|
-
|
|
106
36
|
- 단위 테스트: `<예: npm test>`
|
|
107
|
-
- 통합 테스트:
|
|
108
|
-
- E2E 테스트:
|
|
37
|
+
- 통합 테스트: `<있을 때만>`
|
|
38
|
+
- E2E 테스트: `<있을 때만>`
|
|
109
39
|
|
|
110
|
-
|
|
40
|
+
## 검수 실행 명령
|
|
111
41
|
|
|
112
|
-
>
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## 검수 실행 명령 (해당 시 — 앱 실행·검수가 필요한 프로젝트)
|
|
117
|
-
|
|
118
|
-
> `/task-dev`·`/task-test`가 검수 시점(세션 중단점)에 이 명령으로 서버를 *백그라운드* 기동하고 접속 URL을 보고한다.
|
|
119
|
-
> 멀티세션 포트 격리: 메인 세션(부모 브랜치) = 기준 포트, task 워크트리 = 기준 포트 + TASK번호. 상세는 GIT_RULE "멀티세션 검수 환경" 섹션.
|
|
120
|
-
> CLI/라이브러리 등 검수 서버가 없는 프로젝트는 본 섹션 전체 삭제.
|
|
42
|
+
> 앱을 띄워 사용자가 직접 확인해야 하는 프로젝트에만 해당한다. 아니면 이 절 전체를 삭제한다.
|
|
121
43
|
|
|
122
44
|
- 기준 포트: `<예: 5100>`
|
|
123
|
-
- 실행 명령: `<예: npm run dev -- --port <PORT>>`
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 룰 문서 참조
|
|
129
|
-
|
|
130
|
-
| 룰 | 위치 | 역할 |
|
|
131
|
-
|----|------|------|
|
|
132
|
-
| TASK_DOC_RULE | `.project/rules/TASK_DOC_RULE.md` | task 문서 양식 (헤더 6컬럼 / 6 섹션 / 7 상태) |
|
|
133
|
-
| GIT_RULE | `.project/rules/GIT_RULE.md` (있으면) → 글로벌 `~/.claude/rules/GIT_RULE.md` (fallback) | git 정책 (브랜치 / 커밋 / 머지) |
|
|
134
|
-
| CHANGELOG_RULE | `.project/rules/CHANGELOG_RULE.md` | CHANGELOG 작성 정책 (위치 / 형식 / 필수 필드) |
|
|
135
|
-
| MOCKUP_RULE | `.project/rules/MOCKUP_RULE.md` | UX/UI task의 HTML 목업 위치 / 형식 / 네이밍 |
|
|
136
|
-
| `*.local.md` | `.project/rules/` | (옵션) 사용자 오버라이드 — `*.local.md` suffix는 npx 미터치 |
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## 스킬 9종 — project > plan > task 위계 + 회고
|
|
141
|
-
|
|
142
|
-
| 스킬 | 레벨 | 역할 |
|
|
143
|
-
|------|------|------|
|
|
144
|
-
| `/project-init` | project | 진입 문서(PROJECT/AGENT-GUIDE/LINKED-REPOS/GLOSSARY/.env) + 제품 관통 문서(그룹 A 작성 / 그룹 B 골격, `.project/` 루트) 생성 (1회성) |
|
|
145
|
-
| `/plan-init` | plan | `.project/plans/<NNN_slug>/` PLAN/ROADMAP + 제품 관통 문서 FEATURES/UX-UI에 의도 추가 (plan = 기능 그룹 단위) |
|
|
146
|
-
| `/task-init` | task | task.md 빈 골격 + status=draft |
|
|
147
|
-
| `/task-plan` | task | Requirements/Scope/Dev Plan/Test Plan 작성 (draft → planned) |
|
|
148
|
-
| `/task-dev` | task | Phase 순서 구현 + self-check (planned → developed) |
|
|
149
|
-
| `/task-test` | task | task-tester 서브에이전트 격리 검증 (developed → tested) |
|
|
150
|
-
| `/task-close` | task | 검증 명령 게이트 + 커밋 + 부모 브랜치 병합 (tested → closed) |
|
|
151
|
-
| `/add-backlog` | meta | 사용자 발화로 활성 plan BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
|
|
152
|
-
| `/log-friction` | meta | FRICTION_LOG.md에 사용자 불편 한 행 기록 |
|
|
153
|
-
|
|
154
|
-
본문은 `.agents/skills/<스킬>/SKILL.md` 참조.
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## Hook 안전망 — Catastrophic 2종
|
|
159
|
-
|
|
160
|
-
> `.codex/config.toml`의 `[[hooks.PreToolUse]]`로 등록. 최초 1회 `/hooks` trust 승인 후 자동 작동.
|
|
161
|
-
|
|
162
|
-
| Hook | 영역 | 잡는 것 |
|
|
163
|
-
|------|------|--------|
|
|
164
|
-
| `git-guard.sh` | PreToolUse(Bash) | main/dev 직접 커밋 / `--force` / `--no-verify` / `branch -D` / `reset --hard` / `clean -fd` |
|
|
165
|
-
| `closed-immutable.sh` | PreToolUse(apply_patch) | `closed` 상태 task.md 본 파일 재수정 차단 (정상 흐름은 새 task로). spec-diffs / screenshots / mockup은 자유 수정 (역사적 자료) |
|
|
166
|
-
|
|
167
|
-
**잘 지키면 hook 작동 0회 (무해). catastrophic만 차단.**
|
|
168
|
-
|
|
169
|
-
> closed-immutable.sh는 코덱스 파일편집 도구(apply_patch)의 patch envelope에서 `*** Update File:` 경로를 파싱해 검사한다(Claude판은 `file_path` 키를 읽음 — 메커니즘만 다르고 효과 동일).
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 불편 데이터
|
|
174
|
-
|
|
175
|
-
- **누적**: `.project/FRICTION_LOG.md` — 메인이 한 줄씩 추가 (사용자 불만 발화 캐치 또는 사용자 명시)
|
|
176
|
-
- **등록**: `/log-friction` 스킬 — 사용자 명시 호출 / 불만 발화 캐치 / task-close 직후 마찰 신호 자체 감지 시 한 행 기록
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## 동기화 룰 (사용자 의무)
|
|
181
|
-
|
|
182
|
-
> taskery는 *plan/ ↔ template/ 자동 빌드 X*. 사용자가 직접 정합 유지.
|
|
183
|
-
|
|
184
|
-
- **`.project/` 루트 제품 관통 문서 변경 시** → 관련 task의 `spec-diffs/` 갱신 (`/task-plan` Phase 0 흐름 — 진행 중 task 있으면)
|
|
185
|
-
- **`AGENTS.md` 검증 명령 변경 시** → 모든 스킬 + hook이 그대로 따름. 별도 동기화 불필요
|
|
186
|
-
- **룰(`*.md` in `.project/rules/`) 변경 시** → 스킬 instruction이 다음 호출부터 변경 반영
|
|
187
|
-
- **`*.local.md` 사용자 오버라이드** → `npx @angar2/taskery update`가 미터치. 코어 룰 갱신 시 `*.bak` 백업 후 사용자 confirm
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## 멀티리포 통신 (해당 시)
|
|
192
|
-
|
|
193
|
-
- 송신: `.project/shared/sent/<filename>.md` 작성
|
|
194
|
-
- 수신: 연결 리포에서 `received/`로 카피 후 정독
|
|
195
|
-
- 처리 완료: `sent/completed/` 또는 `received/completed/`로 이동
|
|
196
|
-
- 연결 리포 경로: `.project/.env` (gitignore)
|
|
197
|
-
- 리포 목록: `.project/LINKED-REPOS.md`
|
|
45
|
+
- 실행 명령: `<예: npm run dev -- --port <PORT>>`
|
|
46
|
+
- 터널: `<선택 — 외부 확인이 필요할 때만>`
|
|
198
47
|
|
|
199
48
|
---
|
|
200
49
|
|
|
201
|
-
##
|
|
50
|
+
## 세션 진입 절차
|
|
202
51
|
|
|
203
|
-
1. 본
|
|
204
|
-
2. `.project/
|
|
205
|
-
3.
|
|
206
|
-
4.
|
|
52
|
+
1. 본 문서 정독
|
|
53
|
+
2. `.project/rules/TASKERY_RULE.md` 필독 — taskery 사용법 전체
|
|
54
|
+
3. `npx @angar2/taskery status` — 활성 plan · 진행중 task 확인
|
|
55
|
+
4. `.project/` 제품 관통 문서 + 활성 plan의 `PLAN.md` 정독
|
package/template/CLAUDE.md
CHANGED
|
@@ -1,206 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
> 이 파일은 메인 세션이 *매 세션 시작 시 자동 로드*하는 단일 진입점이다.
|
|
4
|
-
> 프로젝트 메타 + 검증/테스트/검수 명령 + 룰 참조 + 스킬 9종 + 동기화 룰만 포함한다.
|
|
5
|
-
> 사람용 도메인 설명은 `.project/PROJECT.md`, 진입 가이드는 `.project/AGENT-GUIDE.md` 참조.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 프로젝트 메타
|
|
10
|
-
|
|
11
|
-
- **이름**: <프로젝트명>
|
|
12
|
-
- **타입**: <frontend / backend / fullstack / cli / library / other>
|
|
13
|
-
- **소개 (한 줄)**: <도메인 / 비전>
|
|
14
|
-
- **상세**: `.project/PROJECT.md` 참조
|
|
15
|
-
|
|
16
|
-
> `/project-init` 호출 시 위 4 항목 채워짐. 변경 필요하면 직접 Edit.
|
|
17
|
-
|
|
18
|
-
---
|
|
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
|
-
4. **모호 발화 자의 해석 금지** — *"워크트리 없이"* / *"메인에서"* / *"이 자리에서 그냥"* 류로 읽히는 발화 = 코어 규칙(메인 워크트리 = 부모 브랜치 고정, task는 워크트리에서) 충돌 신호. 즉시 정지 + 규칙 한 줄 명시 + 1줄 confirm 요청. 자의 해석 후 진행 영구 금지. 사용자 의도가 *오타/모호*일 가능성을 *워크트리 사용*으로 읽는 게 자연스러움.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## 멀티세션 워크트리 (0.1.2+)
|
|
32
|
-
|
|
33
|
-
> 멀티세션 = 같은 프로젝트에서 *여러 메인 세션이 독립 태스크를 병렬*로 진행. git worktree로 작업 폴더 격리, 부모 브랜치 머지 시 직렬화.
|
|
34
|
-
|
|
35
|
-
- **메인 워크트리 = 부모 브랜치 고정**: 메인 워크트리는 `/task-init` 시점에 체크아웃돼 있는 브랜치(= 그 task의 *부모 브랜치*)를 유지한다. 개인 기본은 `dev`, 회사/로드맵은 `dev_feat_x` / `master` 등 — taskery는 *현재 서 있는 브랜치*를 부모로 삼는다(특정 이름 고정 X). 모든 태스크 작업은 *예외 없이* 별도 워크트리에서 수행. 진행 중 태스크가 있는 동안 메인 워크트리 HEAD를 옮기는 어떤 작업(`git checkout <task-branch>` / `git switch` / `git reset` HEAD 이동 / `git rebase` HEAD 이동 등)도 영구 금지 — close가 부모로 되병합해야 하므로 부모에 서 있어야 한다. *"잠깐만 메인에서"* / *"테스트 한 번만 메인에서"* 같은 예외 발화도 거부 — 별도 워크트리에서 처리. (부모 브랜치 자체를 바꾸려면 진행 중 태스크가 없을 때 원하는 브랜치로 체크아웃 후 새 task 시작.)
|
|
36
|
-
- **워크트리 위치**: `~/.taskery/worktrees/<projectId>/TASK-NNN_<출처>_<슬러그>/`
|
|
37
|
-
- `<projectId>`: `.taskery-manifest.json` `projectId` (8자 hex)
|
|
38
|
-
- `<출처>`: `BL-NNN` / `RM-NNN` / `DR`
|
|
39
|
-
- **`/task-init`이 부모 브랜치에서 워크트리 생성** + **`/task-close`가 부모 브랜치 머지 + 워크트리 자동 제거** (자동 흐름. 보존 키워드 `keep` / `브랜치 남겨` 등 발화 시 둘 다 보존).
|
|
40
|
-
- **메인 메타 접근**: 워크트리에서 `.project/`, `CLAUDE.md` 등 접근 시 *메인 워크트리 절대 경로* 사용:
|
|
41
|
-
```sh
|
|
42
|
-
MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
43
|
-
```
|
|
44
|
-
- **수동 git 작업 시 정합성 보장 X** — taskery 명령(스킬 / `npx @angar2/taskery <서브>`)으로만 운영.
|
|
45
|
-
- **CLI 보조 명령**:
|
|
46
|
-
- `npx @angar2/taskery status` — 진행중 태스크 + 워크트리 + 부모 머지 상태 요약
|
|
47
|
-
- `npx @angar2/taskery prune` — stale 워크트리 대화형 정리
|
|
48
|
-
|
|
49
|
-
상세: `.project/rules/GIT_RULE.md` "멀티세션 워크트리 정책" 섹션.
|
|
50
|
-
|
|
51
|
-
요건: git ≥ 2.31 (`--path-format=absolute` 옵션 필요).
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## agent teams 자동 병렬 (Claude 전용 · 실험 · 트리거 한정)
|
|
56
|
-
|
|
57
|
-
> 다건 태스크를 *리더 메인 세션 1개가 agent teams로 팀원(독립 세션)에 분배*해 자동 병렬 처리하는 고기능. 위 멀티세션을 사용자가 일일이 띄우는 대신 리더가 띄우고 관리한다. 워크트리 격리·머지 직렬화는 기존 `/task-init`·`/task-close`가 그대로 담당.
|
|
58
|
-
|
|
59
|
-
- **기본 플로우 아님** — 디폴트는 *1세션 1태스크*. *트리거 발화*(예: *"백로그 한 번에 진행해"* / *"팀에게 전부 독립으로 맡겨"*)가 있을 때만 `/run-team` 발동. 단일 태스크 의도(*"~ 기능 추가해줘"*)는 기존 `/task-init` 흐름.
|
|
60
|
-
- **활성화 전제** — agent teams는 실험 기능이라 기본 비활성. `~/.claude/settings.json`의 `env`에 `"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"` 설정 후 세션 재시작. (팀원을 split pane으로 보려면 최상위에 `"teammateMode": "tmux"`도 — `teammateMode`는 `env`가 아닌 최상위 키이며 기본값 `auto`는 환경 자동 감지 후 in-process 폴백.) 미설정이면 `/run-team`이 안내하고 중단(헛도는 것 방지).
|
|
61
|
-
- **팀원 = agent teams 팀원** — Task tool 서브에이전트 아님(독립 세션 · 자체 컨텍스트 · 사용자 직접 접근 가능).
|
|
62
|
-
- **Claude 전용** — agent teams가 Codex에 없어 Codex에서는 미지원.
|
|
63
|
-
|
|
64
|
-
상세: `.claude/skills/run-team/SKILL.md`.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 백로그 (0.1.2+)
|
|
69
|
-
|
|
70
|
-
> `.project/tasks/<NNN_slug>/BACKLOG.md` = *plan(기능 그룹)별 task 후보 누적*. 사용자 발화로 1건씩 얕은 분석(개요 / 대상 영역) 곁들여 추가.
|
|
71
|
-
|
|
72
|
-
- **`/add-backlog`**: 사용자 *"~ 백로그에 추가"* 발화 → 얕은 분석(코드 탐색 X, 추정 수준) → BL-NNN 채번 → BACKLOG.md append (`[ ]` 대기).
|
|
73
|
-
- **`/task-init` 연동**: 사용자 *"백로그의 BL-NNN 진행"* 발화 → 해당 항목 *확인 마킹*. `[ ]` → `[x]` + `- TASK: TASK-NNN` 추가 (다회 진행 시 콤마).
|
|
74
|
-
- **체크박스 의미**: `[ ]` = 미확인 (task로 옮기지 않은 메모) / `[x]` = 확인 완료 (task로 옮김). `[x]`는 *task로 옮겼다*는 메모일 뿐, 부모 머지·완료 여부와는 무관하다.
|
|
75
|
-
- **`[x]` 항목이 실제로 완료된 작업인지 굳이 확인하려 들지 않는다.** 진행·완료 상태는 백로그가 아니라 `taskery status`(살아있는 브랜치) + 부모 머지커밋이 판단한다.
|
|
76
|
-
- **머지 여부를 직접 알아야 할 경우에만** 아래 순서로 작업 완료 여부를 확인한다:
|
|
77
|
-
1. `taskery status` 진행중 목록에 그 TASK가 **있으면** → 아직 진행 중(부모 미머지)이므로 `git log --all --grep`이 비는 것이 정상이다. 재조회하지 않는다.
|
|
78
|
-
2. 목록에 **없으면** → `git log --all --grep 'BL-NNN'` + 브랜치명으로 작업 완료 여부를 확인한다.
|
|
79
|
-
- **글로벌 `.project/BACKLOG.md`** (다음 기능 그룹 후보 카탈로그) 는 본 흐름 무관 — `/plan-init` 영역.
|
|
80
|
-
|
|
81
|
-
상세: `.claude/skills/add-backlog/SKILL.md`.
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## 검증 명령
|
|
86
|
-
|
|
87
|
-
> *코드 상태 검증* (빌드 / 린트 / 타입체크). 테스트 실행은 본 섹션 X — `## 테스트 명령` 참조.
|
|
88
|
-
> `/task-dev` self-check / `/task-close` 최종 게이트가 *이 섹션을 단일 진실 소스로 참조*.
|
|
89
|
-
> 백틱(`...`) 안 명령 그대로 실행됨. 언어/프레임워크 따라 변경.
|
|
90
|
-
|
|
91
|
-
- 린트: `<예: npm run lint>`
|
|
92
|
-
- 타입체크: `<예: npm run typecheck>` (TypeScript / Flow / mypy 등 — 해당 시)
|
|
93
|
-
- 빌드: `<예: npm run build>`
|
|
94
|
-
|
|
95
|
-
> 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(\`\`)은 사용 금지.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 테스트 명령
|
|
100
|
-
|
|
101
|
-
> *테스트 실행* (단위 / 통합 / E2E 등). 코드 상태 검증은 `## 검증 명령` 참조.
|
|
102
|
-
> `/task-dev` 구현 후 테스트 + `/task-test` 격리 세션이 *이 섹션을 단일 진실 소스로 참조*.
|
|
103
|
-
> 백틱(`...`) 안 명령 그대로 실행됨. 언어/프레임워크 따라 변경.
|
|
104
|
-
|
|
105
|
-
- 단위 테스트: `<예: npm test>`
|
|
106
|
-
- 통합 테스트: `<예: npm run test:integration>` (있을 시)
|
|
107
|
-
- E2E 테스트: `<예: npx playwright test>` (있을 시)
|
|
108
|
-
|
|
109
|
-
> 위 항목 중 *프로젝트에 해당 없는 것*은 행 자체 삭제. 빈 백틱(\`\`)은 사용 금지.
|
|
110
|
-
|
|
111
|
-
> **검증 방법 → `.project/TEST-GUIDE.md`** — 각 테스트 방식(데이터 조회 / API 호출 / E2E / 시각 실행)을 *이 프로젝트에서 실제로 어떻게 돌리나*는 거기 단일 소스. `/task-plan`이 채우고 `/task-test` 격리 세션이 읽는다.
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 검수 실행 명령 (해당 시 — 앱 실행·검수가 필요한 프로젝트)
|
|
116
|
-
|
|
117
|
-
> `/task-dev`·`/task-test`가 검수 시점(세션 중단점)에 이 명령으로 서버를 *백그라운드* 기동하고 접속 URL을 보고한다.
|
|
118
|
-
> 멀티세션 포트 격리: 메인 세션(부모 브랜치) = 기준 포트, task 워크트리 = 기준 포트 + TASK번호. 상세는 GIT_RULE "멀티세션 검수 환경" 섹션.
|
|
119
|
-
> CLI/라이브러리 등 검수 서버가 없는 프로젝트는 본 섹션 전체 삭제.
|
|
120
|
-
|
|
121
|
-
- 기준 포트: `<예: 5100>`
|
|
122
|
-
- 실행 명령: `<예: npm run dev -- --port <PORT>>` (`<PORT>` = 기준 포트 + TASK번호, 메인은 기준 포트)
|
|
123
|
-
- 터널 (모바일 검수 등 필요 시 — 선택): `<예: cloudflared tunnel --url http://localhost:<PORT>>`
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## 룰 문서 참조
|
|
128
|
-
|
|
129
|
-
| 룰 | 위치 | 역할 |
|
|
130
|
-
|----|------|------|
|
|
131
|
-
| TASK_DOC_RULE | `.project/rules/TASK_DOC_RULE.md` | task 문서 양식 (헤더 6컬럼 / 6 섹션 / 7 상태) |
|
|
132
|
-
| GIT_RULE | `.project/rules/GIT_RULE.md` (있으면) → 글로벌 `~/.claude/rules/GIT_RULE.md` (fallback) | git 정책 (브랜치 / 커밋 / 머지) |
|
|
133
|
-
| CHANGELOG_RULE | `.project/rules/CHANGELOG_RULE.md` | CHANGELOG 작성 정책 (위치 / 형식 / 필수 필드) |
|
|
134
|
-
| MOCKUP_RULE | `.project/rules/MOCKUP_RULE.md` | UX/UI task의 HTML 목업 위치 / 형식 / 네이밍 |
|
|
135
|
-
| `*.local.md` | `.project/rules/` | (옵션) 사용자 오버라이드 — `*.local.md` suffix는 npx 미터치 |
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 스킬 — 공통 9종 + Claude 전용 1종(run-team)
|
|
140
|
-
|
|
141
|
-
| 스킬 | 레벨 | 역할 |
|
|
142
|
-
|------|------|------|
|
|
143
|
-
| `/project-init` | project | 진입 문서(PROJECT/AGENT-GUIDE/LINKED-REPOS/GLOSSARY/.env) + 제품 관통 문서(그룹 A 작성 / 그룹 B 골격, `.project/` 루트) 생성 (1회성) |
|
|
144
|
-
| `/plan-init` | plan | `.project/plans/<NNN_slug>/` PLAN/ROADMAP + 제품 관통 문서 FEATURES/UX-UI에 의도 추가 (plan = 기능 그룹 단위) |
|
|
145
|
-
| `/task-init` | task | task.md 빈 골격 + status=draft |
|
|
146
|
-
| `/task-plan` | task | Requirements/Scope/Dev Plan/Test Plan 작성 (draft → planned) |
|
|
147
|
-
| `/task-dev` | task | Phase 순서 구현 + self-check (planned → developed) |
|
|
148
|
-
| `/task-test` | task | Task tool 격리 검증 (developed → tested) |
|
|
149
|
-
| `/task-close` | task | 검증 명령 게이트 + 커밋 + 부모 브랜치 병합 (tested → closed) |
|
|
150
|
-
| `/add-backlog` | meta | 사용자 발화로 활성 plan BACKLOG.md에 항목 1건 추가 (얕은 분석 + BL-NNN 채번 — 0.1.2+) |
|
|
151
|
-
| `/log-friction` | meta | FRICTION_LOG.md에 사용자 불편 한 행 기록 |
|
|
152
|
-
| `/run-team` | meta · **Claude 전용** | agent teams로 다건 태스크를 팀원(독립 세션)에 분배해 자동 병렬 처리 — 트리거 발화 시에만 (실험 기능 전제). 위 "agent teams 자동 병렬" 섹션 참조 |
|
|
153
|
-
|
|
154
|
-
본문은 `.claude/skills/<스킬>/SKILL.md` 참조.
|
|
155
|
-
|
|
156
|
-
> `/run-team`은 Claude 전용 — agent teams(실험 기능)가 Codex에 없어 Codex 설치에는 미포함.
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Hook 안전망 — Catastrophic 2종
|
|
161
|
-
|
|
162
|
-
| Hook | 영역 | 잡는 것 |
|
|
163
|
-
|------|------|--------|
|
|
164
|
-
| `git-guard.sh` | PreToolUse(Bash) | main/dev 직접 커밋 / `--force` / `--no-verify` / `branch -D` / `reset --hard` / `clean -fd` |
|
|
165
|
-
| `closed-immutable.sh` | PreToolUse(Write\|Edit) | `closed` 상태 task.md 본 파일 재수정 차단 (정상 흐름은 새 task로). spec-diffs / screenshots / mockup은 자유 수정 (역사적 자료) |
|
|
166
|
-
|
|
167
|
-
**잘 지키면 hook 작동 0회 (무해). catastrophic만 차단.**
|
|
168
|
-
|
|
169
|
-
> 이전 `pre-commit-verify.sh` hook은 폐기 — task-close Step 2 게이트 + git-guard 안전망으로 충분 (redundant 검증 사이클 제거). 폐기 사유는 [plan/HOOKS.md](../plan/HOOKS.md) §5 참조.
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 불편 데이터
|
|
174
|
-
|
|
175
|
-
- **누적**: `.project/FRICTION_LOG.md` — 메인이 한 줄씩 추가 (사용자 불만 발화 캐치 또는 사용자 명시)
|
|
176
|
-
- **등록**: `/log-friction` 스킬 — 사용자 명시 호출 / 불만 발화 캐치 / task-close 직후 마찰 신호 자체 감지 시 한 행 기록
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## 동기화 룰 (사용자 의무)
|
|
181
|
-
|
|
182
|
-
> taskery는 *plan/ ↔ template/ 자동 빌드 X*. 사용자가 직접 정합 유지.
|
|
183
|
-
|
|
184
|
-
- **`.project/` 루트 제품 관통 문서 변경 시** → 관련 task의 `spec-diffs/` 갱신 (`/task-plan` Phase 0 흐름 — 진행 중 task 있으면)
|
|
185
|
-
- **`CLAUDE.md` 검증 명령 변경 시** → 모든 스킬 + hook이 그대로 따름. 별도 동기화 불필요
|
|
186
|
-
- **룰(`*.md` in `.project/rules/`) 변경 시** → 스킬 instruction이 다음 호출부터 변경 반영
|
|
187
|
-
- **`*.local.md` 사용자 오버라이드** → `npx @angar2/taskery update`가 미터치. 코어 룰 갱신 시 `*.bak` 백업 후 사용자 confirm
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## 멀티리포 통신 (해당 시)
|
|
192
|
-
|
|
193
|
-
- 송신: `.project/shared/sent/<filename>.md` 작성
|
|
194
|
-
- 수신: 연결 리포에서 `received/`로 카피 후 정독
|
|
195
|
-
- 처리 완료: `sent/completed/` 또는 `received/completed/`로 이동
|
|
196
|
-
- 연결 리포 경로: `.project/.env` (gitignore)
|
|
197
|
-
- 리포 목록: `.project/LINKED-REPOS.md`
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## 메인 세션 진입 시
|
|
202
|
-
|
|
203
|
-
1. 본 파일(`CLAUDE.md`) 정독 — 검증 명령 + 룰 위치 + 스킬 목록 파악
|
|
204
|
-
2. `.project/AGENT-GUIDE.md` 정독 — 활성 plan 버전 + 폴더 구조 + 작업 흐름
|
|
205
|
-
3. `.project/` 루트 제품 관통 문서(FEATURES / ARCHITECTURE 등) + `.project/plans/<활성 plan>/PLAN.md` 정독 — 활성 plan 인덱스 + 진행 상태
|
|
206
|
-
4. 사용자 발화 받기 → 적절한 스킬 호출 또는 직접 작업
|
|
1
|
+
@AGENTS.md
|
|
@@ -47,7 +47,27 @@ description: 사용자가 작업 흐름 중 겪은 불편(friction)을 .project/
|
|
|
47
47
|
### Step 3 — FRICTION_LOG.md 한 행 추가
|
|
48
48
|
|
|
49
49
|
`.project/FRICTION_LOG.md`를 Read한 후 마지막 행 다음에 신규 행을 Append(Edit)한다.
|
|
50
|
-
|
|
50
|
+
|
|
51
|
+
**파일이 없으면 아래 골격을 먼저 Write한 후 첫 행을 작성한다.** (taskery는 이 파일을 배포하지 않는다 — 첫 기록 시점에 생긴다.)
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
# FRICTION_LOG
|
|
55
|
+
|
|
56
|
+
> 사용자가 작업 흐름 중 겪은 불편 / 한계 / 짚이는 부분의 누적.
|
|
57
|
+
> `/log-friction` 스킬이 사용자 합의 후 한 행씩 추가한다.
|
|
58
|
+
|
|
59
|
+
**사용 규칙**:
|
|
60
|
+
- 한 행에 한 불편
|
|
61
|
+
- 손수 편집 X — 메인이 대화로 적음
|
|
62
|
+
- 사용자 명시 호출 / 사용자 불만 발화 캐치 / task-close 직후 마찰 신호 자체 감지 시 추가
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 불편 누적
|
|
67
|
+
|
|
68
|
+
| 날짜 | 불편 | 맥락 (어느 task / 스킬 / 카테고리) |
|
|
69
|
+
|------|------|-----------------------------------|
|
|
70
|
+
```
|
|
51
71
|
|
|
52
72
|
### Step 4 — 결과 보고
|
|
53
73
|
|
|
@@ -23,18 +23,18 @@ plan(기능 그룹)마다 호출. **plan = 작업을 묶는 기능 그룹 단위
|
|
|
23
23
|
- 인자 = plan slug (예: `/plan-init compare-products`). 없으면 *"어느 기능 그룹? slug 알려줘 (예: mvp, compare-products)"*. 한국어면 영어 *의미 변환* → kebab-case(공백 불가, 3 단어 이내).
|
|
24
24
|
- **자투리는 plan 없이** — 단발 버그·오타·의존성 업데이트는 plan-init 없이 `/task-init`로 바로(무소속). 전역 TASK-NNN이 순서 보장.
|
|
25
25
|
|
|
26
|
-
## 생성 (CLI —
|
|
26
|
+
## 생성 (CLI — 채번+폴더+골격+활성 plan 갱신)
|
|
27
27
|
|
|
28
|
-
`plan_init` 도구로 생성한다 (MCP 도구 `plan_init` 또는 동일 `npx @angar2/taskery plan-init <slug>`). 한 번으로 코드가 원자 수행: **NNN 채번**(3자리, 최대+1) · **폴더**(`plans/<NNN_slug>/` + `tasks/<NNN_slug>/{spec-diffs,screenshots,mockup}/`) · **골격 Write**(ROADMAP/PLAN/BACKLOG, 아래 형식 placeholder) ·
|
|
28
|
+
`plan_init` 도구로 생성한다 (MCP 도구 `plan_init` 또는 동일 `npx @angar2/taskery plan-init <slug>`). 한 번으로 코드가 원자 수행: **NNN 채번**(3자리, 최대+1) · **폴더**(`plans/<NNN_slug>/` + `tasks/<NNN_slug>/{spec-diffs,screenshots,mockup}/`) · **골격 Write**(ROADMAP/PLAN/BACKLOG, 아래 형식 placeholder) · **활성 plan 갱신**(`.taskery-manifest.json`의 `activePlan`). 성공 반환 `{ plan, nnn, planDir, tasksDir }` — 이후 단계는 이 `plan`(=`<NNN_slug>`) 사용. manifest 부재 시 에러 → *"`npx @angar2/taskery init` 먼저 실행 필요"* 안내 후 중단.
|
|
29
29
|
|
|
30
|
-
**legacy 게이트** — `plans/`에 NNN 채번 아닌 폴더(구버전 `v1.0`/`alpha` 등) 잔존 시 `{gated:true, legacyDirs}`로 멈춘다(폴더 생성 X). 사용자 호출 + 경고: *"`plans/`에 NNN 채번 아닌 폴더(<legacyDirs>)가 있어. 새 plan을 NNN로 채번하면 활성 plan이 갈려 원래 문제 재발. 수동 이전(문서 루트 이동 + `NNN_slug` 리네임 +
|
|
30
|
+
**legacy 게이트** — `plans/`에 NNN 채번 아닌 폴더(구버전 `v1.0`/`alpha` 등) 잔존 시 `{gated:true, legacyDirs}`로 멈춘다(폴더 생성 X). 사용자 호출 + 경고: *"`plans/`에 NNN 채번 아닌 폴더(<legacyDirs>)가 있어. 새 plan을 NNN로 채번하면 활성 plan이 갈려 원래 문제 재발. 수동 이전(문서 루트 이동 + `NNN_slug` 리네임 + `plan-switch`로 활성 plan 갱신) 후 진행할지, 그래도 진행할지 결정해줘."* → 강행 시 `force:true`(CLI는 `--force`)로 재호출.
|
|
31
31
|
|
|
32
|
-
> 폴더 생성·`tasks/<NNN_slug
|
|
32
|
+
> 폴더 생성·`tasks/<NNN_slug>/`·활성 plan 갱신은 코드가 완료 — 아래는 골격 placeholder를 *내용으로 채우는* 단계(LLM 판단)다.
|
|
33
33
|
|
|
34
34
|
## ROADMAP.md 내용 채우기
|
|
35
35
|
|
|
36
36
|
*현재 plan 한정* task 단계를 placeholder에 채운다. *ROADMAP 작성 4룰*:
|
|
37
|
-
1. *현재 plan 한정* — 다른 기능 그룹 후보는 글로벌 `.project/BACKLOG.md
|
|
37
|
+
1. *현재 plan 한정* — 다른 기능 그룹 후보는 글로벌 `.project/BACKLOG.md`(**없으면 본 스킬이 이때 생성한다**: 제목 + `## 다음 기능 그룹 후보` 헤더만). 프로젝트 전체 거시 빌드 순서는 `PROJECT.md ## 초기 빌드 로드맵`(별개).
|
|
38
38
|
2. 진행 순서에 task 번호(TASK-NNN) 강제 금지 — *Stage(영역) 단위*로만 (task 합류 시 번호 어긋남 방지).
|
|
39
39
|
3. Stage 안 *작업 단위 명시*(한 task 분량 권장 — 다음 task 진행 시 메인이 ROADMAP 보고 범위 판단).
|
|
40
40
|
4. 작업 단위에 task 번호 컬럼 X / *상태 컬럼만*(⏳ 대기 / 🔧 진행 중 / ✅ 완료 / ❌ 폐기) — Living document.
|
|
@@ -57,7 +57,7 @@ PLAN.md는 *얇은 인덱스*다 — 이 기능 그룹이 건드린 루트 문
|
|
|
57
57
|
|
|
58
58
|
**하드룰 (중복 차단):**
|
|
59
59
|
- **각 항목 = 루트 문서 섹션 *링크 1줄*. 본문 복제 금지.** 기능 상세는 `.project/` 루트 문서에만(단일 홈).
|
|
60
|
-
- `## 활성 task 버전` 류 *자기선언 라인 작성 금지* — 활성 plan 단일 진실은 `
|
|
60
|
+
- `## 활성 task 버전` 류 *자기선언 라인 작성 금지* — 활성 plan 단일 진실은 `.taskery-manifest.json`의 `activePlan`뿐(조회는 `status`, 전환은 `plan-switch`).
|
|
61
61
|
|
|
62
62
|
```markdown
|
|
63
63
|
# PLAN — <NNN_slug>
|
|
@@ -77,7 +77,7 @@ PLAN.md는 *얇은 인덱스*다 — 이 기능 그룹이 건드린 루트 문
|
|
|
77
77
|
|
|
78
78
|
`.project/` 루트 문서에 이 기능 그룹의 *의도*를 명시한다. **의도 레벨만 — 상세 선작성 금지.**
|
|
79
79
|
|
|
80
|
-
- **FEATURES.md / UX-UI.md (필수)**: 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append. "무엇 / 어떤 화면" — 구현 전에도 선언 가능(기능 그룹 기획의 본질). 섹션은 *기능/도메인 자기기술* — 어느 plan이 추가했는지 태그 X(기능 분류 = 제품 관통 문서 섹션 구조가 단일 진실).
|
|
80
|
+
- **FEATURES.md / UX-UI.md (있을 때 필수)**: 이 기능 그룹의 *섹션 헤더 + 의도 스텁* append. **파일이 없으면**(=`/project-init` 미실행 또는 타입상 해당 없음) 새로 만들지 말고 이 항목을 생략한 뒤, CLI가 쓴 `PLAN.md` 골격의 해당 링크 줄도 지운다 — 없는 문서를 가리키는 링크가 남으면 이후 세션이 계속 헤맨다. "무엇 / 어떤 화면" — 구현 전에도 선언 가능(기능 그룹 기획의 본질). 섹션은 *기능/도메인 자기기술* — 어느 plan이 추가했는지 태그 X(기능 분류 = 제품 관통 문서 섹션 구조가 단일 진실).
|
|
81
81
|
```markdown
|
|
82
82
|
## <기능 그룹 이름>
|
|
83
83
|
<의도 1~3줄: 무엇을 / 누구를 위해 / 핵심 화면·동작. 상세 스펙은 task 진행에서.>
|
|
@@ -90,7 +90,7 @@ PLAN.md는 *얇은 인덱스*다 — 이 기능 그룹이 건드린 루트 문
|
|
|
90
90
|
## 결과 보고
|
|
91
91
|
|
|
92
92
|
작성 산출물 목록 + 다음 단계:
|
|
93
|
-
- *"`<NNN_slug>/` plan 생성 완료 — PLAN/ROADMAP + FEATURES/UX-UI 의도 stub.
|
|
93
|
+
- *"`<NNN_slug>/` plan 생성 완료 — PLAN/ROADMAP + FEATURES/UX-UI 의도 stub. 활성 plan `<NNN_slug>` 갱신. 다음은 `/task-init`으로 첫 task (스키마/엔드포인트 상세는 task 진행에서 구현 동반)."*
|
|
94
94
|
|
|
95
95
|
**commit 흐름** (GIT_RULE): 현재 브랜치(= 부모)가 dev/main이면 직접 commit *금지*(git-guard 차단). default 둘:
|
|
96
96
|
1. **첫 task에 묶기 (권장)**: `/project-init` 직후면 init 산출물과 같은 작업 브랜치(보통 TASK-001 부트스트랩 chore)에 함께. 새 기능 그룹이면 새 task 브랜치 또는 임시 docs 브랜치.
|