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.
Files changed (40) hide show
  1. package/README.md +53 -0
  2. package/bin/flh.js +391 -0
  3. package/package.json +29 -0
  4. package/templates/default/.codex/config.toml +2 -0
  5. package/templates/default/.codex/hooks/user-prompt-submit.sh +5 -0
  6. package/templates/default/.codex/hooks.json +16 -0
  7. package/templates/default/.flh/docs/FEATURE_IMPLEMENTATION_PIPELINE.md +454 -0
  8. package/templates/default/.flh/docs/PROJECT_WORKFLOW.md +270 -0
  9. package/templates/default/.flh/docs/REVIEW_PATCH_PIPELINE.md +166 -0
  10. package/templates/default/.flh/hooks/user_prompt_submit.py +1440 -0
  11. package/templates/default/.flh/runtime/STATE.md +84 -0
  12. package/templates/default/.flh/scripts/pre_commit.py +674 -0
  13. package/templates/default/.flh/workflow/docs-spec.yml +134 -0
  14. package/templates/default/.flh/workflow/flow.yml +82 -0
  15. package/templates/default/.flh/workflow/request-patterns.yml +265 -0
  16. package/templates/default/.flh/workflow/state-actions.yml +117 -0
  17. package/templates/default/.flh/workflow/transition-guards.yml +57 -0
  18. package/templates/default/.husky/pre-commit +3 -0
  19. package/templates/default/AGENTS.md +44 -0
  20. package/templates/default/HARNESS_MANUAL.md +1105 -0
  21. package/templates/default/README.md +251 -0
  22. package/templates/default/docs/API.md +41 -0
  23. package/templates/default/docs/ARCHITECTURE.md +86 -0
  24. package/templates/default/docs/DB_SCHEMA.md +149 -0
  25. package/templates/default/docs/DESIGN.md +52 -0
  26. package/templates/default/docs/MVP.md +47 -0
  27. package/templates/default/docs/QUALITY_SCORE.md +54 -0
  28. package/templates/default/docs/docs-map.md +64 -0
  29. package/templates/default/docs/features/active/.gitkeep +1 -0
  30. package/templates/default/docs/features/backlog/.gitkeep +1 -0
  31. package/templates/default/docs/features/blocked/.gitkeep +1 -0
  32. package/templates/default/docs/features/done/.gitkeep +1 -0
  33. package/templates/default/docs/features/feature-index.md +21 -0
  34. package/templates/default/docs/features/postponed/.gitkeep +1 -0
  35. package/templates/default/docs/features/ready/.gitkeep +1 -0
  36. package/templates/default/docs/features/review/.gitkeep +1 -0
  37. package/templates/default/docs/source-layout.yml +33 -0
  38. package/templates/default/gitignore.template +9 -0
  39. package/templates/default/tests/hooks/test_pre_commit.py +659 -0
  40. package/templates/default/tests/hooks/test_user_prompt_submit.py +750 -0
@@ -0,0 +1,251 @@
1
+ # Feature Loop Harness
2
+
3
+ ![image](https://res.cloudinary.com/dddvvp9de/image/upload/v1780124834/FeatureLoopHarness_zndch9.png)
4
+
5
+ Feature Loop Harness, 또는 `flh`,는 Codex로 프로젝트를 진행할 때 설계, 문서화, 기능 구현, 리뷰, 커밋 흐름을 일정한 순서로 제한하는 workflow harness다.
6
+
7
+ 핵심은 Codex `UserPromptSubmit` hook, `AGENTS.md`, 문서 템플릿, pre-commit guard를 함께 사용해 “아직 준비되지 않은 작업”이 바로 실행되거나 커밋되는 것을 막는 것이다.
8
+
9
+ 상세 매뉴얼은 [HARNESS_MANUAL.md](HARNESS_MANUAL.md)를 참고한다.
10
+
11
+ ## Install
12
+
13
+ ### Requirements
14
+
15
+ - `git`
16
+ - `node`
17
+ - `npm`
18
+ - `python3`
19
+ - `PyYAML`
20
+ - `Codex CLI`
21
+
22
+ Codex Desktop App을 주로 사용하더라도 project-local hook 승인에는 Codex CLI 사용을 권장한다.
23
+
24
+ ### Clone
25
+
26
+ ```sh
27
+ git clone https://github.com/jkuminga/FeatureLoopHarness <PROJECT_DIR>
28
+ cd <PROJECT_DIR>
29
+ ```
30
+
31
+ 새 프로젝트 repo로 사용할 경우 `origin`을 본인 repo로 바꾼다.
32
+
33
+ ```sh
34
+ git remote remove origin
35
+ git remote add origin <YOUR_PROJECT_REPO_URL>
36
+ git push -u origin main
37
+ ```
38
+
39
+ 기본 브랜치가 `master`라면 `main` 대신 `master`를 사용한다.
40
+
41
+ ### Dependencies
42
+
43
+ ```sh
44
+ npm install
45
+ ```
46
+
47
+ 이 명령은 Husky와 lint-staged를 설치하고 Git pre-commit hook을 연결한다.
48
+
49
+ ### Enable Codex Hook
50
+
51
+ flh는 사용자 요청이 Codex에 전달되기 전에 `UserPromptSubmit` hook으로 현재 상태와 요청 의도를 검사한다.
52
+
53
+ Codex CLI를 프로젝트 루트에서 실행한다.
54
+
55
+ ```sh
56
+ codex
57
+ ```
58
+
59
+ 최초 실행 시 CLI가 project-local hook을 감지하고 실행 승인 여부를 물어볼 수 있다. 자동 안내가 나오지 않으면 Codex CLI 안에서 다음 명령을 실행한다.
60
+
61
+ ```text
62
+ /hooks
63
+ ```
64
+
65
+ `UserPromptSubmit` hook의 설정과 스크립트 경로를 확인한 뒤, Codex가 해당 hook을 실행해도 된다고 승인한다. hook 파일이나 `.codex/hooks.json`을 수정하면 다시 승인해야 할 수 있다.
66
+
67
+ ### Verify
68
+
69
+ ```sh
70
+ npm test
71
+ printf '아키텍처 설계하자' | .codex/hooks/user-prompt-submit.sh
72
+ codex exec '아키텍처 설계하자'
73
+ ```
74
+
75
+ 설정이 정상이라면 Codex 실행 시 `UserPromptSubmit` hook이 동작하고, 현재 workflow state에 맞지 않는 요청은 block된다.
76
+
77
+ ## Start A Project
78
+
79
+ 처음 상태는 `.flh/runtime/STATE.md`의 `current_state: MVP_DEFINITION`이다.
80
+
81
+ Codex에서 MVP 정의부터 시작한다.
82
+
83
+ ```text
84
+ MVP 정리하자
85
+ ```
86
+
87
+ 이후 각 단계의 문서를 완성하면 다음 단계 요청을 보낸다. hook은 현재 상태, 요청 의도, 문서 완료 조건을 확인한 뒤 허용 가능한 경우에만 상태를 전이한다.
88
+
89
+ ```text
90
+ MVP 정리하자
91
+ 아키텍처 설계하자
92
+ 기능 목록 정리하자
93
+ 데이터 모델 설계하자
94
+ API 설계하자
95
+ 프론트 디자인 정리하자
96
+ 기능 구현 시작하자
97
+ ```
98
+
99
+ ## Core Flow
100
+
101
+ ```text
102
+ MVP_DEFINITION
103
+ -> ARCHITECTURE_DESIGN
104
+ -> FEATURE_INDEX_DEFINITION
105
+ -> DATA_MODEL_DEFINITION
106
+ -> API_DESIGN
107
+ -> FRONTEND_DESIGN
108
+ -> FEATURE_IMPLEMENTATION
109
+ ```
110
+
111
+ 주요 파일:
112
+
113
+ - `.flh/runtime/STATE.md`: 현재 workflow state
114
+ - `.flh/workflow/flow.yml`: 상태와 허용 request type
115
+ - `.flh/workflow/state-actions.yml`: 상태별 작업 규칙
116
+ - `.flh/workflow/docs-spec.yml`: 문서 완료 조건
117
+ - `.flh/workflow/transition-guards.yml`: 상태 전이 guard
118
+ - `.flh/workflow/request-patterns.yml`: 자연어 요청 분류 패턴
119
+ - `AGENTS.md`: Codex 실행 규칙
120
+
121
+ ## Prefix Modes
122
+
123
+ flh는 사용자 프롬프트 prefix로 작업 의도를 강하게 제한한다.
124
+
125
+ ### `/q`
126
+
127
+ 질문 모드다.
128
+
129
+ - 답변만 허용한다.
130
+ - 파일 생성, 수정, 삭제를 하지 않는다.
131
+ - `STATE.md`를 갱신하지 않는다.
132
+ - 테스트, 커밋, push, merge, workflow pipeline을 실행하지 않는다.
133
+
134
+ ### `/d`
135
+
136
+ 문서 및 하네스 제어 모드다.
137
+
138
+ - `docs/`, `.flh/`, `AGENTS.md`, `README.md`, `.codex/`, `tests/hooks/`, `.husky/`, `package.json`, `package-lock.json` 같은 문서/하네스 유지보수 파일만 수정한다.
139
+ - source 구현 작업을 하지 않는다.
140
+ - 사용자가 명시적으로 요청한 경우에만 커밋 또는 push할 수 있다.
141
+ - merge는 하지 않는다.
142
+
143
+ ### No Prefix
144
+
145
+ 일반 작업 모드다.
146
+
147
+ - 현재 `.flh/runtime/STATE.md`의 `current_state`를 기준으로 동작한다.
148
+ - 기능 구현은 `current_state`가 `FEATURE_IMPLEMENTATION`일 때만 진행한다.
149
+ - 현재 state에서 허용되지 않는 요청은 hook 또는 agent 규칙에 의해 block된다.
150
+
151
+ ## Must-Know Policies
152
+
153
+ ### 1. `STATE.md`가 기준이다
154
+
155
+ `.flh/runtime/STATE.md`의 YAML frontmatter가 유일한 machine-readable runtime state다.
156
+
157
+ 에이전트와 hook은 항상 이 값을 기준으로 현재 단계와 허용 작업을 판단한다.
158
+
159
+ ### 2. 문서는 `completed`가 되어야 다음 단계로 간다
160
+
161
+ 각 단계의 문서는 `.flh/workflow/docs-spec.yml` 조건을 만족해야 한다.
162
+
163
+ 필수 섹션, YAML 필드, TODO 제거 조건을 만족하지 못하면 상태 전이가 block될 수 있다.
164
+
165
+ ### 3. `docs/source-layout.yml`은 source 변경의 기준이다
166
+
167
+ source file 변경이 감지되면 pre-commit guard는 `docs/source-layout.yml`을 기준으로 source root와 package 정보를 판단한다.
168
+
169
+ 이 파일이 `completed` 상태가 아니거나 source root가 맞지 않으면 source 변경 커밋이 막힐 수 있다.
170
+
171
+ ### 4. `active/` 또는 `review/`에 기능이 있으면 새 기능을 시작하지 않는다
172
+
173
+ 기능 상태는 `docs/features/` 아래 디렉토리 위치로 판단한다.
174
+
175
+ ```text
176
+ backlog -> ready -> active -> review -> done
177
+ ```
178
+
179
+ `docs/features/active/` 또는 `docs/features/review/`에 기능 디렉토리가 있으면 새 기능 구현을 시작하지 않는다.
180
+
181
+ ### 5. source 변경은 허용 브랜치에서만 커밋한다
182
+
183
+ 일반 source 변경은 다음 브랜치 prefix에서만 허용된다.
184
+
185
+ ```text
186
+ feat/*
187
+ fix/*
188
+ refactor/*
189
+ ```
190
+
191
+ main/master에서는 일반 source 변경 커밋이 막힌다.
192
+
193
+ 예외는 다음 두 가지뿐이다.
194
+
195
+ - source scaffold baseline
196
+ - database baseline
197
+
198
+ 두 예외 모두 `.flh/runtime/STATE.md`의 approval 기록이 필요하다.
199
+
200
+ ### 6. Review patch는 별도 lightweight flow를 따른다
201
+
202
+ `docs/features/review/`에 기능이 있으면 사용자 수정 요청은 기본적으로 해당 기능을 대상으로 한다.
203
+
204
+ Review patch는 `.flh/docs/REVIEW_PATCH_PIPELINE.md`를 따르며, 기능 하나당 하나의 `fix/*` branch/worktree를 `done/` 이동 전까지 재사용한다.
205
+
206
+ Review patch의 기본 커밋 정책은 사용자 명시 커밋 방식이다. 수정과 검증은 수행할 수 있지만, 커밋은 사용자가 요청했을 때 수행한다.
207
+
208
+ ### 7. DB baseline은 Prisma-only다
209
+
210
+ DB-backed project의 공식 자동 baseline은 Prisma 기준으로만 수행한다.
211
+
212
+ DB를 사용하지 않는 프로젝트는 `.flh/runtime/STATE.md`에 다음 approval을 남겨 1.6 DB baseline 단계를 통과한다.
213
+
214
+ ```yaml
215
+ approvals:
216
+ database_baseline:
217
+ required: false
218
+ skipped: true
219
+ ```
220
+
221
+ DB-backed project는 실제 Prisma baseline 배포와 검증 후 다음 approval이 필요하다.
222
+
223
+ ```yaml
224
+ approvals:
225
+ database_baseline:
226
+ required: true
227
+ verified: true
228
+ ```
229
+
230
+ ### 8. 비밀값은 기록하지 않는다
231
+
232
+ API key, token, password, DB connection string은 `STATE.md`, 기능 문서, 매뉴얼, README에 기록하지 않는다.
233
+
234
+ 필요한 값은 `.env`, 배포 플랫폼 secret, 또는 사용자가 지정한 안전한 위치에 둔다.
235
+
236
+ ## Useful Commands
237
+
238
+ ```sh
239
+ npm test
240
+ python3 -m unittest tests/hooks/test_user_prompt_submit.py tests/hooks/test_pre_commit.py
241
+ printf '아키텍처 설계하자' | .codex/hooks/user-prompt-submit.sh
242
+ git status
243
+ ```
244
+
245
+ ## Documents
246
+
247
+ - [HARNESS_MANUAL.md](HARNESS_MANUAL.md): 전체 하네스 매뉴얼
248
+ - [.flh/docs/PROJECT_WORKFLOW.md](.flh/docs/PROJECT_WORKFLOW.md): 프로젝트 workflow 설명
249
+ - [.flh/docs/FEATURE_IMPLEMENTATION_PIPELINE.md](.flh/docs/FEATURE_IMPLEMENTATION_PIPELINE.md): 기능 구현 파이프라인
250
+ - [.flh/docs/REVIEW_PATCH_PIPELINE.md](.flh/docs/REVIEW_PATCH_PIPELINE.md): review patch 파이프라인
251
+ - [AGENTS.md](AGENTS.md): Codex 실행 규칙
@@ -0,0 +1,41 @@
1
+ ---
2
+ status: template
3
+ ---
4
+
5
+ # API.md
6
+
7
+ 이 문서는 실제 프로젝트의 API 경계와 공통 규칙을 정의하기 위한 템플릿이다.
8
+
9
+ 하네스 자체의 API를 작성하지 않는다.
10
+ 실제 프로젝트를 시작할 때 이 템플릿을 프로젝트 내용으로 채우고 `status: completed`로 변경한다.
11
+
12
+ ---
13
+
14
+ ## API Areas
15
+
16
+ {{TODO_API_AREAS}}
17
+
18
+ ---
19
+
20
+ ## Endpoint Draft
21
+
22
+ {{TODO_ENDPOINT_DRAFT}}
23
+
24
+ ---
25
+
26
+ ## Authentication and Authorization
27
+
28
+ {{TODO_AUTHENTICATION_AND_AUTHORIZATION}}
29
+
30
+ ---
31
+
32
+ ## Request and Response Rules
33
+
34
+ {{TODO_REQUEST_AND_RESPONSE_RULES}}
35
+
36
+ ---
37
+
38
+ ## Error Response Rules
39
+
40
+ {{TODO_ERROR_RESPONSE_RULES}}
41
+
@@ -0,0 +1,86 @@
1
+ ---
2
+ status: template
3
+ ---
4
+
5
+ # ARCHITECTURE.md
6
+
7
+ 이 문서는 실제 프로젝트의 시스템 아키텍처를 정의하기 위한 템플릿이다.
8
+
9
+ 하네스 자체의 아키텍처를 작성하지 않는다.
10
+ 실제 프로젝트를 시작할 때 이 템플릿을 프로젝트 내용으로 채우고 `status: completed`로 변경한다.
11
+
12
+ ---
13
+
14
+ ## System Overview
15
+
16
+ {{TODO_SYSTEM_OVERVIEW}}
17
+
18
+ ---
19
+
20
+ ## Tech Stack
21
+
22
+ {{TODO_TECH_STACK}}
23
+
24
+ ---
25
+
26
+ ## Source Layout
27
+
28
+ {{TODO_SOURCE_LAYOUT}}
29
+
30
+ 이 섹션의 결정은 `docs/source-layout.yml`에도 기계가 읽을 수 있는 형태로 기록한다.
31
+ `docs/source-layout.yml`은 아키텍처 단계에서 사용자에게 확인해야 하는 필수 결정 체크리스트로 사용한다.
32
+
33
+ ---
34
+
35
+ ## Package Layout
36
+
37
+ {{TODO_PACKAGE_LAYOUT}}
38
+
39
+ ---
40
+
41
+ ## Testing Strategy
42
+
43
+ {{TODO_TESTING_STRATEGY}}
44
+
45
+ 단위, 통합, E2E, 컴포넌트 테스트 도구를 source package별로 결정한다.
46
+ 이 결정은 `docs/source-layout.yml`의 `source_roots.*.testing`에도 기계가 읽을 수 있는 형태로 기록한다.
47
+
48
+ ---
49
+
50
+ ## Modules
51
+
52
+ {{TODO_MODULES}}
53
+
54
+ ---
55
+
56
+ ## Data Flow
57
+
58
+ {{TODO_DATA_FLOW}}
59
+
60
+ ---
61
+
62
+ ## External Dependencies
63
+
64
+ {{TODO_EXTERNAL_DEPENDENCIES}}
65
+
66
+ ---
67
+
68
+ ## Runtime Environment
69
+
70
+ {{TODO_RUNTIME_ENVIRONMENT}}
71
+
72
+ ---
73
+
74
+ ## Scaffold Policy
75
+
76
+ {{TODO_SCAFFOLD_POLICY}}
77
+
78
+ 아키텍처 단계에서는 필요한 source directory와 `.gitkeep`만 생성한다.
79
+ 프레임워크 scaffold와 실제 구현 코드는 기능 구현 단계에서 다룬다.
80
+ 최초 source package scaffold baseline에서 기본 root scaffold category에 없는 root file이 필요하면 `docs/source-layout.yml`의 `project.scaffold_extra_root_files`에 명시한다.
81
+
82
+ ---
83
+
84
+ ## Constraints
85
+
86
+ {{TODO_CONSTRAINTS}}
@@ -0,0 +1,149 @@
1
+ ---
2
+ status: template
3
+ ---
4
+
5
+ # DB_SCHEMA.md
6
+
7
+ 이 문서는 실제 프로젝트의 데이터 모델 baseline을 정의하기 위한 템플릿이다.
8
+
9
+ 하네스 자체의 DB schema를 작성하지 않는다.
10
+ 실제 프로젝트를 시작할 때 이 템플릿을 프로젝트 내용으로 채우고 `status: completed`로 변경한다.
11
+
12
+ 이 문서는 프로젝트 전체 데이터 모델의 단일 truth source다.
13
+ `DATA_MODEL_DEFINITION` 단계에서는 실제 `schema.prisma` 또는 migration 파일을 생성하지 않는다.
14
+ 대신 이 문서를 `FEATURE_IMPLEMENTATION` 단계의 `1.6. Baseline DB Deployment`에서 즉시 `schema.prisma`로 변환할 수 있는 수준의 명세로 완성한다.
15
+
16
+ ---
17
+
18
+ ## Core Entities
19
+
20
+ {{TODO_CORE_ENTITIES}}
21
+
22
+ | Entity | Purpose | Owner | Lifecycle | Notes |
23
+ | --- | --- | --- | --- | --- |
24
+ | {{TODO_ENTITY}} | {{TODO_PURPOSE}} | {{TODO_OWNER}} | {{TODO_LIFECYCLE}} | {{TODO_NOTES}} |
25
+
26
+ ---
27
+
28
+ ## Entity Specifications
29
+
30
+ {{TODO_ENTITY_SPECIFICATIONS}}
31
+
32
+ 각 entity는 Prisma model로 변환 가능하도록 field 단위로 작성한다.
33
+
34
+ ### {{TODO_ENTITY_NAME}}
35
+
36
+ | Field | Prisma Type | DB Type | Required | Default | Unique | Index | Relation | Notes |
37
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- |
38
+ | id | {{TODO_PRISMA_TYPE}} | {{TODO_DB_TYPE}} | yes | {{TODO_DEFAULT}} | yes | primary | none | {{TODO_NOTES}} |
39
+
40
+ 필드 작성 규칙:
41
+
42
+ - `Required`는 `yes` 또는 `no`로 작성한다.
43
+ - nullable field는 `Required`를 `no`로 작성한다.
44
+ - default 값이 없으면 `none`으로 작성한다.
45
+ - unique/index가 없으면 `none`으로 작성한다.
46
+ - relation field는 아래 `Relation Specifications`의 relation ID를 참조한다.
47
+
48
+ ---
49
+
50
+ ## Relation Specifications
51
+
52
+ {{TODO_RELATION_SPECIFICATIONS}}
53
+
54
+ | Relation ID | From Entity | From Field | To Entity | To Field | Cardinality | Required | onDelete | onUpdate | Notes |
55
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
56
+ | {{TODO_RELATION_ID}} | {{TODO_FROM_ENTITY}} | {{TODO_FROM_FIELD}} | {{TODO_TO_ENTITY}} | {{TODO_TO_FIELD}} | {{TODO_CARDINALITY}} | {{TODO_REQUIRED}} | {{TODO_ON_DELETE}} | {{TODO_ON_UPDATE}} | {{TODO_NOTES}} |
57
+
58
+ 관계 작성 규칙:
59
+
60
+ - `Cardinality`는 `one-to-one`, `one-to-many`, `many-to-one`, `many-to-many` 중 하나로 작성한다.
61
+ - foreign key를 가지는 field를 `From Field`에 명확히 작성한다.
62
+ - `onDelete`와 `onUpdate`는 Prisma에서 사용할 값을 명시한다.
63
+ - relation name이 필요하면 `Notes`에 Prisma relation name을 작성한다.
64
+
65
+ ---
66
+
67
+ ## Indexes and Constraints
68
+
69
+ {{TODO_INDEXES_AND_CONSTRAINTS}}
70
+
71
+ | Entity | Type | Fields | Name | Purpose | Notes |
72
+ | --- | --- | --- | --- | --- | --- |
73
+ | {{TODO_ENTITY}} | {{TODO_INDEX_OR_UNIQUE_OR_CONSTRAINT}} | {{TODO_FIELDS}} | {{TODO_NAME}} | {{TODO_PURPOSE}} | {{TODO_NOTES}} |
74
+
75
+ ---
76
+
77
+ ## Enums
78
+
79
+ {{TODO_ENUMS}}
80
+
81
+ | Enum | Values | Used By | Notes |
82
+ | --- | --- | --- | --- |
83
+ | {{TODO_ENUM_NAME}} | {{TODO_VALUES}} | {{TODO_USED_BY}} | {{TODO_NOTES}} |
84
+
85
+ ---
86
+
87
+ ## Ownership and Permissions
88
+
89
+ {{TODO_OWNERSHIP_AND_PERMISSIONS}}
90
+
91
+ | Entity | Owner Field | Access Rule | Write Rule | Delete Rule | Notes |
92
+ | --- | --- | --- | --- | --- | --- |
93
+ | {{TODO_ENTITY}} | {{TODO_OWNER_FIELD}} | {{TODO_ACCESS_RULE}} | {{TODO_WRITE_RULE}} | {{TODO_DELETE_RULE}} | {{TODO_NOTES}} |
94
+
95
+ ---
96
+
97
+ ## ID Strategy
98
+
99
+ {{TODO_ID_STRATEGY}}
100
+
101
+ ID 작성 규칙:
102
+
103
+ - 각 entity의 primary key 방식을 명시한다.
104
+ - UUID, cuid, autoincrement 등 생성 전략을 명시한다.
105
+ - 외부 공개 ID와 내부 DB ID가 다르면 둘 다 명시한다.
106
+
107
+ ---
108
+
109
+ ## Lifecycle Policy
110
+
111
+ {{TODO_LIFECYCLE_POLICY}}
112
+
113
+ 각 entity의 생성, 수정, soft delete, hard delete, archive 정책을 명시한다.
114
+
115
+ ---
116
+
117
+ ## Common Field Policy
118
+
119
+ {{TODO_COMMON_FIELD_POLICY}}
120
+
121
+ 공통 field가 있다면 적용 대상과 Prisma 변환 규칙을 명시한다.
122
+
123
+ | Field | Prisma Type | Default | Applies To | Notes |
124
+ | --- | --- | --- | --- | --- |
125
+ | {{TODO_FIELD}} | {{TODO_PRISMA_TYPE}} | {{TODO_DEFAULT}} | {{TODO_ENTITIES}} | {{TODO_NOTES}} |
126
+
127
+ ---
128
+
129
+ ## Prisma Mapping Notes
130
+
131
+ {{TODO_PRISMA_MAPPING_NOTES}}
132
+
133
+ `FEATURE_IMPLEMENTATION`의 `1.6. Baseline DB Deployment`에서 `schema.prisma`를 생성할 때 적용할 Prisma mapping 규칙을 작성한다.
134
+
135
+ - model 이름
136
+ - field 이름
137
+ - relation 이름
138
+ - `@map` 또는 `@@map` 필요 여부
139
+ - provider별 주의사항
140
+ - Prisma schema로 표현하기 어려운 제약 여부
141
+
142
+ ---
143
+
144
+ ## Migration Notes
145
+
146
+ {{TODO_MIGRATION_NOTES}}
147
+
148
+ `DATA_MODEL_DEFINITION` 단계에서는 Prisma 파일이나 migration 파일을 생성하지 않는다.
149
+ 이 섹션에는 `1.6. Baseline DB Deployment`에서 `schema.prisma`, baseline migration, deploy/verify script를 생성할 때 필요한 주의사항만 기록한다.
@@ -0,0 +1,52 @@
1
+ ---
2
+ status: template
3
+ ---
4
+
5
+ # DESIGN.md
6
+
7
+ 이 문서는 실제 프로젝트의 프론트엔드 디자인 지침을 저장하는 산출물이다.
8
+
9
+ 하네스 자체의 디자인 지침을 작성하지 않는다.
10
+ 실제 프로젝트 진행 시 다음 두 방식 중 하나를 선택한다.
11
+
12
+ - 외부에서 사용 중인 `DESIGN.md`를 이 경로에 가져오고 `.flh/runtime/STATE.md`의 `approvals.design.approved`를 `true`로 기록한다.
13
+ - 이 하네스 흐름 안에서 직접 `DESIGN.md`를 작성하고 `status: completed`로 변경한다.
14
+
15
+ 외부 `DESIGN.md`는 frontmatter가 없을 수 있다.
16
+ 그 경우 문서 형식 검증 대신 사용자 승인 기록을 전이 조건으로 사용한다.
17
+
18
+ ---
19
+
20
+ ## Layout Principles
21
+
22
+ {{TODO_LAYOUT_PRINCIPLES}}
23
+
24
+ ---
25
+
26
+ ## Component Principles
27
+
28
+ {{TODO_COMPONENT_PRINCIPLES}}
29
+
30
+ ---
31
+
32
+ ## State Loading and Error
33
+
34
+ {{TODO_STATE_LOADING_AND_ERROR}}
35
+
36
+ ---
37
+
38
+ ## Form Rules
39
+
40
+ {{TODO_FORM_RULES}}
41
+
42
+ ---
43
+
44
+ ## Responsive Rules
45
+
46
+ {{TODO_RESPONSIVE_RULES}}
47
+
48
+ ---
49
+
50
+ ## Accessibility
51
+
52
+ {{TODO_ACCESSIBILITY}}
@@ -0,0 +1,47 @@
1
+ ---
2
+ status: template
3
+ ---
4
+
5
+ # MVP.md
6
+
7
+ 이 문서는 실제 프로젝트의 MVP를 정의하기 위한 템플릿이다.
8
+
9
+ 하네스 자체의 MVP를 작성하지 않는다.
10
+ 실제 프로젝트를 시작할 때 이 템플릿을 프로젝트 내용으로 채우고 `status: completed`로 변경한다.
11
+
12
+ ---
13
+
14
+ ## MVP Goal
15
+
16
+ {{TODO_MVP_GOAL}}
17
+
18
+ ---
19
+
20
+ ## Target Users
21
+
22
+ {{TODO_TARGET_USERS}}
23
+
24
+ ---
25
+
26
+ ## Core Problem
27
+
28
+ {{TODO_CORE_PROBLEM}}
29
+
30
+ ---
31
+
32
+ ## In Scope
33
+
34
+ {{TODO_IN_SCOPE}}
35
+
36
+ ---
37
+
38
+ ## Out of Scope
39
+
40
+ {{TODO_OUT_OF_SCOPE}}
41
+
42
+ ---
43
+
44
+ ## Success Criteria
45
+
46
+ {{TODO_SUCCESS_CRITERIA}}
47
+
@@ -0,0 +1,54 @@
1
+ ---
2
+ status: template
3
+ ---
4
+
5
+ # QUALITY_SCORE.md
6
+
7
+ 기능별 최종 품질 점수를 한눈에 보기 위한 전역 인덱스다.
8
+
9
+ 이 파일에는 상세 평가 내용을 쓰지 않는다.
10
+ 상세 평가는 각 기능 디렉토리의 `QUALITY_SCORE.md`에 기록한다.
11
+
12
+ 전역 인덱스의 목적은 리팩토링, 수정, 개선이 필요한 기능을 빠르게 찾는 것이다.
13
+
14
+ ---
15
+
16
+ ## Score Index
17
+
18
+ | Feature ID | Feature | Score | Grade | Last Evaluated | Notes | Detail |
19
+ | --- | --- | ---: | --- | --- | --- | --- |
20
+
21
+ 첫 기능 평가가 완료되면 이 표에 행을 추가한다.
22
+
23
+ 예시:
24
+
25
+ ```md
26
+ | FEAT-001 | Login | 82 | B | 2026-05-26 | E2E stable, minor UX improvement candidate | docs/features/review/FEAT-001-login/QUALITY_SCORE.md |
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Grade Rule
32
+
33
+ | Score | Grade | Meaning |
34
+ | ---: | --- | --- |
35
+ | 90-100 | A | Stable and polished |
36
+ | 80-89 | B | Good, minor improvements possible |
37
+ | 70-79 | C | Acceptable, improvement candidate |
38
+ | 0-69 | D | Rework required |
39
+
40
+ ---
41
+
42
+ ## Gate Rule
43
+
44
+ - `70`점 이상이면 커밋 가능하다.
45
+ - `70`점 미만이면 수정 후 재검증한다.
46
+ - 치명 조건이 있으면 점수와 관계없이 커밋하지 않는다.
47
+
48
+ 치명 조건:
49
+
50
+ - E2E failure
51
+ - SPEC scope violation
52
+ - DB_SCHEMA conflict
53
+ - Security risk
54
+ - Broken primary user flow