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,433 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ssot-schema>
3
+ <metadata>
4
+ <description>SSOT 문서 필수 필드 및 형식 정의</description>
5
+ <version>1.0</version>
6
+ </metadata>
7
+
8
+ <!-- ============================================================
9
+ 문서 공통 규칙
10
+ ============================================================ -->
11
+ <common-rules>
12
+ <rule id="COMMON-001">
13
+ <name>YAML Frontmatter 필수</name>
14
+ <description>모든 SSOT 문서는 YAML frontmatter를 포함해야 함</description>
15
+ <required-fields>
16
+ <field name="title" type="string">문서 제목</field>
17
+ <field name="version" type="semver">버전 (예: 1.0.0)</field>
18
+ <field name="last_updated" type="date">최종 수정일 (ISO 8601)</field>
19
+ <field name="author" type="string">작성자/에이전트</field>
20
+ <field name="status" type="enum">draft | review | approved</field>
21
+ </required-fields>
22
+ <example>
23
+ <![CDATA[
24
+ ---
25
+ title: 서비스 명세서
26
+ version: 1.0.0
27
+ last_updated: 2026-02-03
28
+ author: tsq-planner
29
+ status: approved
30
+ ---
31
+ ]]>
32
+ </example>
33
+ </rule>
34
+
35
+ <rule id="COMMON-002">
36
+ <name>변경 이력 섹션</name>
37
+ <description>문서 끝에 변경 이력 섹션 필수</description>
38
+ <template>
39
+ <![CDATA[
40
+ ## 변경 이력
41
+
42
+ | 버전 | 날짜 | 작성자 | 변경 내용 |
43
+ |------|------|--------|----------|
44
+ | 1.0.0 | 2026-02-03 | tsq-planner | 초기 작성 |
45
+ ]]>
46
+ </template>
47
+ </rule>
48
+
49
+ <rule id="COMMON-003">
50
+ <name>상호 참조</name>
51
+ <description>관련 문서 참조 시 상대 경로 사용</description>
52
+ <example>→ [service-spec.md](./service-spec.md) 참조</example>
53
+ </rule>
54
+ </common-rules>
55
+
56
+ <!-- ============================================================
57
+ 문서별 스키마
58
+ ============================================================ -->
59
+ <documents>
60
+ <!-- PRD -->
61
+ <document id="prd" file="prd.md" required-level="1">
62
+ <description>제품 요구사항 정의서</description>
63
+ <purpose>왜 만드는지, 목표, 성공 지표</purpose>
64
+
65
+ <required-sections>
66
+ <section id="overview">
67
+ <name>개요</name>
68
+ <fields>
69
+ <field name="한 줄 정의" required="true"/>
70
+ <field name="배경" required="true"/>
71
+ <field name="목표" required="true"/>
72
+ </fields>
73
+ </section>
74
+
75
+ <section id="target-users">
76
+ <name>타겟 사용자</name>
77
+ <fields>
78
+ <field name="Primary" required="true"/>
79
+ <field name="Secondary" required="false"/>
80
+ </fields>
81
+ </section>
82
+
83
+ <section id="success-metrics">
84
+ <name>성공 지표</name>
85
+ <fields>
86
+ <field name="정량적 지표" required="true"/>
87
+ <field name="정성적 지표" required="false"/>
88
+ </fields>
89
+ </section>
90
+
91
+ <section id="scope">
92
+ <name>범위</name>
93
+ <fields>
94
+ <field name="포함 (In Scope)" required="true"/>
95
+ <field name="제외 (Out of Scope)" required="true"/>
96
+ </fields>
97
+ </section>
98
+ </required-sections>
99
+
100
+ <validation>
101
+ <rule>목표는 측정 가능해야 함 (SMART)</rule>
102
+ <rule>범위가 명확해야 함</rule>
103
+ </validation>
104
+ </document>
105
+
106
+ <!-- Requirements -->
107
+ <document id="requirements" file="requirements.md" required-level="1">
108
+ <description>기능/비기능 요건 정의</description>
109
+
110
+ <required-sections>
111
+ <section id="functional">
112
+ <name>기능 요건</name>
113
+ <format>
114
+ <![CDATA[
115
+ ### FR-{번호}: {요건 제목}
116
+
117
+ - **설명**: {상세 설명}
118
+ - **우선순위**: Must | Should | Could | Won't
119
+ - **수용 조건**: {충족 조건 목록}
120
+ ]]>
121
+ </format>
122
+ <rules>
123
+ <rule>각 요건에 고유 ID 부여 (FR-001, FR-002...)</rule>
124
+ <rule>우선순위 명시 필수</rule>
125
+ <rule>수용 조건 명시 필수</rule>
126
+ </rules>
127
+ </section>
128
+
129
+ <section id="non-functional">
130
+ <name>비기능 요건</name>
131
+ <format>
132
+ <![CDATA[
133
+ ### NFR-{번호}: {요건 제목}
134
+
135
+ - **카테고리**: 성능 | 보안 | 가용성 | 확장성
136
+ - **설명**: {상세 설명}
137
+ - **측정 기준**: {구체적 수치}
138
+ ]]>
139
+ </format>
140
+ </section>
141
+ </required-sections>
142
+ </document>
143
+
144
+ <!-- Service Spec -->
145
+ <document id="service-spec" file="service-spec.md" required-level="1">
146
+ <description>API 명세서 (프론트-백 계약서)</description>
147
+
148
+ <required-sections>
149
+ <section id="api-overview">
150
+ <name>API 개요</name>
151
+ <fields>
152
+ <field name="Base URL" required="true"/>
153
+ <field name="인증 방식" required="true"/>
154
+ <field name="공통 헤더" required="true"/>
155
+ <field name="응답 형식" required="true"/>
156
+ </fields>
157
+ </section>
158
+
159
+ <section id="endpoints">
160
+ <name>엔드포인트</name>
161
+ <format>
162
+ <![CDATA[
163
+ ## {도메인}
164
+
165
+ ### {서비스명}
166
+
167
+ | 항목 | 값 |
168
+ |-----|---|
169
+ | **URL** | `{METHOD} /api/v1/{path}` |
170
+ | **설명** | {설명} |
171
+ | **인증** | Required | Optional | None |
172
+
173
+ #### Request
174
+
175
+ | Field | Type | Required | Description |
176
+ |-------|------|:--------:|-------------|
177
+ | {field} | {type} | O/X | {설명} |
178
+
179
+ #### Response
180
+
181
+ | Field | Type | Description |
182
+ |-------|------|-------------|
183
+ | {field} | {type} | {설명} |
184
+
185
+ #### Errors
186
+ → [error-codes.md](./error-codes.md) 참조: {에러코드 목록}
187
+ ]]>
188
+ </format>
189
+ <rules>
190
+ <rule>모든 엔드포인트에 HTTP 메서드 명시</rule>
191
+ <rule>Request/Response 필드 타입 명시</rule>
192
+ <rule>에러 코드는 error-codes.md 참조</rule>
193
+ </rules>
194
+ </section>
195
+ </required-sections>
196
+
197
+ <validation>
198
+ <rule>URL 형식: /api/v{version}/{resource}</rule>
199
+ <rule>타입은 TypeScript/JSON 표준 타입 사용</rule>
200
+ <rule>Required 필드 명확히 표시</rule>
201
+ </validation>
202
+ </document>
203
+
204
+ <!-- Error Codes -->
205
+ <document id="error-codes" file="error-codes.md" required-level="2">
206
+ <description>에러 코드 통합 문서</description>
207
+
208
+ <required-sections>
209
+ <section id="error-format">
210
+ <name>에러 응답 형식</name>
211
+ <format>
212
+ <![CDATA[
213
+ ```json
214
+ {
215
+ "success": false,
216
+ "error": {
217
+ "code": "AUTH_001",
218
+ "message": "Invalid credentials",
219
+ "details": {}
220
+ }
221
+ }
222
+ ```
223
+ ]]>
224
+ </format>
225
+ </section>
226
+
227
+ <section id="error-table">
228
+ <name>에러 코드 목록</name>
229
+ <format>
230
+ <![CDATA[
231
+ ## {도메인}
232
+
233
+ | Code | HTTP | Message | 설명 |
234
+ |------|------|---------|-----|
235
+ | {DOMAIN}_{번호} | {상태코드} | {메시지} | {설명} |
236
+ ]]>
237
+ </format>
238
+ <rules>
239
+ <rule>코드 형식: {DOMAIN}_{3자리숫자}</rule>
240
+ <rule>HTTP 상태 코드 명시</rule>
241
+ <rule>사용자에게 보여줄 메시지와 내부 설명 분리</rule>
242
+ </rules>
243
+ </section>
244
+ </required-sections>
245
+
246
+ <code-format>
247
+ <pattern>{DOMAIN}_{NUMBER}</pattern>
248
+ <domain-examples>AUTH, USER, ORDER, PAYMENT</domain-examples>
249
+ <number-range>001-999</number-range>
250
+ </code-format>
251
+ </document>
252
+
253
+ <!-- Data Design -->
254
+ <document id="data-design" file="data-design.md" required-level="1">
255
+ <description>데이터 설계서</description>
256
+
257
+ <required-sections>
258
+ <section id="erd">
259
+ <name>ERD</name>
260
+ <description>Mermaid 또는 이미지로 ERD 표현</description>
261
+ <format>
262
+ <![CDATA[
263
+ ```mermaid
264
+ erDiagram
265
+ User ||--o{ Order : places
266
+ Order ||--|{ OrderItem : contains
267
+ ```
268
+ ]]>
269
+ </format>
270
+ </section>
271
+
272
+ <section id="tables">
273
+ <name>테이블 정의</name>
274
+ <format>
275
+ <![CDATA[
276
+ ### {테이블명}
277
+
278
+ | 컬럼 | 타입 | 제약조건 | 설명 |
279
+ |-----|------|---------|-----|
280
+ | id | UUID | PK | 고유 식별자 |
281
+ | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 생성일시 |
282
+ ]]>
283
+ </format>
284
+ <rules>
285
+ <rule>PK/FK 명시</rule>
286
+ <rule>NOT NULL, UNIQUE 등 제약조건 명시</rule>
287
+ <rule>인덱스 정의 포함</rule>
288
+ </rules>
289
+ </section>
290
+
291
+ <section id="indexes">
292
+ <name>인덱스 정의</name>
293
+ <format>
294
+ <![CDATA[
295
+ | 테이블 | 인덱스명 | 컬럼 | 타입 | 목적 |
296
+ |-------|---------|-----|------|-----|
297
+ | users | idx_users_email | email | UNIQUE | 이메일 조회 |
298
+ ]]>
299
+ </format>
300
+ </section>
301
+ </required-sections>
302
+ </document>
303
+
304
+ <!-- ADR -->
305
+ <document id="adr" file="adr/ADR-{번호}.md" required-level="2">
306
+ <description>아키텍처 결정 기록</description>
307
+
308
+ <file-naming>
309
+ <pattern>ADR-{3자리숫자}-{kebab-case-제목}.md</pattern>
310
+ <example>ADR-001-use-postgresql.md</example>
311
+ </file-naming>
312
+
313
+ <required-sections>
314
+ <section id="header">
315
+ <name>헤더</name>
316
+ <fields>
317
+ <field name="번호" required="true"/>
318
+ <field name="제목" required="true"/>
319
+ <field name="상태" required="true">Proposed | Accepted | Deprecated | Superseded</field>
320
+ <field name="날짜" required="true"/>
321
+ </fields>
322
+ </section>
323
+
324
+ <section id="context">
325
+ <name>Context (배경)</name>
326
+ <description>결정이 필요한 상황 설명</description>
327
+ </section>
328
+
329
+ <section id="decision">
330
+ <name>Decision (결정)</name>
331
+ <description>내린 결정 내용</description>
332
+ </section>
333
+
334
+ <section id="rationale">
335
+ <name>Rationale (근거)</name>
336
+ <description>결정의 이유</description>
337
+ </section>
338
+
339
+ <section id="alternatives">
340
+ <name>Alternatives (대안)</name>
341
+ <description>고려했던 다른 옵션들</description>
342
+ </section>
343
+
344
+ <section id="consequences">
345
+ <name>Consequences (결과)</name>
346
+ <fields>
347
+ <field name="긍정적" required="true"/>
348
+ <field name="부정적" required="true"/>
349
+ </fields>
350
+ </section>
351
+ </required-sections>
352
+ </document>
353
+
354
+ <!-- Security Spec (Level 3 / Fintech) -->
355
+ <document id="security-spec" file="security-spec.md" required-level="3">
356
+ <description>보안 명세서</description>
357
+ <required-for>level-3, fintech</required-for>
358
+
359
+ <required-sections>
360
+ <section id="auth">
361
+ <name>인증/인가</name>
362
+ <fields>
363
+ <field name="인증 방식" required="true"/>
364
+ <field name="세션 관리" required="true"/>
365
+ <field name="권한 모델" required="true"/>
366
+ </fields>
367
+ </section>
368
+
369
+ <section id="data-protection">
370
+ <name>데이터 보호</name>
371
+ <fields>
372
+ <field name="암호화 정책" required="true"/>
373
+ <field name="민감 데이터 분류" required="true"/>
374
+ </fields>
375
+ </section>
376
+
377
+ <section id="compliance">
378
+ <name>컴플라이언스</name>
379
+ <fields>
380
+ <field name="적용 규정" required="true"/>
381
+ <field name="준수 사항" required="true"/>
382
+ </fields>
383
+ </section>
384
+ </required-sections>
385
+ </document>
386
+ </documents>
387
+
388
+ <!-- ============================================================
389
+ 레벨별 필수 문서
390
+ ============================================================ -->
391
+ <level-requirements>
392
+ <level id="1" name="MVP">
393
+ <required>prd.md</required>
394
+ <required>requirements.md</required>
395
+ <required>service-spec.md</required>
396
+ <required>data-design.md</required>
397
+ </level>
398
+
399
+ <level id="2" name="Standard">
400
+ <includes>level-1</includes>
401
+ <required>error-codes.md</required>
402
+ <required>planning.md</required>
403
+ <required>adr/ (최소 1개)</required>
404
+ </level>
405
+
406
+ <level id="3" name="Enterprise">
407
+ <includes>level-2</includes>
408
+ <required>security-spec.md</required>
409
+ <required>test-spec.md</required>
410
+ <required>deployment-spec.md</required>
411
+ </level>
412
+ </level-requirements>
413
+
414
+ <!-- ============================================================
415
+ 타입별 추가 필수 문서
416
+ ============================================================ -->
417
+ <type-requirements>
418
+ <type id="web-service">
419
+ <required>ui-ux-spec.md</required>
420
+ </type>
421
+
422
+ <type id="fintech">
423
+ <required>security-spec.md</required>
424
+ <required>compliance-spec.md</required>
425
+ <required>audit-log-spec.md</required>
426
+ </type>
427
+
428
+ <type id="platform">
429
+ <required>integration-spec.md</required>
430
+ <required>glossary.md</required>
431
+ </type>
432
+ </type-requirements>
433
+ </ssot-schema>