timsquad 2.0.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 (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/bin/tsq.js +6 -0
  4. package/dist/commands/feedback.d.ts +3 -0
  5. package/dist/commands/feedback.d.ts.map +1 -0
  6. package/dist/commands/feedback.js +142 -0
  7. package/dist/commands/feedback.js.map +1 -0
  8. package/dist/commands/full.d.ts +3 -0
  9. package/dist/commands/full.d.ts.map +1 -0
  10. package/dist/commands/full.js +87 -0
  11. package/dist/commands/full.js.map +1 -0
  12. package/dist/commands/git/commit.d.ts +3 -0
  13. package/dist/commands/git/commit.d.ts.map +1 -0
  14. package/dist/commands/git/commit.js +88 -0
  15. package/dist/commands/git/commit.js.map +1 -0
  16. package/dist/commands/git/index.d.ts +5 -0
  17. package/dist/commands/git/index.d.ts.map +1 -0
  18. package/dist/commands/git/index.js +5 -0
  19. package/dist/commands/git/index.js.map +1 -0
  20. package/dist/commands/git/pr.d.ts +3 -0
  21. package/dist/commands/git/pr.d.ts.map +1 -0
  22. package/dist/commands/git/pr.js +138 -0
  23. package/dist/commands/git/pr.js.map +1 -0
  24. package/dist/commands/git/release.d.ts +3 -0
  25. package/dist/commands/git/release.d.ts.map +1 -0
  26. package/dist/commands/git/release.js +158 -0
  27. package/dist/commands/git/release.js.map +1 -0
  28. package/dist/commands/git/sync.d.ts +3 -0
  29. package/dist/commands/git/sync.d.ts.map +1 -0
  30. package/dist/commands/git/sync.js +132 -0
  31. package/dist/commands/git/sync.js.map +1 -0
  32. package/dist/commands/init.d.ts +3 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +150 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/log.d.ts +3 -0
  37. package/dist/commands/log.d.ts.map +1 -0
  38. package/dist/commands/log.js +271 -0
  39. package/dist/commands/log.js.map +1 -0
  40. package/dist/commands/metrics.d.ts +3 -0
  41. package/dist/commands/metrics.d.ts.map +1 -0
  42. package/dist/commands/metrics.js +299 -0
  43. package/dist/commands/metrics.js.map +1 -0
  44. package/dist/commands/quick.d.ts +3 -0
  45. package/dist/commands/quick.d.ts.map +1 -0
  46. package/dist/commands/quick.js +136 -0
  47. package/dist/commands/quick.js.map +1 -0
  48. package/dist/commands/retro.d.ts +3 -0
  49. package/dist/commands/retro.d.ts.map +1 -0
  50. package/dist/commands/retro.js +280 -0
  51. package/dist/commands/retro.js.map +1 -0
  52. package/dist/commands/status.d.ts +3 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +127 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/watch.d.ts +3 -0
  57. package/dist/commands/watch.d.ts.map +1 -0
  58. package/dist/commands/watch.js +213 -0
  59. package/dist/commands/watch.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +50 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/lib/config.d.ts +34 -0
  65. package/dist/lib/config.d.ts.map +1 -0
  66. package/dist/lib/config.js +108 -0
  67. package/dist/lib/config.js.map +1 -0
  68. package/dist/lib/project.d.ts +47 -0
  69. package/dist/lib/project.d.ts.map +1 -0
  70. package/dist/lib/project.js +191 -0
  71. package/dist/lib/project.js.map +1 -0
  72. package/dist/lib/template.d.ts +33 -0
  73. package/dist/lib/template.d.ts.map +1 -0
  74. package/dist/lib/template.js +151 -0
  75. package/dist/lib/template.js.map +1 -0
  76. package/dist/types/config.d.ts +75 -0
  77. package/dist/types/config.d.ts.map +1 -0
  78. package/dist/types/config.js +66 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/feedback.d.ts +59 -0
  81. package/dist/types/feedback.d.ts.map +1 -0
  82. package/dist/types/feedback.js +26 -0
  83. package/dist/types/feedback.js.map +1 -0
  84. package/dist/types/index.d.ts +4 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +5 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/project.d.ts +89 -0
  89. package/dist/types/project.d.ts.map +1 -0
  90. package/dist/types/project.js +44 -0
  91. package/dist/types/project.js.map +1 -0
  92. package/dist/utils/colors.d.ts +30 -0
  93. package/dist/utils/colors.d.ts.map +1 -0
  94. package/dist/utils/colors.js +54 -0
  95. package/dist/utils/colors.js.map +1 -0
  96. package/dist/utils/date.d.ts +25 -0
  97. package/dist/utils/date.d.ts.map +1 -0
  98. package/dist/utils/date.js +65 -0
  99. package/dist/utils/date.js.map +1 -0
  100. package/dist/utils/fs.d.ts +49 -0
  101. package/dist/utils/fs.d.ts.map +1 -0
  102. package/dist/utils/fs.js +84 -0
  103. package/dist/utils/fs.js.map +1 -0
  104. package/dist/utils/prompts.d.ts +31 -0
  105. package/dist/utils/prompts.d.ts.map +1 -0
  106. package/dist/utils/prompts.js +95 -0
  107. package/dist/utils/prompts.js.map +1 -0
  108. package/dist/utils/yaml.d.ts +21 -0
  109. package/dist/utils/yaml.d.ts.map +1 -0
  110. package/dist/utils/yaml.js +40 -0
  111. package/dist/utils/yaml.js.map +1 -0
  112. package/package.json +71 -0
  113. package/templates/common/CLAUDE.md.template +254 -0
  114. package/templates/common/claude/agents/tsq-dba.md +290 -0
  115. package/templates/common/claude/agents/tsq-designer.md +304 -0
  116. package/templates/common/claude/agents/tsq-developer.md +118 -0
  117. package/templates/common/claude/agents/tsq-planner.md +90 -0
  118. package/templates/common/claude/agents/tsq-prompter.md +336 -0
  119. package/templates/common/claude/agents/tsq-qa.md +134 -0
  120. package/templates/common/claude/agents/tsq-retro.md +168 -0
  121. package/templates/common/claude/agents/tsq-security.md +190 -0
  122. package/templates/common/claude/skills/architecture/SKILL.md +123 -0
  123. package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
  124. package/templates/common/claude/skills/coding/SKILL.md +171 -0
  125. package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
  126. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
  127. package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
  128. package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
  129. package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
  130. package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
  131. package/templates/common/claude/skills/planning/SKILL.md +90 -0
  132. package/templates/common/claude/skills/security/SKILL.md +234 -0
  133. package/templates/common/claude/skills/testing/SKILL.md +146 -0
  134. package/templates/common/claude/skills/typescript/SKILL.md +435 -0
  135. package/templates/common/config.template.yaml +131 -0
  136. package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
  137. package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
  138. package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
  139. package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
  140. package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
  141. package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
  142. package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
  143. package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
  144. package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
  145. package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
  146. package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
  147. package/templates/common/timsquad/generators/data-design.xml +290 -0
  148. package/templates/common/timsquad/generators/prd.xml +280 -0
  149. package/templates/common/timsquad/generators/requirements.xml +220 -0
  150. package/templates/common/timsquad/generators/service-spec.xml +266 -0
  151. package/templates/common/timsquad/logs/_example.md +81 -0
  152. package/templates/common/timsquad/logs/_template.md +46 -0
  153. package/templates/common/timsquad/patterns/cqrs.xml +127 -0
  154. package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
  155. package/templates/common/timsquad/patterns/repository.xml +64 -0
  156. package/templates/common/timsquad/process/state-machine.xml +343 -0
  157. package/templates/common/timsquad/process/validation-rules.xml +308 -0
  158. package/templates/common/timsquad/process/workflow-base.xml +202 -0
  159. package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
  160. package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
  161. package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
  162. package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
  163. package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
  164. package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
  165. package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
  166. package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
  167. package/templates/common/timsquad/ssot/data-design.template.md +132 -0
  168. package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
  169. package/templates/common/timsquad/ssot/env-config.template.md +346 -0
  170. package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
  171. package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
  172. package/templates/common/timsquad/ssot/glossary.template.md +148 -0
  173. package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
  174. package/templates/common/timsquad/ssot/planning.template.md +94 -0
  175. package/templates/common/timsquad/ssot/prd.template.md +102 -0
  176. package/templates/common/timsquad/ssot/requirements.template.md +117 -0
  177. package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
  178. package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
  179. package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
  180. package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
  181. package/templates/common/timsquad/state/workspace.xml +217 -0
@@ -0,0 +1,210 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <directory-structure architecture="clean" target="backend">
3
+ <description>Clean Architecture for Node.js/Hono Backend</description>
4
+
5
+ <root name="src">
6
+ <!-- Domain Layer (Core) -->
7
+ <dir name="domain" layer="entities">
8
+ <description>순수 비즈니스 로직. 프레임워크 의존성 완전 제거</description>
9
+
10
+ <dir name="entities">
11
+ <description>도메인 엔티티</description>
12
+ <file name="user.entity.ts" example="class User { constructor(private readonly props: UserProps) {} }" />
13
+ <file name="order.entity.ts" />
14
+ <file name="product.entity.ts" />
15
+ </dir>
16
+
17
+ <dir name="value-objects">
18
+ <description>불변 값 객체 (Branded Types)</description>
19
+ <file name="user-id.vo.ts" />
20
+ <file name="email.vo.ts" />
21
+ <file name="money.vo.ts" />
22
+ </dir>
23
+
24
+ <dir name="errors">
25
+ <description>도메인 에러</description>
26
+ <file name="domain-error.ts" example="abstract class DomainError extends Error {}" />
27
+ <file name="invalid-email.error.ts" />
28
+ <file name="order-not-found.error.ts" />
29
+ </dir>
30
+
31
+ <dir name="events">
32
+ <description>도메인 이벤트</description>
33
+ <file name="domain-event.ts" />
34
+ <file name="user-created.event.ts" />
35
+ <file name="order-placed.event.ts" />
36
+ </dir>
37
+
38
+ <dir name="rules">
39
+ <description>비즈니스 규칙 (순수 함수)</description>
40
+ <file name="order.rules.ts" />
41
+ <file name="pricing.rules.ts" />
42
+ </dir>
43
+ </dir>
44
+
45
+ <!-- Application Layer (Use Cases) -->
46
+ <dir name="application" layer="use-cases">
47
+ <description>애플리케이션 서비스. 유스케이스 오케스트레이션</description>
48
+
49
+ <dir name="ports">
50
+ <description>포트 인터페이스 (의존성 역전의 핵심)</description>
51
+
52
+ <dir name="inbound">
53
+ <description>인바운드 포트 (유스케이스 인터페이스)</description>
54
+ <file name="create-user.port.ts" />
55
+ <file name="get-order.port.ts" />
56
+ </dir>
57
+
58
+ <dir name="outbound">
59
+ <description>아웃바운드 포트 (외부 의존성 인터페이스)</description>
60
+ <file name="user-repository.port.ts" example="interface IUserRepository { save(user: User): Promise&lt;void&gt;; }" />
61
+ <file name="order-repository.port.ts" />
62
+ <file name="payment-gateway.port.ts" />
63
+ <file name="email-sender.port.ts" />
64
+ </dir>
65
+ </dir>
66
+
67
+ <dir name="use-cases">
68
+ <description>유스케이스 구현</description>
69
+
70
+ <dir name="user">
71
+ <file name="create-user.use-case.ts" />
72
+ <file name="get-user.use-case.ts" />
73
+ <file name="update-user.use-case.ts" />
74
+ </dir>
75
+
76
+ <dir name="order">
77
+ <file name="create-order.use-case.ts" />
78
+ <file name="cancel-order.use-case.ts" />
79
+ <file name="get-order.use-case.ts" />
80
+ </dir>
81
+ </dir>
82
+
83
+ <dir name="dto">
84
+ <description>Command/Query DTO</description>
85
+ <file name="create-user.dto.ts" />
86
+ <file name="create-order.dto.ts" />
87
+ </dir>
88
+
89
+ <dir name="services">
90
+ <description>애플리케이션 서비스 (유스케이스 조합)</description>
91
+ <file name="user.service.ts" />
92
+ <file name="order.service.ts" />
93
+ </dir>
94
+ </dir>
95
+
96
+ <!-- Adapters Layer (Interface) -->
97
+ <dir name="adapters" layer="adapters">
98
+ <description>외부와 내부를 연결하는 어댑터</description>
99
+
100
+ <dir name="inbound">
101
+ <description>인바운드 어댑터 (API 진입점)</description>
102
+
103
+ <dir name="http">
104
+ <description>HTTP 컨트롤러 (Hono Routes)</description>
105
+ <file name="user.controller.ts" />
106
+ <file name="order.controller.ts" />
107
+ <file name="health.controller.ts" />
108
+ </dir>
109
+
110
+ <dir name="validators">
111
+ <description>요청 검증 (Zod 스키마)</description>
112
+ <file name="user.validator.ts" />
113
+ <file name="order.validator.ts" />
114
+ </dir>
115
+
116
+ <dir name="presenters">
117
+ <description>응답 포맷터</description>
118
+ <file name="user.presenter.ts" />
119
+ <file name="order.presenter.ts" />
120
+ </dir>
121
+ </dir>
122
+
123
+ <dir name="outbound">
124
+ <description>아웃바운드 어댑터 (외부 서비스)</description>
125
+
126
+ <dir name="persistence">
127
+ <description>리포지토리 구현 (Prisma)</description>
128
+ <file name="prisma-user.repository.ts" />
129
+ <file name="prisma-order.repository.ts" />
130
+ </dir>
131
+
132
+ <dir name="external">
133
+ <description>외부 API 어댑터</description>
134
+ <file name="stripe-payment.adapter.ts" />
135
+ <file name="sendgrid-email.adapter.ts" />
136
+ </dir>
137
+
138
+ <dir name="mappers">
139
+ <description>영속성 ↔ 도메인 매퍼</description>
140
+ <file name="user.mapper.ts" />
141
+ <file name="order.mapper.ts" />
142
+ </dir>
143
+ </dir>
144
+ </dir>
145
+
146
+ <!-- Infrastructure Layer (External) -->
147
+ <dir name="infrastructure" layer="infrastructure">
148
+ <description>프레임워크 설정 및 인프라</description>
149
+
150
+ <dir name="http">
151
+ <description>Hono 앱 설정</description>
152
+ <file name="app.ts" example="Hono 인스턴스 생성 및 미들웨어 설정" />
153
+ <file name="routes.ts" example="라우트 등록" />
154
+ <file name="middleware.ts" />
155
+ </dir>
156
+
157
+ <dir name="database">
158
+ <description>DB 연결</description>
159
+ <file name="prisma.ts" example="PrismaClient 싱글톤" />
160
+ <file name="migrations/" />
161
+ </dir>
162
+
163
+ <dir name="config">
164
+ <description>환경 설정</description>
165
+ <file name="env.ts" example="Zod로 환경변수 검증" />
166
+ <file name="constants.ts" />
167
+ </dir>
168
+
169
+ <dir name="di">
170
+ <description>의존성 주입 컨테이너</description>
171
+ <file name="container.ts" />
172
+ <file name="types.ts" example="DI 토큰 정의" />
173
+ </dir>
174
+
175
+ <dir name="logging">
176
+ <description>로깅</description>
177
+ <file name="logger.ts" />
178
+ </dir>
179
+ </dir>
180
+
181
+ <!-- Entry Point -->
182
+ <file name="index.ts" layer="infrastructure">
183
+ <description>애플리케이션 진입점</description>
184
+ </file>
185
+ </root>
186
+
187
+ <import-rules>
188
+ <rule from="domain" to="없음">domain은 외부 의존성 금지. 순수 TypeScript만</rule>
189
+ <rule from="application" to="domain">application은 domain만 import. 프레임워크 금지</rule>
190
+ <rule from="adapters" to="application,domain">adapters는 포트를 구현하고 유스케이스 호출</rule>
191
+ <rule from="infrastructure" to="all">infrastructure는 모든 레이어 조립</rule>
192
+ </import-rules>
193
+
194
+ <testing-structure>
195
+ <dir name="__tests__">
196
+ <dir name="unit">
197
+ <description>유닛 테스트 (도메인, 유스케이스)</description>
198
+ <dir name="domain" />
199
+ <dir name="application" />
200
+ </dir>
201
+ <dir name="integration">
202
+ <description>통합 테스트 (어댑터)</description>
203
+ <dir name="adapters" />
204
+ </dir>
205
+ <dir name="e2e">
206
+ <description>E2E 테스트 (API)</description>
207
+ </dir>
208
+ </dir>
209
+ </testing-structure>
210
+ </directory-structure>
@@ -0,0 +1,148 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <directory-structure architecture="clean" target="frontend">
3
+ <description>Clean Architecture for React/Next.js Frontend</description>
4
+
5
+ <root name="src">
6
+ <!-- Domain Layer (Core) -->
7
+ <dir name="domain" layer="entities">
8
+ <description>순수 비즈니스 로직. 프레임워크 의존성 없음</description>
9
+
10
+ <dir name="models">
11
+ <description>도메인 모델 (엔티티, Value Objects)</description>
12
+ <file name="user.ts" example="interface User { id: UserId; email: Email; name: string; }" />
13
+ <file name="order.ts" />
14
+ <file name="product.ts" />
15
+ </dir>
16
+
17
+ <dir name="value-objects">
18
+ <description>불변 값 객체 (Branded Types)</description>
19
+ <file name="user-id.ts" example="type UserId = string &amp; { readonly __brand: 'UserId' };" />
20
+ <file name="email.ts" />
21
+ <file name="money.ts" />
22
+ </dir>
23
+
24
+ <dir name="rules">
25
+ <description>비즈니스 규칙 (순수 함수)</description>
26
+ <file name="order-rules.ts" example="function canCancelOrder(order: Order): boolean" />
27
+ <file name="pricing-rules.ts" />
28
+ </dir>
29
+ </dir>
30
+
31
+ <!-- Application Layer (Use Cases) -->
32
+ <dir name="application" layer="use-cases">
33
+ <description>애플리케이션 로직. 유스케이스 정의</description>
34
+
35
+ <dir name="ports">
36
+ <description>외부 의존성 인터페이스 (의존성 역전)</description>
37
+ <file name="user-repository.ts" example="interface IUserRepository { findById(id: UserId): Promise&lt;User | null&gt;; }" />
38
+ <file name="order-repository.ts" />
39
+ <file name="payment-gateway.ts" />
40
+ </dir>
41
+
42
+ <dir name="use-cases">
43
+ <description>유스케이스 구현</description>
44
+ <dir name="user">
45
+ <file name="get-user.ts" />
46
+ <file name="update-profile.ts" />
47
+ </dir>
48
+ <dir name="order">
49
+ <file name="create-order.ts" />
50
+ <file name="cancel-order.ts" />
51
+ </dir>
52
+ </dir>
53
+
54
+ <dir name="dto">
55
+ <description>Data Transfer Objects</description>
56
+ <file name="user-dto.ts" />
57
+ <file name="order-dto.ts" />
58
+ </dir>
59
+ </dir>
60
+
61
+ <!-- Adapters Layer (Interface) -->
62
+ <dir name="adapters" layer="adapters">
63
+ <description>외부와 내부를 연결</description>
64
+
65
+ <dir name="repositories">
66
+ <description>포트 구현 (API 호출)</description>
67
+ <file name="api-user-repository.ts" />
68
+ <file name="api-order-repository.ts" />
69
+ </dir>
70
+
71
+ <dir name="presenters">
72
+ <description>뷰 모델 변환</description>
73
+ <file name="user-presenter.ts" />
74
+ <file name="order-presenter.ts" />
75
+ </dir>
76
+
77
+ <dir name="mappers">
78
+ <description>DTO ↔ 도메인 모델 변환</description>
79
+ <file name="user-mapper.ts" />
80
+ <file name="order-mapper.ts" />
81
+ </dir>
82
+ </dir>
83
+
84
+ <!-- Infrastructure Layer (External) -->
85
+ <dir name="infrastructure" layer="infrastructure">
86
+ <description>프레임워크 종속 코드</description>
87
+
88
+ <dir name="api">
89
+ <description>HTTP 클라이언트</description>
90
+ <file name="api-client.ts" />
91
+ <file name="interceptors.ts" />
92
+ </dir>
93
+
94
+ <dir name="storage">
95
+ <description>로컬 스토리지, 캐시</description>
96
+ <file name="local-storage.ts" />
97
+ <file name="query-cache.ts" />
98
+ </dir>
99
+
100
+ <dir name="di">
101
+ <description>의존성 주입 설정</description>
102
+ <file name="container.ts" />
103
+ <file name="providers.tsx" />
104
+ </dir>
105
+ </dir>
106
+
107
+ <!-- UI Layer (React Components) -->
108
+ <dir name="ui" layer="presentation">
109
+ <description>React 컴포넌트 (프레임워크 레이어)</description>
110
+
111
+ <dir name="components">
112
+ <description>재사용 가능한 UI 컴포넌트</description>
113
+ <dir name="common">
114
+ <file name="Button.tsx" />
115
+ <file name="Input.tsx" />
116
+ <file name="Modal.tsx" />
117
+ </dir>
118
+ </dir>
119
+
120
+ <dir name="pages">
121
+ <description>페이지 컴포넌트</description>
122
+ <file name="HomePage.tsx" />
123
+ <file name="UserPage.tsx" />
124
+ <file name="OrderPage.tsx" />
125
+ </dir>
126
+
127
+ <dir name="hooks">
128
+ <description>React 훅 (유스케이스 연결)</description>
129
+ <file name="useUser.ts" example="유스케이스를 호출하는 커스텀 훅" />
130
+ <file name="useOrder.ts" />
131
+ </dir>
132
+
133
+ <dir name="contexts">
134
+ <description>React Context (전역 상태)</description>
135
+ <file name="AuthContext.tsx" />
136
+ <file name="ThemeContext.tsx" />
137
+ </dir>
138
+ </dir>
139
+ </root>
140
+
141
+ <import-rules>
142
+ <rule from="domain" to="없음">domain은 어디에도 의존하지 않음</rule>
143
+ <rule from="application" to="domain">application은 domain만 import</rule>
144
+ <rule from="adapters" to="application,domain">adapters는 application, domain import 가능</rule>
145
+ <rule from="infrastructure" to="adapters,application,domain">infrastructure는 모든 내부 레이어 import 가능</rule>
146
+ <rule from="ui" to="application,domain,adapters">ui는 infrastructure 직접 import 금지 (DI 통해 주입)</rule>
147
+ </import-rules>
148
+ </directory-structure>
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: feature-sliced-design
3
+ description: Feature-Sliced Design (FSD)
4
+ aliases: [fsd]
5
+ suitable-for: [web-service, platform]
6
+ target: frontend
7
+ ---
8
+
9
+ # Feature-Sliced Design (FSD)
10
+
11
+ <architecture name="fsd">
12
+ <philosophy>
13
+ <principle>비즈니스 가치 기준 코드 분리</principle>
14
+ <principle>낮은 결합도, 높은 응집도</principle>
15
+ <principle>단방향 의존성 (위에서 아래로만)</principle>
16
+ <principle>Public API를 통한 명시적 인터페이스</principle>
17
+ </philosophy>
18
+
19
+ <layers order="top-to-bottom">
20
+ <layer name="app" level="1">
21
+ <description>앱 초기화, 프로바이더, 라우팅</description>
22
+ <can-import>pages, widgets, features, entities, shared</can-import>
23
+ </layer>
24
+
25
+ <layer name="pages" level="2">
26
+ <description>라우트별 페이지 컴포넌트</description>
27
+ <can-import>widgets, features, entities, shared</can-import>
28
+ </layer>
29
+
30
+ <layer name="widgets" level="3">
31
+ <description>독립적인 UI 블록 (헤더, 사이드바 등)</description>
32
+ <can-import>features, entities, shared</can-import>
33
+ </layer>
34
+
35
+ <layer name="features" level="4">
36
+ <description>사용자 시나리오, 비즈니스 기능</description>
37
+ <can-import>entities, shared</can-import>
38
+ </layer>
39
+
40
+ <layer name="entities" level="5">
41
+ <description>비즈니스 엔티티 (User, Product, Order)</description>
42
+ <can-import>shared</can-import>
43
+ </layer>
44
+
45
+ <layer name="shared" level="6">
46
+ <description>재사용 유틸리티, UI kit, 설정</description>
47
+ <can-import>없음</can-import>
48
+ </layer>
49
+ </layers>
50
+
51
+ <slice-structure>
52
+ <description>각 레이어 내 슬라이스 구조</description>
53
+ <segment name="ui">React 컴포넌트</segment>
54
+ <segment name="model">비즈니스 로직, 상태</segment>
55
+ <segment name="api">API 호출</segment>
56
+ <segment name="lib">유틸리티 함수</segment>
57
+ <segment name="config">설정</segment>
58
+ <segment name="index.ts">Public API (re-export)</segment>
59
+ </slice-structure>
60
+
61
+ <public-api-rule>
62
+ <rule>모든 슬라이스는 index.ts를 통해서만 외부에 노출</rule>
63
+ <rule>내부 구현 직접 import 금지</rule>
64
+ <example type="good">import { UserCard } from '@/entities/user'</example>
65
+ <example type="bad">import { UserCard } from '@/entities/user/ui/UserCard'</example>
66
+ </public-api-rule>
67
+ </architecture>