@angar2/taskery 0.5.0 → 0.6.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.
- package/README.md +11 -5
- package/bin/close.js +2 -2
- package/bin/fork.js +5 -2
- package/bin/lib.js +128 -57
- package/bin/mcp.js +4 -3
- package/bin/status.js +6 -3
- package/package.json +1 -1
- package/template/.claude/hooks/closed-immutable.sh +5 -3
- package/template/.codex/agents/task-tester.toml +6 -3
- package/template/.codex/hooks/closed-immutable.sh +2 -2
- package/template/.project/TEST-GUIDE.md +11 -0
- package/template/.project/rules/GIT_RULE.md +32 -19
- package/template/.project/rules/TASK_DOC_RULE.md +12 -10
- package/template/AGENTS.md +16 -14
- package/template/CLAUDE.md +16 -14
- package/template/shared/skills/add-backlog/SKILL.md +1 -1
- package/template/shared/skills/plan-init/SKILL.md +2 -2
- package/template/shared/skills/project-init/SKILL.md +2 -2
- package/template/shared/skills/task-close/SKILL.md +53 -24
- package/template/shared/skills/task-dev/SKILL.md +33 -2
- package/template/shared/skills/task-init/SKILL.md +16 -16
- package/template/shared/skills/task-plan/SKILL.md +17 -10
- package/template/shared/skills/task-test/SKILL.md +64 -11
|
@@ -53,6 +53,7 @@ MAIN_WT=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)")
|
|
|
53
53
|
- 인자 없음 → `developed` 상태 가장 최근 task. 발견 시 confirm. 없으면 *"검증할 task 없음."* + 종료.
|
|
54
54
|
3. 상태 = `developed` 검증. `testing`이면 이어가기 (Step 2 skip). 그 외면 종료.
|
|
55
55
|
4. `## Test Plan` 섹션 + `## Dev Plan`의 Phase별 *완료 기준* 정독. 자기완결성 점검 — 다른 문서 참조나 *"위에서 만든 X"* 같은 표현 있으면 사용자에게 보고 + Test Plan 보강 후 재시도.
|
|
56
|
+
5. **프로젝트 로컬 룰 확인** — `$MAIN_WT/.project/rules/TEST_RULE.local.md`가 있으면 Read한다 (없으면 넘어간다). 검증 범위·방식에서 본 스킬 조항과 겹치면 **로컬 룰 우선**. 단 멀티세션 불변식·destructive 승인·상태 전이 유효성은 로컬이 뒤집지 못한다.
|
|
56
57
|
|
|
57
58
|
### Step 2 — status 전환 (developed → testing)
|
|
58
59
|
|
|
@@ -71,17 +72,19 @@ Task tool로 sub-agent spawn. prompt는 *자기완결적* — task.md 경로 +
|
|
|
71
72
|
|
|
72
73
|
task 파일 경로: <ABSOLUTE_PATH_TO_TASK_MD>
|
|
73
74
|
검증 방법 문서: <ABSOLUTE_PATH_TO_TEST_GUIDE_MD>
|
|
75
|
+
프로젝트 검증 정책(있을 때만): <ABSOLUTE_PATH_TO_TEST_RULE_LOCAL_MD>
|
|
74
76
|
|
|
75
|
-
task 파일을 직접 Read 해서 ## Test Plan 섹션 + ## Dev Plan의 Phase별 완료 기준을 정독하세요. 그리고 *검증 방법 문서(TEST-GUIDE.md)* 도 직접 Read — 각 테스트 방식을 *이 프로젝트에서 실제로 어떻게 실행하나*(DB 조회 경로 / API 호출법 / E2E 셋업 등)의 단일 소스입니다.
|
|
77
|
+
task 파일을 직접 Read 해서 ## Test Plan 섹션 + ## Dev Plan의 Phase별 완료 기준을 정독하세요. 그리고 *검증 방법 문서(TEST-GUIDE.md)* 도 직접 Read — 각 테스트 방식을 *이 프로젝트에서 실제로 어떻게 실행하나*(DB 조회 경로 / API 호출법 / E2E 셋업 등)의 단일 소스입니다. 위에 경로로 명시된 문서(task 파일 · 검증 방법 문서 · 프로젝트 검증 정책) + 목업 외 다른 문서 참조 X.
|
|
76
78
|
(단 task.md가 `mockup/<task-doc-name>-mockup.html` 참조하면 해당 목업 파일도 직접 Read — *승인된 목업 = 시각 시나리오의 정답지*입니다. 시각 시나리오 = 실제 화면 캡처 → 이 목업과 자동 대조.)
|
|
79
|
+
프로젝트 검증 정책 파일이 경로로 주어졌으면 그것도 Read한다 — 이 프로젝트 고유의 검증 범위·방식 규칙이며, 위 수행 룰과 겹치는 항목은 그쪽을 우선한다(멀티세션 불변식·안전 조항 제외).
|
|
77
80
|
|
|
78
81
|
## 수행 룰
|
|
79
82
|
|
|
80
83
|
1. **본질 — Test Plan 시나리오 기반 실질 동작 검증**. 본 task에서 구현한 *요구사항이 정상 동작하는지* 검증이 목적. 단위 테스트 수치(카운트 +N / 모든 PASS) 자체로 task PASS 단정 절대 X — Test Plan에 명시된 *각 시나리오*가 PASS인지가 본질.
|
|
81
84
|
2. ## Test Plan 시나리오를 *순서대로* 그대로 수행. 임의 추가 / 스킵 / 변형 금지. 각 시나리오의 `[AUTO]` / `[USER]` 분류 (task-plan에서 정의됨) 그대로 따름.
|
|
82
85
|
3. `[AUTO]` 시나리오 — *실제 명령 실행*. 실행 없이 pass 처리 절대 금지. 검증 도구 (단위/통합/E2E 테스트 / API 호출 / 스크립트 실행 등) 직접 수행 + 결과 로그 확보.
|
|
83
|
-
4. `[USER]` 시나리오 — *정답지가 주관*인 영역만 (시각 미세 취향 / 색조·여백 2px 수준 / UX 사용감·매끄러움). UNCERTAIN(사람 검수)으로 분류 + *사용자 직접 검수 항목*으로 리턴 (단 증거=캡처 첨부). **시각 *객관* 영역(레이아웃 깨짐 / 요소 빠짐 / 빈 화면 / 색 완전히 틀림 / 배치 딴판)은 `[USER]`가 아니라 `[AUTO]`** — 실제 화면 캡처 → 승인 목업과 직접 대조해 격리 세션이 판정. (시각이라고 무조건 사람에게 넘기지 말 것 — 객관 깨짐은 네가 잡는다.)
|
|
84
|
-
5. CLAUDE.md `## 검증 명령` (빌드/린트/타입체크) + `## 테스트 명령` (단위/통합/E2E 테스트) 둘 다 직접 실행 + 결과 리턴.
|
|
86
|
+
4. `[USER]` 시나리오 — *정답지가 주관*인 영역만 (시각 미세 취향 / 색조·여백 2px 수준 / UX 사용감·매끄러움). UNCERTAIN(사람 검수)으로 분류 + *사용자 직접 검수 항목*으로 리턴 (단 증거=캡처 첨부). **시각 *객관* 영역(레이아웃 깨짐 / 요소 빠짐 / 빈 화면 / 색 완전히 틀림 / 배치 딴판)은 `[USER]`가 아니라 `[AUTO]`** — 실제 화면 캡처 → 승인 목업과 직접 대조해 격리 세션이 판정. **단 이 승격은 TEST-GUIDE.md *시각 실행* 절에 이 프로젝트의 캡처 실행 경로가 있을 때 한정이다** — 경로가 없어 task.md가 시각 시나리오를 `[USER]`로 분류했다면 그 분류를 존중하고 `[AUTO]`로 뒤집지 않는다. (시각이라고 무조건 사람에게 넘기지 말 것 — 객관 깨짐은 네가 잡는다.)
|
|
87
|
+
5. CLAUDE.md `## 검증 명령` (빌드/린트/타입체크) + `## 테스트 명령` (단위/통합/E2E 테스트) 둘 다 직접 실행 + 결과 리턴. **단 화면·입력을 점유하는 스위트는 룰 17의 제약을 먼저 따른다** (무단 실행 금지 — 룰 17이 본 룰보다 우선).
|
|
85
88
|
6. **신규 테스트 식별자 등장 확인 (stash FRICTION_LOG #19 반영)** — 본 task에서 신규 테스트 추가되었으면, 단순 *카운트 +N / 모든 PASS* 자체로 PASS 단정 X. 신규 *테스트 식별자* (suite / class / function / describe 등) 가 테스트 runner 결과 로그에 *실제 등장*했는지 grep 직접 확인 (1 hit 이상). 등장 안 하면 *Suite 미실행* → FAIL.
|
|
86
89
|
7. 코드와 동작만 신뢰. *"잘 될 거야"* / *"문제 없을 듯"* 같은 가정 일체 금지.
|
|
87
90
|
8. 코드 파일 직접 수정 절대 금지. 임시 파일(테스트 스크립트 등) 생성 시 종료 후 삭제.
|
|
@@ -89,19 +92,26 @@ task 파일을 직접 Read 해서 ## Test Plan 섹션 + ## Dev Plan의 Phase별
|
|
|
89
92
|
10. **grep/Read-only 존재 확인 시나리오 = 보조 검증** (stash FRICTION_LOG 2026-06-01 반영) — 시나리오가 *코드/파일에 X가 존재하나*를 grep / Read로 재확인하는 형태(동어반복)면 *보조 검증*으로 분류. 종합 판정의 PASS 카운트에서 제외하고, 같은 영역의 *실동작 시나리오*가 PASS인 경우에만 보조 자료로 첨부. 단독 PASS 가치 X. 실동작 시나리오 없이 grep-only 시나리오만으로 종합 PASS 단정 영구 금지 — 그 경우 *실동작 시나리오 부재*로 UNCERTAIN/FAIL 판정 + 메인 보고.
|
|
90
93
|
11. **문 앞 검사 — 실행 전 시험문제 자격 확인 (먼저)**. 시나리오를 돌리기 *전에*, 각 `[AUTO]` 시나리오가 **[실행할 명령/입력] + [구체적 기대값(관측 가능한 결과 — 출력값 / 상태코드 / 어서션 / 조회 결과 / 화면 상태)]** 한 쌍을 갖췄는지 확인. *"정상 동작" / "잘 됨" / "확인한다"* 같은 *소원*은 기대값이 아님. 자격 미달 `[AUTO]` 시나리오가 있으면 → **그 시나리오는 검사하지 말고 "시험문제 결함(검증 불가)"으로 분류** + 무엇이 빠졌는지 지목 (아래 룰 13). 자격 미달을 PASS로 반올림 영구 금지.
|
|
91
94
|
12. **증거 일치 시만 PASS**. 자격을 갖춘 `[AUTO]` 시나리오는 *실제로 실행*하여 — *관측한 결과가 기대값과 일치할 때만* PASS. 코드 정독 "그럴듯함" / 추정 / "될 듯"으로 PASS 영구 금지. 증거(명령 출력 · 응답 로그 · 캡처 · 조회 결과)를 결과 표 근거 칸에 첨부.
|
|
92
|
-
13. **UNCERTAIN
|
|
95
|
+
13. **UNCERTAIN 세 종류 — 섞지 말 것**.
|
|
93
96
|
- **UNCERTAIN(사람 검수)** — 정답지가 *주관*인 영역(룰 4: 시각 미세 취향 / UX 느낌). 정상. 사용자 직접 검수 항목으로 리턴 (증거 캡처 첨부).
|
|
94
97
|
- **UNCERTAIN(검증 불가)** — `[AUTO]`로 분류됐는데 *대조할 기대값을 구성하지 못한* 경우 = **시험문제 결함**. PASS로 반올림 금지, 사람 검수로도 넘기지 말 것(주관 아님). **근거 의무**: *무엇을 시도했고 왜 기대값을 구성할 수 없는지* 반드시 기록. (이건 네가 쉴 자리가 아니라 task-plan으로 되돌아가 Test Plan을 보수해야 하는 신호 — 도망쳐도 이득 없음.)
|
|
95
|
-
|
|
98
|
+
- **UNCERTAIN(실행 보류)** — 룰 17에 걸려 *실행하지 않은* 경우 = 시험문제도 코드도 아닌 **환경 제약**. 사용자 승인 또는 격리 실행 경로 마련이 필요하다는 신호이므로, PASS·FAIL 어느 쪽으로도 반올림하지 말고 *무엇을 왜 실행하지 않았는지*(어느 스위트가 무엇을 점유하는지)를 기록해 리턴한다.
|
|
99
|
+
14. **시각 `[AUTO]` 시나리오 = 캡처-목업 대조**. 앱을 띄워 실제 화면을 캡처 → 승인된 목업(정답지)과 대조. (본 룰은 TEST-GUIDE에 캡처 실행 경로가 있는 경우에만 적용된다. 경로가 없으면 해당 시나리오는 `[USER]`이며 룰 4 단서에 따른다.) 어긋나면 → *구체적 어긋남 목록*(예: "헤더 색 틀림 / 카드가 가로 아닌 세로로 쌓임 / 저장 버튼 없음")을 뽑아 **FAIL**로 보고. 합격선 = *픽셀 일치가 아니라* "사람이 보면 '이거네' 할 정도로 본질적으로 같다" (객관적 깨짐만 잡고 미세 취향은 룰 4로). 증거 = 스크린샷 + 어긋남 목록.
|
|
100
|
+
|
|
101
|
+
15. **픽스처 현실성 의심 + 재생성 판정**. 시나리오가 쓰는 픽스처·시드 데이터가 *실제 산출물과 형식·정밀도가 같은지* 의심하라 (예: 실제 엔진은 소수 시각을 쓰는데 픽스처는 정수만 심는 경우 — 비교 결함이 통째로 가려진다). 의심되면 **실제 코드(writer·생성기)로 픽스처를 재생성해 시나리오를 재실행하고, 그 결과로 판정**한다. 재생성 경로가 없어 대조를 구성할 수 없으면 그 시나리오는 *시험문제 결함(검증 불가)*으로 분류한다. 손으로 심은 픽스처는 구현자의 맹점을 그대로 복제하므로, 통과했다는 사실만으로 안전하다고 보지 않는다.
|
|
102
|
+
16. **어서션 정면성**. 각 시나리오의 기대값이 요구사항을 *정면으로* 겨누는지 확인하라. "셋업을 벗어날 수 없다"가 요구사항이면 **실제로 벗어나 보는 것**이 정면이고, 버튼이 `disabled`인지 보는 것은 우회 지표다 — 우회 지표는 통로가 열려 있어도 통과한다. 우회 지표로 검사하는 `[AUTO]` 시나리오를 발견하면 그 시나리오는 *시험문제 결함(검증 불가)*으로 분류하고, 무엇이 정면 관측인지 함께 지목한다.
|
|
103
|
+
|
|
104
|
+
17. **화면·입력 점유 스위트 자동 실행 금지**. 실제 앱을 띄워 UI를 자동 조작하는 스위트(XCUITest·headed 브라우저 E2E 등)는 사용자의 화면·마우스·키보드를 점유해 작업을 중단시킨다. TEST-GUIDE.md *테스트 실행 환경* 절에 **격리 실행 경로**(창 숨김·헤드리스 플래그 / 컨테이너·가상 디스플레이 / VM / CI 러너)가 선언돼 있으면 그 경로로 실행한다. 선언이 없으면 — 비점유 부분만 한정 실행할 수 있으면 그것만 실행하고, 한정 수단도 없으면 **실행하지 말고** 해당 시나리오를 *실행 보류(사용자 승인 필요)*로 표시해 메인에 리턴한다 (무단 실행 금지). 헤드리스 모드가 있으면 항상 그쪽을 쓴다.
|
|
96
105
|
|
|
97
106
|
## 결과 형식 (이 포맷 그대로 리턴)
|
|
98
107
|
|
|
99
108
|
### 종합 판정
|
|
100
109
|
- **PASS** / **FAIL** / **UNCERTAIN** 중 하나
|
|
101
|
-
- **UNCERTAIN** = 아래
|
|
110
|
+
- **UNCERTAIN** = 아래 셋 중 하나라도 1개 이상이면. *세 경우 모두 PASS 자동 전이 X* (공통). 그 다음 종류에 따라 라우팅이 갈림:
|
|
102
111
|
- **UNCERTAIN(사람 검수)** — 정답지가 주관인 `[USER]` 항목. → 사용자 직접 검수.
|
|
103
112
|
- **UNCERTAIN(검증 불가)** — `[AUTO]`인데 기대값 구성 불가 = 시험문제 결함. → task-plan으로 Test Plan 보수 (사람 검수 아님). 어느 시나리오가 왜 검증 불가인지 명시.
|
|
104
|
-
-
|
|
113
|
+
- **UNCERTAIN(실행 보류)** — 룰 17에 걸려 실행하지 않음 = 환경 제약. → 메인이 사용자 승인을 받아 실행하거나, 격리 실행 경로를 마련한 뒤 재검증. 어느 스위트가 무엇을 점유하는지 명시.
|
|
114
|
+
- 종합이 UNCERTAIN일 때 *세 종류 중 무엇인지* 반드시 표기 (여럿이면 전부).
|
|
105
115
|
- 한 줄 요약
|
|
106
116
|
|
|
107
117
|
### 시나리오별 결과
|
|
@@ -132,6 +142,10 @@ task 파일을 직접 Read 해서 ## Test Plan 섹션 + ## Dev Plan의 Phase별
|
|
|
132
142
|
- <시나리오 N: 무엇이 [AUTO]인데 기대값을 못 만들었나 + 무엇을 시도했나 + 왜 불가한가>
|
|
133
143
|
→ task-plan으로 Test Plan 보수 필요 (이 시나리오를 [실행 명령 + 구체적 기대값]으로 다시 작성).
|
|
134
144
|
|
|
145
|
+
### 실행 보류 (UNCERTAIN 실행 보류 — 해당 시)
|
|
146
|
+
- <어느 시나리오/명령을 실행하지 않았나 + 무엇을 점유하는가(화면·마우스·키보드·전역 단축키 등) + 비점유 부분만 실행했다면 그 범위>
|
|
147
|
+
→ 메인이 사용자 승인을 받아 실행하거나, TEST-GUIDE *테스트 실행 환경* 절에 격리 실행 경로를 마련한 뒤 재검증 필요.
|
|
148
|
+
|
|
135
149
|
## 종료 조건
|
|
136
150
|
|
|
137
151
|
위 형식 그대로 리턴 후 종료. 코드 수정 시도 금지 — 결과 리턴만.
|
|
@@ -140,6 +154,7 @@ task 파일을 직접 Read 해서 ## Test Plan 섹션 + ## Dev Plan의 Phase별
|
|
|
140
154
|
**구현 디테일**:
|
|
141
155
|
- `<ABSOLUTE_PATH_TO_TASK_MD>` 자리에 `.project/tasks/<NNN_slug>/<NNN>_<slug>.md` (또는 폴더 승격 시 `<...>/task.md`)의 절대 경로 삽입.
|
|
142
156
|
- `<ABSOLUTE_PATH_TO_TEST_GUIDE_MD>` 자리에 `$MAIN_WT/.project/TEST-GUIDE.md`의 절대 경로 삽입 (위 "멀티세션 메타 위치"의 `MAIN_WT` 사용 — 워크트리에서 호출돼도 메인 워크트리의 단일 소스를 읽도록).
|
|
157
|
+
- `<ABSOLUTE_PATH_TO_TEST_RULE_LOCAL_MD>` 자리에 `$MAIN_WT/.project/rules/TEST_RULE.local.md`의 절대 경로 삽입. **파일이 없으면 그 줄 자체를 prompt에서 제외**한다 (없는 경로를 넘기면 격리 세션이 헤맨다).
|
|
143
158
|
- Task tool의 `subagent_type`: `general-purpose` (도구 풀 다 필요).
|
|
144
159
|
- Task tool의 `description`: `Isolated test for TASK-<NNN>`.
|
|
145
160
|
- **코덱스 spawn (플랫폼 패리티)**: 코덱스에선 `.codex/agents/task-tester.toml`의 `task-tester` 서브에이전트로 spawn하되, *위 펜스 전체를 task prompt로 그대로 전달*한다 — 펜스가 양 플랫폼 공통 단일 룰 소스다(클로드 = `general-purpose` + 펜스 / 코덱스 = `task-tester` + 펜스, 동일 효과). `task-tester`의 `developer_instructions`는 같은 룰의 코덱스 기준선 미러 — 본 펜스의 수행 룰을 바꾸면 그 `developer_instructions`도 함께 갱신한다.
|
|
@@ -213,11 +228,35 @@ task 파일을 직접 Read 해서 ## Test Plan 섹션 + ## Dev Plan의 Phase별
|
|
|
213
228
|
```
|
|
214
229
|
3. `/task-plan`은 *Test Plan 섹션만* 보수 (Requirements / Scope / Dev Plan / 코드 보존). 보수 후 `/task-test` 재실행 (코드 미변경이므로 `/task-dev` 재실행 없음). status는 `testing` 유지.
|
|
215
230
|
|
|
231
|
+
#### UNCERTAIN(실행 보류) 분기 — 환경 제약 → 승인 또는 격리 경로
|
|
232
|
+
|
|
233
|
+
격리 세션이 화면·입력 점유(룰 17)를 이유로 실행하지 않은 시나리오를 보고한 경우. 코드 결함도 시험문제 결함도 아니므로 `/task-dev`·`/task-plan` 어느 쪽으로도 보내지 않는다.
|
|
234
|
+
|
|
235
|
+
1. status는 `testing` 그대로 유지 (코드·시험문제 모두 멀쩡).
|
|
236
|
+
2. 사용자에게 보고 + 선택지 제시:
|
|
237
|
+
```
|
|
238
|
+
⏸ TASK-<NNN> 격리 검증 — 실행 보류 (환경 제약)
|
|
239
|
+
- 보류 시나리오: <목록 + 어느 스위트가 무엇을 점유하는지 + 예상 소요>
|
|
240
|
+
- 비점유 부분 결과: <이미 실행한 범위의 PASS/FAIL>
|
|
241
|
+
|
|
242
|
+
어떻게 할까?
|
|
243
|
+
1. "지금 돌려" — 승인받아 실행 (그동안 화면·마우스·키보드를 사용할 수 없음)
|
|
244
|
+
2. "나중에" — 자리를 비울 때 실행하도록 보류 유지
|
|
245
|
+
3. "격리 경로 만들자" — 창 숨김·헤드리스 / 컨테이너 / VM / CI 중 하나를 마련 후 재검증 (다음 task부터 승인 없이 자동 실행됨)
|
|
246
|
+
4. "보류인 채로 마무리해" — 미검증 영역으로 명시하고 tested 전이 (위험: 이 영역은 검증 안 된 채 closed)
|
|
247
|
+
```
|
|
248
|
+
3. 사용자 응답별 처리:
|
|
249
|
+
- **"지금 돌려"** → 승인받았으므로 점유 스위트를 실행하고, 그 결과로 PASS / FAIL 분기를 따른다.
|
|
250
|
+
- **"나중에"** → 보류 유지. status는 `testing` 그대로 두고 **여기서 멈춘다** (`/task-close`로 넘어가지 않는다 — close는 `tested`가 아니면 `blocked:'status'`로 차단된다). 사용자가 자리를 비운 뒤 *"이제 돌려"* 하면 위 "지금 돌려"로 재개.
|
|
251
|
+
- **"격리 경로 만들자"** → 경로(창 숨김·헤드리스 / 컨테이너 / VM / CI)를 마련하고 `TEST-GUIDE.md` *테스트 실행 환경* 절에 기록한 뒤 `/task-test` 재실행. 다음 task부터는 승인 없이 자동 실행된다.
|
|
252
|
+
- **"보류인 채로 마무리해"** (알려진 미검증 감수) → FAIL 분기의 *"OK 마무리"*와 동일 처리 — `set_status` 도구로 `tested` 전이(또는 `npx @angar2/taskery set-status TASK-<NNN> tested`) + Result 섹션에 *"미검증 영역: <보류 시나리오> — 사유: 화면·입력 점유, 사용자 판단으로 미실행"* 명시 후 `/task-close` 안내.
|
|
253
|
+
4. **묵묵히 PASS 처리 금지** — 어느 경로로 가든 보류된 시나리오는 Result에 *미검증 영역*으로 남긴다. 실행하지 않은 것을 통과로 적지 않는다.
|
|
254
|
+
|
|
216
255
|
#### UNCERTAIN(사람 검수) 분기 (USER 검수 흐름)
|
|
217
256
|
|
|
218
257
|
격리 세션이 `[USER]` 시나리오(정답지가 *주관*인 영역 — 시각 미세 취향 / UX 느낌) 발견 시. **자동 PASS 전이 X — 사용자 직접 검수 PASS 받은 후에만 `tested` 전이**. (시각 *객관* 깨짐은 여기 아니라 FAIL — 격리 세션이 캡처-목업 대조로 이미 잡음.)
|
|
219
258
|
|
|
220
|
-
> **검수 서버 먼저 기동** (`## 검수 실행 명령` 선언 + 시각/UI 검수 항목 포함 시): 체크리스트를 제시하기 *전에* 서버를 백그라운드 기동(포트 = 기준 포트 + TASK번호)하고 접속 URL을 함께 제공한다 — 사용자가 실제 화면을 보며 ✓/✗ 검수하도록. 격리 세션이 기능상 이미 띄웠으면 재사용. 사용자 *"안 띄워도 돼"* 시 생략. 상세: GIT_RULE "멀티세션 검수 환경".
|
|
259
|
+
> **검수 서버 먼저 기동** (`## 검수 실행 명령` 선언 + 시각/UI 검수 항목 포함 시): 체크리스트를 제시하기 *전에* 서버를 백그라운드 기동(포트 = 기준 포트 + TASK번호)하고 접속 URL을 함께 제공한다 — 사용자가 실제 화면을 보며 ✓/✗ 검수하도록. 격리 세션이 기능상 이미 띄웠으면 재사용. 사용자 *"안 띄워도 돼"* 시 생략. 기동 전 포트·프로세스 확인 + 종료 시 자식까지 정리. 상세: GIT_RULE "멀티세션 검수 환경".
|
|
221
260
|
|
|
222
261
|
1. 메인이 사용자에게 *체크리스트 형식*으로 항목 보고 (stash FRICTION_LOG #14+19 반영):
|
|
223
262
|
|
|
@@ -231,8 +270,19 @@ USER 검수 — N 항목 (목업 기준: <mockup path — 있을 시>)
|
|
|
231
270
|
각 항목 ✓/✗ 응답
|
|
232
271
|
```
|
|
233
272
|
|
|
273
|
+
**검수 항목 작성 규칙 (recordion FRICTION 2026-08-05 반영)**:
|
|
274
|
+
|
|
275
|
+
- 각 항목은 **① 왜 이 검수가 필요한지 → ② 화면 어디를 어떻게 조작하는지 → ③ 무엇이 보이면 정상이고 무엇이 문제인지** 세 요소를 모두 담는다. 하나라도 빠지면 사용자가 무엇을 봐야 할지 알 수 없다.
|
|
276
|
+
- **평이한 말로 쓴다** — 축약어·세션 내부 용어·task 진행 중에만 통하던 지칭(*"아까 그 화면"*, *"Phase 2 결과물"*) 금지. 이 프로젝트를 처음 보는 사람이 읽어도 따라 할 수 있어야 한다.
|
|
277
|
+
- **필요한 재료는 세션이 찾아서 제공한다** — 토큰·경로·테스트 계정·샘플 파일 등이 필요하면 *"네 것을 넣어라"* 대신 **리포에서 찾아 값 또는 정확한 위치를 함께 준다**. 사용자에게 찾게 만들지 않는다.
|
|
278
|
+
|
|
279
|
+
예:
|
|
280
|
+
- ❌ `[ ] popover 토글 동작 확인`
|
|
281
|
+
- ✅ `[ ] 메뉴바 아이콘을 클릭하면 목록 창이 열리는지 — 창이 뜨고 항목이 세로로 나열되면 정상. 창이 안 뜨거나 항목이 겹쳐 보이면 문제.`
|
|
282
|
+
|
|
234
283
|
2. **시각 영역 fix 사이클 사전 예고** — 시각 영역 항목 있으면 *"시각 영역은 한 사이클로 100% 일치 보장 X. fix 사이클 1~2회 예상. ✗ 발견 시 정상."* 안내. 사용자 기대치 사전 정렬, 부정 반응 누적 방지.
|
|
235
|
-
3.
|
|
284
|
+
3. **사용자가 스크린샷·산출물을 주면 체크리스트 전 항목과 1:1 대조** — 사용자가 물은 항목만 답하지 않는다. 받은 증거를 검수 항목 전체와 하나씩 맞춰 보고, 사용자가 언급하지 않은 어긋남도 먼저 지목한다 (stash FRICTION 2026-07-29 — 첫 스크린샷에 이미 찍혀 있던 결함을 세션이 짚지 못해 발견이 한 사이클 늦었다).
|
|
285
|
+
4. 사용자 응답 받음:
|
|
236
286
|
- 모두 ✓ → PASS 분기로 (`tested` 전이).
|
|
237
287
|
- ✗ 1개 이상 → FAIL 분기로 (`developing` 회귀 + ✗ 항목별 fix).
|
|
238
288
|
|
|
@@ -246,6 +296,7 @@ USER 검수 — N 항목 (목업 기준: <mockup path — 있을 시>)
|
|
|
246
296
|
- 격리 세션 검증이 *기능상* 이미 서버를 띄워 둔 경우 — 죽였다 다시 띄우지 말고 그대로 두고 URL만 보고.
|
|
247
297
|
- **FAIL → 수정 흐름에서는 기동하지 않는다** (수정하러 가는 단계라 검수 무의미). **UNCERTAIN 검수는 Step 5에서 이미 기동**했으므로 여기서 중복 기동 X.
|
|
248
298
|
- `## 검수 실행 명령` 미선언 또는 사용자 *"안 띄워도 돼"* 발화 시 생략. 상세: GIT_RULE "멀티세션 검수 환경".
|
|
299
|
+
- **기동 전 포트·프로세스 확인 + 종료 시 자식까지 정리** — `Port … is in use` 류 경고는 이미 떠 있다는 뜻이므로 재기동하지 않는다 (GIT_RULE "멀티세션 검수 환경" 참조).
|
|
249
300
|
|
|
250
301
|
## 도구 가이드
|
|
251
302
|
|
|
@@ -265,7 +316,7 @@ USER 검수 — N 항목 (목업 기준: <mockup path — 있을 시>)
|
|
|
265
316
|
- **사용자검수 시나리오는 자동화 못 잡음** — UI 미세 취향 / UX 느낌 / 외부 결제 등 *정답지가 주관*인 것만 UNCERTAIN(사람 검수)으로 가야 정상. PASS 강제 X. **단 시각 *객관* 깨짐(요소 빠짐 / 빈 화면 / 배치 딴판 / 색 완전히 틀림)은 사람 검수가 아니라 격리 세션이 캡처-목업 대조로 직접 잡아 FAIL** — 사용자에게 흠 사냥을 떠넘기지 않는다.
|
|
266
317
|
- **FAIL → developing 자동 되돌림 X** — 사용자 *"고쳐"* 답 받기 전 status 갱신 금지. *대화로 OK = 자동 전이* 룰의 핵심.
|
|
267
318
|
- **테스트 후 plumbing fix 발견 시** — 격리 PASS 후에도 plumbing(빌드 산출물 정리, 설정 수정 등) fix 필요할 수 있음. 분기:
|
|
268
|
-
- 검증 명령 *동작 자체에 영향 X* (예: 산출물 위치 정리, 주석 수정) → 메인 자체 재검증 OK (
|
|
319
|
+
- 검증 명령 *동작 자체에 영향 X* (예: 산출물 위치 정리, 주석 수정) → 메인 자체 재검증 OK. **재실행 범위는 변경에 비례** — 린트·타입체크 + *변경이 닿는 테스트*만. 전체 스위트 재실행은 불필요하다 (`/task-dev` Step 6.5 "수정 루프 국면" 참조)
|
|
269
320
|
- 검증 명령 *동작 변경* (예: build 명령 자체 변경, 새 검증 명령 추가, 환경 변수 추가) → **격리 세션 재호출 필수** (환경 변경으로 격리 가정 무효화 — 재검증 가치 사라짐)
|
|
270
321
|
|
|
271
322
|
## 상태 전이
|
|
@@ -277,6 +328,8 @@ USER 검수 — N 항목 (목업 기준: <mockup path — 있을 시>)
|
|
|
277
328
|
| `developed` | `tested` | FAIL + 사용자 *"OK 마무리"* (알려진 결함 명시) |
|
|
278
329
|
| `developed` / `testing` | `testing` (유지) | UNCERTAIN(사람 검수) — 사용자 직접 검수 대기 |
|
|
279
330
|
| `developed` / `testing` | `testing` (유지) | UNCERTAIN(검증 불가, 시험문제 결함) → `/task-plan`으로 Test Plan 보수 → `/task-test` 재실행 (코드·status 보존) |
|
|
331
|
+
| `developed` / `testing` | `testing` (유지) | UNCERTAIN(실행 보류, 환경 제약) → 사용자 승인 실행 / *"나중에"* 보류 / 격리 실행 경로 마련 후 재검증 (코드·시험문제 모두 보존) |
|
|
332
|
+
| `testing` | `tested` | UNCERTAIN(실행 보류) + 사용자 *"보류인 채로 마무리해"* — Result에 미검증 영역 명시 |
|
|
280
333
|
| `testing` (이어가기) | 동일 분기 | — |
|
|
281
334
|
|
|
282
|
-
>
|
|
335
|
+
> **네 갈래 요약**: PASS → `tested` / 코드 결함 → `developing`(사용자 *"고쳐"*) / 시험문제 결함 → Test Plan 보수(`task-plan`, 코드·status 보존) → 재검사 / 환경 제약(실행 보류) → 사용자 승인 실행 또는 격리 실행 경로 마련 후 재검증. UNCERTAIN(사람 검수)은 검수 ✓ 받으면 `tested`, ✗면 `developing`.
|