feature-loop-harness-cli 0.1.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 +53 -0
- package/bin/flh.js +391 -0
- package/package.json +29 -0
- package/templates/default/.codex/config.toml +2 -0
- package/templates/default/.codex/hooks/user-prompt-submit.sh +5 -0
- package/templates/default/.codex/hooks.json +16 -0
- package/templates/default/.flh/docs/FEATURE_IMPLEMENTATION_PIPELINE.md +454 -0
- package/templates/default/.flh/docs/PROJECT_WORKFLOW.md +270 -0
- package/templates/default/.flh/docs/REVIEW_PATCH_PIPELINE.md +166 -0
- package/templates/default/.flh/hooks/user_prompt_submit.py +1440 -0
- package/templates/default/.flh/runtime/STATE.md +84 -0
- package/templates/default/.flh/scripts/pre_commit.py +674 -0
- package/templates/default/.flh/workflow/docs-spec.yml +134 -0
- package/templates/default/.flh/workflow/flow.yml +82 -0
- package/templates/default/.flh/workflow/request-patterns.yml +265 -0
- package/templates/default/.flh/workflow/state-actions.yml +117 -0
- package/templates/default/.flh/workflow/transition-guards.yml +57 -0
- package/templates/default/.husky/pre-commit +3 -0
- package/templates/default/AGENTS.md +44 -0
- package/templates/default/HARNESS_MANUAL.md +1105 -0
- package/templates/default/README.md +251 -0
- package/templates/default/docs/API.md +41 -0
- package/templates/default/docs/ARCHITECTURE.md +86 -0
- package/templates/default/docs/DB_SCHEMA.md +149 -0
- package/templates/default/docs/DESIGN.md +52 -0
- package/templates/default/docs/MVP.md +47 -0
- package/templates/default/docs/QUALITY_SCORE.md +54 -0
- package/templates/default/docs/docs-map.md +64 -0
- package/templates/default/docs/features/active/.gitkeep +1 -0
- package/templates/default/docs/features/backlog/.gitkeep +1 -0
- package/templates/default/docs/features/blocked/.gitkeep +1 -0
- package/templates/default/docs/features/done/.gitkeep +1 -0
- package/templates/default/docs/features/feature-index.md +21 -0
- package/templates/default/docs/features/postponed/.gitkeep +1 -0
- package/templates/default/docs/features/ready/.gitkeep +1 -0
- package/templates/default/docs/features/review/.gitkeep +1 -0
- package/templates/default/docs/source-layout.yml +33 -0
- package/templates/default/gitignore.template +9 -0
- package/templates/default/tests/hooks/test_pre_commit.py +659 -0
- package/templates/default/tests/hooks/test_user_prompt_submit.py +750 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# PROJECT_WORKFLOW.md
|
|
2
|
+
|
|
3
|
+
하네스가 실제 프로젝트에 적용할 프로젝트 전체 워크플로우를 정의한다.
|
|
4
|
+
|
|
5
|
+
이 문서는 하네스 자체의 MVP, 아키텍처, DB, API, 프론트엔드 설계를 기록하는 문서가 아니다.
|
|
6
|
+
이 문서는 앞으로 하네스를 적용받는 실제 프로젝트가 어떤 순서로 문서를 완성하고 기능 구현 단계로 진입해야 하는지를 설명한다.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
하네스의 핵심 목적은 실제 구현을 기능 단위로 통제하는 것이다.
|
|
13
|
+
|
|
14
|
+
이를 위해 기능 구현에 들어가기 전 실제 프로젝트는 다음 산출물을 순서대로 준비해야 한다.
|
|
15
|
+
|
|
16
|
+
- MVP 정의
|
|
17
|
+
- 시스템 아키텍처 정의
|
|
18
|
+
- 기능 목록 정의
|
|
19
|
+
- 데이터 모델 baseline 정의
|
|
20
|
+
- API 경계 정의
|
|
21
|
+
- 디자인 지침 정의
|
|
22
|
+
- 기능 단위 구현 진입
|
|
23
|
+
|
|
24
|
+
프로젝트 레벨 상태 전이는 `.flh/runtime/STATE.md`와 `.flh/workflow/*` 설정으로 관리한다.
|
|
25
|
+
기능 단위 구현은 `FEATURE_IMPLEMENTATION` 상태에서만 `.flh/docs/FEATURE_IMPLEMENTATION_PIPELINE.md`를 기준으로 진행한다.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Runtime Files
|
|
30
|
+
|
|
31
|
+
프로젝트 전체 워크플로우는 다음 파일들이 제어한다.
|
|
32
|
+
|
|
33
|
+
- `.flh/runtime/STATE.md`: 현재 상태, 완료 상태, 승인 기록
|
|
34
|
+
- `.flh/workflow/flow.yml`: 상태 목록, 상태별 허용 request_type, next state
|
|
35
|
+
- `.flh/workflow/state-actions.yml`: 현재 상태에서 에이전트가 수행할 짧은 체크리스트와 허용 write 범위
|
|
36
|
+
- `.flh/workflow/docs-spec.yml`: 문서별 완료 판정 기준
|
|
37
|
+
- `.flh/workflow/transition-guards.yml`: 상태 전이별 guard 조합
|
|
38
|
+
|
|
39
|
+
사람이 읽는 설명은 이 문서에 둔다.
|
|
40
|
+
훅이 파싱하는 규칙은 `.flh/workflow/*.yml`에 둔다.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## State Flow
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
MVP_DEFINITION
|
|
48
|
+
-> ARCHITECTURE_DESIGN
|
|
49
|
+
-> FEATURE_INDEX_DEFINITION
|
|
50
|
+
-> DATA_MODEL_DEFINITION
|
|
51
|
+
-> API_DESIGN
|
|
52
|
+
-> FRONTEND_DESIGN
|
|
53
|
+
-> FEATURE_IMPLEMENTATION
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
상태 전이는 기본적으로 순차적으로만 진행한다.
|
|
57
|
+
현재 상태와 요청이 요구하는 상태 사이에 여러 단계가 있으면, 중간 transition guard를 모두 통과해야 한다.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Manual Step Skip
|
|
62
|
+
|
|
63
|
+
사용자는 `/d` 문서 및 하네스 제어 모드를 사용해 프로젝트 workflow 단계를 명시적으로 skip 처리할 수 있다.
|
|
64
|
+
|
|
65
|
+
skip은 하네스가 자동 판정하지 않는다.
|
|
66
|
+
특정 단계가 현재 프로젝트에 필요 없는지 여부는 사용자가 책임지는 수동 운영 결정이다.
|
|
67
|
+
|
|
68
|
+
단, 다음 기반 단계는 이후 workflow 신뢰도를 크게 좌우하므로 skip하지 않는다.
|
|
69
|
+
|
|
70
|
+
- `MVP_DEFINITION`
|
|
71
|
+
- `ARCHITECTURE_DESIGN`
|
|
72
|
+
- `FEATURE_INDEX_DEFINITION`
|
|
73
|
+
|
|
74
|
+
skip된 단계의 산출물은 completed artifact로 가정하지 않는다.
|
|
75
|
+
필요하면 `.flh/runtime/STATE.md`에 skip한 상태와 이유를 기록한다.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 1. MVP Definition
|
|
80
|
+
|
|
81
|
+
실제 프로젝트의 MVP 범위를 정의하는 단계다.
|
|
82
|
+
|
|
83
|
+
템플릿 문서:
|
|
84
|
+
|
|
85
|
+
- `docs/MVP.md`
|
|
86
|
+
|
|
87
|
+
이 문서는 하네스 패키지에서 템플릿으로 제공된다.
|
|
88
|
+
실제 프로젝트가 시작되면 사용자가 해당 프로젝트의 내용으로 채운다.
|
|
89
|
+
|
|
90
|
+
완료 기준은 `.flh/workflow/docs-spec.yml`의 `mvp` 항목을 따른다.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 2. Architecture Design
|
|
95
|
+
|
|
96
|
+
실제 프로젝트의 시스템 아키텍처를 정의하는 단계다.
|
|
97
|
+
|
|
98
|
+
템플릿 문서:
|
|
99
|
+
|
|
100
|
+
- `docs/ARCHITECTURE.md`
|
|
101
|
+
- `docs/source-layout.yml`
|
|
102
|
+
|
|
103
|
+
포함해야 하는 대표 항목:
|
|
104
|
+
|
|
105
|
+
- 시스템 개요
|
|
106
|
+
- 기술 스택
|
|
107
|
+
- source layout
|
|
108
|
+
- package layout
|
|
109
|
+
- testing strategy
|
|
110
|
+
- 주요 모듈
|
|
111
|
+
- 데이터 흐름
|
|
112
|
+
- 외부 의존성
|
|
113
|
+
- 실행 환경
|
|
114
|
+
- scaffold 정책
|
|
115
|
+
- 아키텍처 제약사항
|
|
116
|
+
|
|
117
|
+
`docs/source-layout.yml`은 아키텍처 단계에서 결정한 source directory, project-level persistence 여부, database provider, package별 framework/runtime/language/module, testing tool, lint/format tooling을 기계가 읽을 수 있게 기록하는 manifest다.
|
|
118
|
+
에이전트는 이 파일을 아키텍처 단계의 필수 결정 체크리스트로 사용하고, TODO 또는 누락 필드가 있으면 사용자에게 먼저 질문한다.
|
|
119
|
+
에이전트는 이 파일에 적힌 source directory만 생성하고, 빈 디렉토리에는 `.gitkeep`만 둔다.
|
|
120
|
+
아키텍처 단계에서는 framework scaffold나 실제 구현 코드를 생성하지 않는다.
|
|
121
|
+
테스트 도구 설치와 설정은 최초 기능 구현 전에 수행하는 source package scaffold baseline에서 다룬다.
|
|
122
|
+
DB 사용 여부는 `project.persistence.database_required`에 기록한다.
|
|
123
|
+
DB를 사용하지 않는 프로젝트는 `database_required: false`와 `database_provider: none`으로 표시한다.
|
|
124
|
+
|
|
125
|
+
완료 기준은 다음을 따른다.
|
|
126
|
+
|
|
127
|
+
- `.flh/workflow/docs-spec.yml`의 `architecture` 항목
|
|
128
|
+
- `.flh/workflow/docs-spec.yml`의 `source_layout` 항목
|
|
129
|
+
- `.flh/workflow/transition-guards.yml`의 `ARCHITECTURE_DESIGN_TO_FEATURE_INDEX_DEFINITION` 항목
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 3. Feature Index Definition
|
|
134
|
+
|
|
135
|
+
실제 프로젝트의 기능 후보 목록과 우선순위를 정의하는 단계다.
|
|
136
|
+
|
|
137
|
+
템플릿 문서:
|
|
138
|
+
|
|
139
|
+
- `docs/features/feature-index.md`
|
|
140
|
+
|
|
141
|
+
이 단계에서는 기능별 상세 구현 문서를 만들지 않는다.
|
|
142
|
+
기능 목록, 요약, 우선순위, 핵심 요구사항만 정리한다.
|
|
143
|
+
|
|
144
|
+
기능의 실제 진행 상태는 `feature-index.md`가 아니라 `docs/features/*/` 디렉토리 위치를 기준으로 판단한다.
|
|
145
|
+
|
|
146
|
+
완료 기준은 `.flh/workflow/docs-spec.yml`의 `feature_index` 항목을 따른다.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 4. Data Model Definition
|
|
151
|
+
|
|
152
|
+
실제 프로젝트의 데이터 모델 baseline을 정의하는 단계다.
|
|
153
|
+
이 단계는 Prisma 파일을 생성하는 단계가 아니라, 프로젝트 전체 DB schema의 단일 truth source인 `docs/DB_SCHEMA.md`를 완성하는 단계다.
|
|
154
|
+
|
|
155
|
+
템플릿 문서:
|
|
156
|
+
|
|
157
|
+
- `docs/DB_SCHEMA.md`
|
|
158
|
+
|
|
159
|
+
금지되는 작업:
|
|
160
|
+
|
|
161
|
+
- `app/be/prisma/schema.prisma` 생성/수정
|
|
162
|
+
- `app/be/prisma/migrations/**` 생성/수정
|
|
163
|
+
- `app/be/package.json` 생성/수정
|
|
164
|
+
- 루트 `package.json`의 DB forwarding script 생성/수정
|
|
165
|
+
- 실제 DB 서버 배포
|
|
166
|
+
|
|
167
|
+
목표는 `docs/DB_SCHEMA.md`를 `schema.prisma`로 즉시 변환할 수 있는 Prisma-ready 명세로 확정하는 것이다.
|
|
168
|
+
entity field, Prisma type, DB type, nullable, default, unique, index, relation, enum, constraint, ownership, lifecycle, Prisma mapping note, migration note가 문서 안에 충분히 구체적으로 있어야 한다.
|
|
169
|
+
|
|
170
|
+
실제 `schema.prisma`, baseline migration, DB deploy/verify script 생성과 실제 DB 서버 배포/검증은 DB-backed project에서만 `FEATURE_IMPLEMENTATION` 상태의 `1.6. Baseline DB Deployment`에서 수행한다.
|
|
171
|
+
DB를 사용하지 않는 프로젝트는 같은 단계에서 DB 배포를 실행하지 않고 skip approval을 기록한다.
|
|
172
|
+
두 경우 모두 결과는 `.flh/runtime/STATE.md`의 `approvals.database_baseline`에 기록한다.
|
|
173
|
+
|
|
174
|
+
완료 기준은 다음을 따른다.
|
|
175
|
+
|
|
176
|
+
- `.flh/workflow/docs-spec.yml`의 `db_schema` 항목
|
|
177
|
+
- `.flh/workflow/transition-guards.yml`의 `DATA_MODEL_DEFINITION_TO_API_DESIGN` 항목
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 5. API Design
|
|
182
|
+
|
|
183
|
+
실제 프로젝트의 API 경계와 공통 규칙을 정의하는 단계다.
|
|
184
|
+
|
|
185
|
+
템플릿 문서:
|
|
186
|
+
|
|
187
|
+
- `docs/API.md`
|
|
188
|
+
|
|
189
|
+
포함해야 하는 대표 항목:
|
|
190
|
+
|
|
191
|
+
- API 영역
|
|
192
|
+
- endpoint 초안
|
|
193
|
+
- 인증/인가 원칙
|
|
194
|
+
- request/response 규칙
|
|
195
|
+
- 에러 응답 규칙
|
|
196
|
+
|
|
197
|
+
완료 기준은 `.flh/workflow/docs-spec.yml`의 `api` 항목을 따른다.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 6. Frontend Design
|
|
202
|
+
|
|
203
|
+
실제 프로젝트의 디자인 지침을 확정하는 단계다.
|
|
204
|
+
|
|
205
|
+
산출물:
|
|
206
|
+
|
|
207
|
+
- `docs/DESIGN.md`
|
|
208
|
+
|
|
209
|
+
이 단계에 처음 진입하면 사용자에게 다음 중 하나를 선택하게 한다.
|
|
210
|
+
|
|
211
|
+
1. 외부에서 사용 중인 `DESIGN.md`를 가져와 사용한다.
|
|
212
|
+
2. 이 하네스 흐름 안에서 `DESIGN.md`를 함께 작성한다.
|
|
213
|
+
|
|
214
|
+
외부 `DESIGN.md`를 사용하는 경우 해당 파일은 frontmatter나 하네스 템플릿 섹션을 갖지 않을 수 있다.
|
|
215
|
+
이 경우 `.flh/runtime/STATE.md`의 `approvals.design.approved`가 `true`이면 완료 조건을 통과할 수 있다.
|
|
216
|
+
|
|
217
|
+
직접 작성하는 경우 완료 기준은 `.flh/workflow/docs-spec.yml`의 `design` 항목을 따른다.
|
|
218
|
+
|
|
219
|
+
전이 조건은 `docs/DESIGN.md` 완료 또는 `approvals.design.approved` 중 하나를 허용한다.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 7. Feature Implementation
|
|
224
|
+
|
|
225
|
+
프로젝트 전체 워크플로우가 완료되어 기능 단위 구현으로 진입 가능한 상태다.
|
|
226
|
+
|
|
227
|
+
이 상태 이후 실제 구현은 다음 기준을 따른다.
|
|
228
|
+
|
|
229
|
+
- `AGENTS.md`
|
|
230
|
+
- `.flh/docs/FEATURE_IMPLEMENTATION_PIPELINE.md`
|
|
231
|
+
- `docs/features/feature-index.md`
|
|
232
|
+
- `docs/features/*/FEAT-XXX-*` 내부 기능 문서
|
|
233
|
+
|
|
234
|
+
첫 기능 구현을 시작하기 전에는 baseline DB deployment를 확인한다.
|
|
235
|
+
아직 실제 DB 서버에 baseline schema가 배포/검증되지 않았다면 필요한 환경값을 사용자에게 요청하고 배포/검증을 수행한다.
|
|
236
|
+
|
|
237
|
+
프로젝트 레벨 훅은 기능 구현 세부사항을 판단하지 않는다.
|
|
238
|
+
훅은 프로젝트가 기능 구현 상태에 진입 가능한지만 판단한다.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Template Document Rule
|
|
243
|
+
|
|
244
|
+
하네스 패키지는 주요 프로젝트 문서를 템플릿 상태로 제공할 수 있다.
|
|
245
|
+
|
|
246
|
+
템플릿 문서는 존재만으로 완료된 것으로 보지 않는다.
|
|
247
|
+
훅의 전이 검증은 다음 기준을 함께 확인한다.
|
|
248
|
+
|
|
249
|
+
- frontmatter status
|
|
250
|
+
- 필수 섹션 존재 여부
|
|
251
|
+
- placeholder 제거 여부
|
|
252
|
+
- 최소 내용 충족 여부
|
|
253
|
+
|
|
254
|
+
현재 하네스 구현 과정에서는 실제 프로젝트의 MVP, 아키텍처, DB, API, 디자인 내용을 작성하지 않는다.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Non-goals
|
|
259
|
+
|
|
260
|
+
프로젝트 레벨 훅은 다음을 하지 않는다.
|
|
261
|
+
|
|
262
|
+
- 기능 구현 코드 작성
|
|
263
|
+
- 기능별 테스트 작성
|
|
264
|
+
- 기능별 체크리스트 수행
|
|
265
|
+
- 기능별 설계 세부 판단
|
|
266
|
+
- 일반 workflow 전이 과정에서의 커밋/푸쉬/머지 수행
|
|
267
|
+
- 리팩토링 범위 판단
|
|
268
|
+
|
|
269
|
+
위 작업은 `FEATURE_IMPLEMENTATION` 상태에서 기능 단위 구현 파이프라인이 관리한다.
|
|
270
|
+
단, `/d` 문서 모드에서 사용자가 명시적으로 요청한 문서/하네스 변경 커밋과 푸쉬는 `AGENTS.md`의 `/d` 예외 규칙을 따른다. 머지는 `/d`에서도 허용하지 않는다.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Review Patch Pipeline
|
|
2
|
+
|
|
3
|
+
Review Patch Pipeline은 최초 기능 구현이 끝나고 `docs/features/review/`에 위치한 기능에 대해, 사용자의 수정 요청을 처리하는 lightweight pipeline이다.
|
|
4
|
+
|
|
5
|
+
이 단계는 full feature implementation pipeline을 다시 실행하지 않는다.
|
|
6
|
+
이미 구현된 기능을 대상으로 최소 범위의 수정, 검증, 품질 점수 갱신, 최종 완료 처리를 수행한다.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Target Feature
|
|
11
|
+
|
|
12
|
+
`docs/features/review/`에 기능 디렉토리가 있으면, 사용자의 수정 요청은 기본적으로 해당 기능을 대상으로 한다.
|
|
13
|
+
|
|
14
|
+
`review/`에는 동시에 하나의 기능만 존재해야 한다.
|
|
15
|
+
`review/`에 기능이 있는 동안에는 새 기능 구현을 시작하지 않는다.
|
|
16
|
+
|
|
17
|
+
수정 요청이 review 대상 기능과 관련 있는지 먼저 확인한다.
|
|
18
|
+
요청 범위가 현재 review 기능과 맞지 않거나, 새 기능 구현에 가까운 경우에는 바로 수정하지 말고 사용자에게 확인한다.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. Review Branch and Worktree
|
|
23
|
+
|
|
24
|
+
Review patch가 source file 변경을 포함하는 경우 main/master에서 직접 수정하거나 커밋하지 않는다.
|
|
25
|
+
|
|
26
|
+
리뷰 대상 기능마다 하나의 `fix/*` branch/worktree를 생성한다.
|
|
27
|
+
이 branch/worktree는 해당 기능이 `docs/features/done/`으로 이동하기 전까지 계속 재사용한다.
|
|
28
|
+
|
|
29
|
+
예시:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
feature: docs/features/review/FEAT-001-login
|
|
33
|
+
branch: fix/FEAT-001-login-review
|
|
34
|
+
worktree: FEAT-001-login-review
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
이미 해당 review branch/worktree가 존재하면 새로 만들지 않고 기존 branch/worktree에서 이어서 작업한다.
|
|
38
|
+
|
|
39
|
+
source 변경이 없는 docs-only review patch도 review branch/worktree가 이미 있으면 같은 branch/worktree에 포함한다.
|
|
40
|
+
이렇게 하면 사용자가 review 중 요청한 변경사항을 하나의 기능 단위 흐름으로 유지할 수 있다.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. Patch Scope
|
|
45
|
+
|
|
46
|
+
수정은 사용자가 요청한 내용에 한정한다.
|
|
47
|
+
|
|
48
|
+
관련 없는 리팩토링, 기능 추가, 설계 변경은 하지 않는다.
|
|
49
|
+
수정 중 요구사항 변경이 필요하다고 판단되면, 코드 수정 전에 해당 기능의 `SPEC.md`, `CHECKLIST.md`, `TEST_CASES.md`를 먼저 갱신한다.
|
|
50
|
+
|
|
51
|
+
변경 범위가 데이터 모델, API 계약, 공통 디자인 규칙에 영향을 준다면 관련 문서도 함께 확인한다.
|
|
52
|
+
단, review patch는 기존 기능을 보정하는 흐름이므로 변경 범위가 커지면 사용자에게 먼저 보고한다.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 4. Patch Log and Artifacts
|
|
57
|
+
|
|
58
|
+
Review patch 과정에서 생성되는 검증 자료와 실패 기록은 해당 기능 디렉토리의 `artifacts/review-patches/` 아래에 저장한다.
|
|
59
|
+
|
|
60
|
+
권장 경로:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
docs/features/review/FEAT-XXX-name/artifacts/review-patches/YYYY-MM-DD-short-summary/
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
저장할 수 있는 항목:
|
|
67
|
+
|
|
68
|
+
- 사용자 수정 요청 요약
|
|
69
|
+
- 실행한 검증 명령
|
|
70
|
+
- Playwright screenshot, trace, report
|
|
71
|
+
- 실패 원인과 재시도 기록
|
|
72
|
+
- 환경 문제로 검증하지 못한 경우의 blocker 기록
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 5. Verification
|
|
77
|
+
|
|
78
|
+
수정 후 관련 테스트를 실행한다.
|
|
79
|
+
|
|
80
|
+
UI/UX 변경이 포함된 경우 Playwright 기반 검증을 수행한다.
|
|
81
|
+
Playwright 검증이 실패하면 원인을 수정하고 다시 검증한다.
|
|
82
|
+
|
|
83
|
+
환경, 의존성, 외부 서비스 문제로 검증이 불가능하면 임의로 통과 처리하지 않는다.
|
|
84
|
+
해당 blocker와 확인 가능한 증거를 `artifacts/review-patches/` 아래에 기록하고 사용자에게 보고한다.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 6. Quality Score
|
|
89
|
+
|
|
90
|
+
수정이 기능 품질에 영향을 주면 해당 기능의 `QUALITY_SCORE.md`를 갱신한다.
|
|
91
|
+
|
|
92
|
+
품질 점수 변경이 필요한 경우:
|
|
93
|
+
|
|
94
|
+
- 요구사항 충족 범위가 바뀐 경우
|
|
95
|
+
- 테스트 또는 검증 결과가 바뀐 경우
|
|
96
|
+
- UI/UX 안정성이 개선되거나 악화된 경우
|
|
97
|
+
- 에러 처리, 접근성, edge case 대응이 바뀐 경우
|
|
98
|
+
|
|
99
|
+
단순 문구 수정이나 품질 판단에 영향을 주지 않는 작은 정리는 품질 점수를 갱신하지 않을 수 있다.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 7. Commit Policy
|
|
104
|
+
|
|
105
|
+
Review patch의 기본 커밋 정책은 사용자 명시 커밋 방식이다.
|
|
106
|
+
|
|
107
|
+
에이전트는 review patch 요청을 받으면 수정, 검증, 필요한 artifacts 기록, 품질 점수 갱신까지 수행할 수 있다.
|
|
108
|
+
다만 커밋은 사용자가 명시적으로 커밋을 요청했을 때 해당 review branch에서 수행한다.
|
|
109
|
+
|
|
110
|
+
사용자가 커밋을 요청하기 전까지는 같은 review branch/worktree에 변경사항을 유지할 수 있다.
|
|
111
|
+
사소한 수정 요청이 여러 번 이어지는 경우, 사용자가 커밋을 요청하는 시점에 하나의 커밋으로 묶을 수 있다.
|
|
112
|
+
변경 목적이 서로 다르거나 사용자가 분리를 요청한 경우에는 여러 커밋으로 나눌 수 있다.
|
|
113
|
+
|
|
114
|
+
main/master에는 source 변경을 직접 커밋하지 않는다.
|
|
115
|
+
커밋 범위는 review 대상 기능에 한정한다.
|
|
116
|
+
|
|
117
|
+
커밋 전에는 다음을 확인한다.
|
|
118
|
+
|
|
119
|
+
- 변경이 사용자 요청 범위 안에 있는지
|
|
120
|
+
- 관련 테스트 또는 검증을 실행했는지
|
|
121
|
+
- 필요한 artifacts가 feature directory 아래에 기록되었는지
|
|
122
|
+
- 품질 점수 갱신이 필요한지
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 8. Completion
|
|
127
|
+
|
|
128
|
+
사용자가 명시적으로 해당 기능의 검토 완료를 승인하기 전까지 기능 디렉토리는 `docs/features/review/`에 유지한다.
|
|
129
|
+
|
|
130
|
+
완료 승인으로 볼 수 있는 표현은 명확해야 한다.
|
|
131
|
+
예를 들어 "완료", "done으로 이동", "최종 승인", "이 기능 끝"처럼 review 종료 의도가 분명해야 한다.
|
|
132
|
+
|
|
133
|
+
사용자가 완료를 승인하면 다음을 수행한다.
|
|
134
|
+
|
|
135
|
+
1. 최종 검증을 실행한다.
|
|
136
|
+
2. 필요한 품질 점수와 feature index를 갱신한다.
|
|
137
|
+
3. 기능 디렉토리를 `docs/features/review/`에서 `docs/features/done/`으로 이동한다.
|
|
138
|
+
4. 아직 커밋되지 않은 review 변경사항이 있으면 review branch에서 커밋한다.
|
|
139
|
+
5. review branch를 main/master로 merge한다.
|
|
140
|
+
6. review worktree와 branch를 정리한다.
|
|
141
|
+
|
|
142
|
+
완료 승인이 없다면 review branch/worktree는 유지하고, 이후 같은 review 기능에 대한 수정 요청은 같은 branch/worktree에서 이어서 처리한다.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 9. Conflict Handling
|
|
147
|
+
|
|
148
|
+
Review patch 중 충돌이 발생하면 관련 파일과 충돌 이유를 먼저 파악한다.
|
|
149
|
+
|
|
150
|
+
충돌 해결이 단순하고 review 요청 범위 안에 있으면 최소 수정으로 해결한다.
|
|
151
|
+
충돌 원인이 요구사항 변경, 데이터 모델 변경, API 계약 변경처럼 review 범위를 넓히는 경우에는 임의로 해결하지 말고 사용자에게 보고한다.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 10. Rules Summary
|
|
156
|
+
|
|
157
|
+
- `docs/features/review/`에 있는 기능이 review patch의 기본 대상이다.
|
|
158
|
+
- review patch는 full feature implementation pipeline을 다시 실행하지 않는다.
|
|
159
|
+
- source 변경이 있으면 main/master에서 직접 커밋하지 않는다.
|
|
160
|
+
- 하나의 review 기능은 `done/`으로 이동하기 전까지 하나의 `fix/*` branch/worktree를 재사용한다.
|
|
161
|
+
- review patch commit은 사용자가 명시적으로 커밋을 요청했을 때 수행한다.
|
|
162
|
+
- 수정 범위는 사용자가 요청한 내용에 한정한다.
|
|
163
|
+
- UI/UX 변경은 Playwright 기반 검증을 수행한다.
|
|
164
|
+
- 검증 자료와 blocker는 `artifacts/review-patches/` 아래에 기록한다.
|
|
165
|
+
- 품질에 영향이 있으면 `QUALITY_SCORE.md`를 갱신한다.
|
|
166
|
+
- 사용자가 명시적으로 완료를 승인하기 전까지 `review/`에서 `done/`으로 이동하지 않는다.
|