moai-adk 0.8.1__py3-none-any.whl → 0.8.3__py3-none-any.whl

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.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (87) hide show
  1. moai_adk/cli/commands/update.py +15 -4
  2. moai_adk/core/config/migration.py +1 -1
  3. moai_adk/core/issue_creator.py +7 -3
  4. moai_adk/core/tags/__init__.py +86 -0
  5. moai_adk/core/tags/ci_validator.py +433 -0
  6. moai_adk/core/tags/cli.py +283 -0
  7. moai_adk/core/tags/generator.py +109 -0
  8. moai_adk/core/tags/inserter.py +99 -0
  9. moai_adk/core/tags/mapper.py +126 -0
  10. moai_adk/core/tags/parser.py +76 -0
  11. moai_adk/core/tags/pre_commit_validator.py +355 -0
  12. moai_adk/core/tags/reporter.py +957 -0
  13. moai_adk/core/tags/tags.py +149 -0
  14. moai_adk/core/tags/validator.py +897 -0
  15. moai_adk/templates/.claude/agents/alfred/cc-manager.md +25 -2
  16. moai_adk/templates/.claude/agents/alfred/debug-helper.md +24 -12
  17. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +19 -12
  18. moai_adk/templates/.claude/agents/alfred/git-manager.md +20 -12
  19. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +19 -12
  20. moai_adk/templates/.claude/agents/alfred/project-manager.md +29 -2
  21. moai_adk/templates/.claude/agents/alfred/quality-gate.md +25 -2
  22. moai_adk/templates/.claude/agents/alfred/skill-factory.md +30 -2
  23. moai_adk/templates/.claude/agents/alfred/spec-builder.md +26 -11
  24. moai_adk/templates/.claude/agents/alfred/tag-agent.md +30 -8
  25. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +27 -12
  26. moai_adk/templates/.claude/agents/alfred/trust-checker.md +25 -2
  27. moai_adk/templates/.claude/commands/alfred/0-project.md +5 -0
  28. moai_adk/templates/.claude/commands/alfred/1-plan.md +82 -19
  29. moai_adk/templates/.claude/commands/alfred/2-run.md +72 -15
  30. moai_adk/templates/.claude/commands/alfred/3-sync.md +74 -14
  31. moai_adk/templates/.claude/hooks/alfred/.moai/cache/version-check.json +9 -0
  32. moai_adk/templates/.claude/hooks/alfred/README.md +258 -145
  33. moai_adk/templates/.claude/hooks/alfred/TROUBLESHOOTING.md +471 -0
  34. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +92 -57
  35. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  36. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +102 -0
  37. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +102 -0
  38. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +108 -0
  39. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +102 -0
  40. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +102 -0
  41. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/project.py +286 -19
  42. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  43. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/session.py +21 -7
  44. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +102 -0
  45. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +102 -0
  46. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +120 -0
  47. moai_adk/templates/.claude/settings.json +5 -5
  48. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +9 -6
  49. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +56 -56
  50. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +101 -100
  51. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +3 -3
  52. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +219 -219
  53. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +287 -287
  54. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +9 -11
  55. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +9 -21
  56. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  57. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +182 -0
  58. moai_adk/templates/.github/workflows/release.yml +49 -0
  59. moai_adk/templates/.github/workflows/tag-report.yml +261 -0
  60. moai_adk/templates/.github/workflows/tag-validation.yml +176 -0
  61. moai_adk/templates/.moai/config.json +6 -1
  62. moai_adk/templates/.moai/hooks/install.sh +79 -0
  63. moai_adk/templates/.moai/hooks/pre-commit.sh +66 -0
  64. moai_adk/templates/CLAUDE.md +39 -40
  65. moai_adk/templates/src/moai_adk/core/__init__.py +5 -0
  66. moai_adk/templates/src/moai_adk/core/tags/__init__.py +86 -0
  67. moai_adk/templates/src/moai_adk/core/tags/ci_validator.py +433 -0
  68. moai_adk/templates/src/moai_adk/core/tags/cli.py +283 -0
  69. moai_adk/templates/src/moai_adk/core/tags/pre_commit_validator.py +355 -0
  70. moai_adk/templates/src/moai_adk/core/tags/reporter.py +957 -0
  71. moai_adk/templates/src/moai_adk/core/tags/validator.py +897 -0
  72. {moai_adk-0.8.1.dist-info → moai_adk-0.8.3.dist-info}/METADATA +240 -14
  73. {moai_adk-0.8.1.dist-info → moai_adk-0.8.3.dist-info}/RECORD +85 -50
  74. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  75. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  76. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/__init__.py +0 -0
  77. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +0 -0
  78. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +0 -0
  79. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/tags.py +0 -0
  80. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/__init__.py +0 -0
  81. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/notification.py +0 -0
  82. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/tool.py +0 -0
  83. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/user.py +0 -0
  84. /moai_adk/templates/.moai/memory/{issue-label-mapping.md → ISSUE-LABEL-MAPPING.md} +0 -0
  85. {moai_adk-0.8.1.dist-info → moai_adk-0.8.3.dist-info}/WHEEL +0 -0
  86. {moai_adk-0.8.1.dist-info → moai_adk-0.8.3.dist-info}/entry_points.txt +0 -0
  87. {moai_adk-0.8.1.dist-info → moai_adk-0.8.3.dist-info}/licenses/LICENSE +0 -0
@@ -1,177 +1,177 @@
1
1
  # SPEC Authoring Reference
2
2
 
3
- ## 메타데이터 완전 레퍼런스
3
+ ## Complete Metadata Field Reference
4
4
 
5
- ### 7개 필수 필드
5
+ ### Seven Required Fields
6
6
 
7
- #### 1. `id` – 고유 SPEC 식별자
7
+ #### 1. `id` – Unique SPEC Identifier
8
8
 
9
- **형식**: `<DOMAIN>-<NUMBER>`
9
+ **Format**: `<DOMAIN>-<NUMBER>`
10
10
 
11
- **규칙**:
12
- - 할당 불변
13
- - 대문자 도메인 사용 (예: `AUTH`, `PAYMENT`, `CONFIG`)
14
- - 자리 숫자 (001–999)
15
- - 중복 확인: `rg "@SPEC:AUTH-001" -n .moai/specs/`
11
+ **Rules**:
12
+ - Immutable after assignment
13
+ - Use uppercase domain names (e.g., `AUTH`, `PAYMENT`, `CONFIG`)
14
+ - Three-digit numbers (001–999)
15
+ - Check for duplicates: `rg "@SPEC:AUTH-001" -n .moai/specs/`
16
16
 
17
- **예시**:
18
- - `AUTH-001` (인증 기능)
19
- - `INSTALLER-SEC-001` (설치 프로그램 보안)
20
- - `TRUST-001` (TRUST 원칙)
21
- - `CONFIG-001` (설정 스키마)
17
+ **Examples**:
18
+ - `AUTH-001` (authentication)
19
+ - `INSTALLER-SEC-001` (installer security)
20
+ - `TRUST-001` (TRUST principles)
21
+ - `CONFIG-001` (configuration schema)
22
22
 
23
- **디렉토리 구조**:
23
+ **Directory Structure**:
24
24
  ```
25
25
  .moai/specs/SPEC-AUTH-001/
26
- ├── spec.md # 메인 SPEC 문서
27
- ├── diagrams/ # 선택: 아키텍처 다이어그램
28
- └── examples/ # 선택: 코드 예제
26
+ ├── spec.md # Main SPEC document
27
+ ├── diagrams/ # Optional: architecture diagrams
28
+ └── examples/ # Optional: code examples
29
29
  ```
30
30
 
31
- #### 2. `version` – 시맨틱 버전
31
+ #### 2. `version` – Semantic Versioning
32
32
 
33
- **형식**: `MAJOR.MINOR.PATCH`
33
+ **Format**: `MAJOR.MINOR.PATCH`
34
34
 
35
- **생애주기**:
35
+ **Lifecycle**:
36
36
 
37
37
  | Version | Status | Description | Trigger |
38
38
  |---------|--------|-------------|---------|
39
- | `0.0.1` | draft | 초안 | SPEC 생성 |
40
- | `0.0.x` | draft | 초안 개선 | 콘텐츠 편집 |
41
- | `0.1.0` | completed | 구현 완료 | TDD `/alfred:3-sync` |
42
- | `0.1.x` | completed | 버그 수정, 문서 업데이트 | 구현 패치 |
43
- | `0.x.0` | completed | 기능 추가 | 마이너 개선 |
44
- | `1.0.0` | completed | 프로덕션 안정 | 이해관계자 승인 |
45
-
46
- **버전 업데이트 예시**:
39
+ | `0.0.1` | draft | Initial draft | SPEC creation |
40
+ | `0.0.x` | draft | Draft improvements | Content editing |
41
+ | `0.1.0` | completed | Implementation complete | TDD finished + `/alfred:3-sync` |
42
+ | `0.1.x` | completed | Bug fixes, doc updates | Post-implementation patches |
43
+ | `0.x.0` | completed | Feature additions | Minor enhancements |
44
+ | `1.0.0` | completed | Production stable | Stakeholder approval |
45
+
46
+ **Version Update Example**:
47
47
  ```markdown
48
48
  ## HISTORY
49
49
 
50
50
  ### v0.2.0 (2025-11-15)
51
- - **ADDED**: 다중 인증 지원
52
- - **CHANGED**: 토큰 만료 시간 30분으로 연장
51
+ - **ADDED**: Multi-factor authentication support
52
+ - **CHANGED**: Token expiration extended from 15 to 30 minutes
53
53
  - **AUTHOR**: @YourHandle
54
54
 
55
55
  ### v0.1.0 (2025-10-30)
56
- - **COMPLETED**: TDD 구현 완료
56
+ - **COMPLETED**: TDD implementation finished
57
57
  - **EVIDENCE**: Commits 4c66076, 34e1bd9
58
58
  - **TEST COVERAGE**: 89.13%
59
59
 
60
60
  ### v0.0.2 (2025-10-25)
61
- - **REFINED**: 비밀번호 재설정 플로우 요구사항 추가
61
+ - **REFINED**: Added password reset flow requirements
62
62
  - **AUTHOR**: @YourHandle
63
63
 
64
64
  ### v0.0.1 (2025-10-23)
65
- - **INITIAL**: JWT 인증 SPEC 초안 생성
65
+ - **INITIAL**: JWT authentication SPEC draft created
66
66
  ```
67
67
 
68
- #### 3. `status` – 진행 상태
68
+ #### 3. `status` – Progress State
69
69
 
70
- **값**: `draft` | `active` | `completed` | `deprecated`
70
+ **Values**: `draft` | `active` | `completed` | `deprecated`
71
71
 
72
- **생애주기 흐름**:
72
+ **Lifecycle Flow**:
73
73
  ```
74
74
  draft → active → completed → [deprecated]
75
75
  ↓ ↓ ↓
76
76
  /alfred:1-plan /alfred:2-run /alfred:3-sync
77
77
  ```
78
78
 
79
- **전환**:
80
- - `draft`: 작성 (v0.0.x)
81
- - `active`: 구현 진행 (v0.0.x → v0.1.0)
82
- - `completed`: 구현 완료 (v0.1.0+)
83
- - `deprecated`: 폐기 예정
79
+ **Transitions**:
80
+ - `draft`: Authoring phase (v0.0.x)
81
+ - `active`: Implementation in progress (v0.0.x → v0.1.0)
82
+ - `completed`: Implementation finished (v0.1.0+)
83
+ - `deprecated`: Marked for removal
84
84
 
85
- #### 4. `created` – 생성일
85
+ #### 4. `created` – Creation Date
86
86
 
87
- **형식**: `YYYY-MM-DD`
87
+ **Format**: `YYYY-MM-DD`
88
88
 
89
- **규칙**:
90
- - 설정, 변경 없음
91
- - ISO 8601 날짜 형식
92
- - 초안 날짜
89
+ **Rules**:
90
+ - Set once, never changed
91
+ - ISO 8601 date format
92
+ - Initial draft date
93
93
 
94
- **예시**: `created: 2025-10-23`
94
+ **Example**: `created: 2025-10-29`
95
95
 
96
- #### 5. `updated` – 최종 수정일
96
+ #### 5. `updated` – Last Modified Date
97
97
 
98
- **형식**: `YYYY-MM-DD`
98
+ **Format**: `YYYY-MM-DD`
99
99
 
100
- **규칙**:
101
- - 모든 콘텐츠 변경 업데이트
102
- - 초기에는 `created`와 동일
103
- - 최신 편집 날짜 반영
100
+ **Rules**:
101
+ - Update on every content change
102
+ - Initially same as `created`
103
+ - Reflects latest edit date
104
104
 
105
- **업데이트 패턴**:
105
+ **Update Pattern**:
106
106
  ```yaml
107
- created: 2025-10-23 # 변경 없음
108
- updated: 2025-10-25 # 편집 변경
107
+ created: 2025-10-29 # Never change
108
+ updated: 2025-10-31 # Update on edit
109
109
  ```
110
110
 
111
- #### 6. `author` – 작성자
111
+ #### 6. `author` – Primary Author
112
112
 
113
- **형식**: `@{GitHubHandle}`
113
+ **Format**: `@{GitHubHandle}`
114
114
 
115
- **규칙**:
116
- - 단일 (배열 아님)
117
- - `@` 접두사 필수
118
- - 대소문자 구분 (예: `@Goos`, `@goos` 아님)
119
- - 추가 기여자는 HISTORY 섹션에 기록
115
+ **Rules**:
116
+ - Single value (not an array)
117
+ - @ prefix required
118
+ - Case-sensitive (e.g., `@Goos`, not `@goos`)
119
+ - Additional contributors documented in HISTORY section
120
120
 
121
- **예시**:
121
+ **Examples**:
122
122
  ```yaml
123
- # 올바름
123
+ # Correct
124
124
  author: @Goos
125
125
 
126
- # 잘못됨
127
- author: goos # @ 누락
128
- authors: [@Goos] # 배열 불가
129
- author: @goos # 대소문자 오류
126
+ # Incorrect
127
+ author: goos # Missing @
128
+ authors: [@Goos] # Array not allowed
129
+ author: @goos # Case mismatch
130
130
  ```
131
131
 
132
- #### 7. `priority` – 작업 우선순위
132
+ #### 7. `priority` – Task Priority
133
133
 
134
- **값**: `critical` | `high` | `medium` | `low`
134
+ **Values**: `critical` | `high` | `medium` | `low`
135
135
 
136
- **가이드라인**:
136
+ **Guidelines**:
137
137
 
138
138
  | Priority | Description | Examples |
139
139
  |----------|-------------|----------|
140
- | `critical` | 프로덕션 차단, 보안 취약점 | 보안 패치, 치명적 버그 |
141
- | `high` | 주요 기능, 핵심 기능 | 인증, 결제 시스템 |
142
- | `medium` | 개선, 향상 | UI 폴리시, 성능 최적화 |
143
- | `low` | 있으면 좋음, 문서화 | README 업데이트, 마이너 리팩토링 |
140
+ | `critical` | Production blocker, security vulnerability | Security patches, critical bugs |
141
+ | `high` | Major features, core functionality | Authentication, payment systems |
142
+ | `medium` | Improvements, enhancements | UI polish, performance optimization |
143
+ | `low` | Nice-to-have, documentation | README updates, minor refactoring |
144
144
 
145
145
  ---
146
146
 
147
- ### 9개 선택 필드
147
+ ### Nine Optional Fields
148
148
 
149
- #### 8. `category` – 변경 유형
149
+ #### 8. `category` – Change Type
150
150
 
151
- **값**: `feature` | `bugfix` | `refactor` | `security` | `docs` | `perf`
151
+ **Values**: `feature` | `bugfix` | `refactor` | `security` | `docs` | `perf`
152
152
 
153
- **용도**:
153
+ **Usage**:
154
154
  ```yaml
155
- category: feature # 기능
156
- category: bugfix # 결함 해결
157
- category: refactor # 코드 구조 개선
158
- category: security # 보안 강화
159
- category: docs # 문서 업데이트
160
- category: perf # 성능 최적화
155
+ category: feature # New capability
156
+ category: bugfix # Defect resolution
157
+ category: refactor # Code structure improvement
158
+ category: security # Security enhancement
159
+ category: docs # Documentation update
160
+ category: perf # Performance optimization
161
161
  ```
162
162
 
163
- #### 9. `labels` – 분류 태그
163
+ #### 9. `labels` – Classification Tags
164
164
 
165
- **형식**: 문자열 배열
165
+ **Format**: String array
166
166
 
167
- **목적**: 검색, 필터링, 그룹화
167
+ **Purpose**: Search, filtering, grouping
168
168
 
169
- **모범 사례**:
170
- - 소문자, kebab-case 사용
171
- - SPEC당 2-5 레이블
172
- - `category`와 중복 방지
169
+ **Best Practices**:
170
+ - Use lowercase, kebab-case
171
+ - 2-5 labels per SPEC
172
+ - Avoid duplication with `category`
173
173
 
174
- **예시**:
174
+ **Examples**:
175
175
  ```yaml
176
176
  labels:
177
177
  - authentication
@@ -189,59 +189,59 @@ labels:
189
189
  - cross-platform
190
190
  ```
191
191
 
192
- #### 10-13. 관계 필드 (의존성 그래프)
192
+ #### 10-13. Relationship Fields (Dependency Graph)
193
193
 
194
- ##### `depends_on` – 필수 SPEC
194
+ ##### `depends_on` – Required SPECs
195
195
 
196
- **의미**: 먼저 완료되어야 하는 SPEC
196
+ **Meaning**: SPECs that must complete first
197
197
 
198
- **예시**:
198
+ **Example**:
199
199
  ```yaml
200
200
  depends_on:
201
- - USER-001 # 사용자 모델 SPEC
202
- - TOKEN-001 # 토큰 생성 SPEC
201
+ - USER-001 # User model SPEC
202
+ - TOKEN-001 # Token generation SPEC
203
203
  ```
204
204
 
205
- **사용 사례**: 실행 순서, 병렬화 결정
205
+ **Use Case**: Execution order, parallelization decisions
206
206
 
207
- ##### `blocks` – 차단된 SPEC
207
+ ##### `blocks` – Blocked SPECs
208
208
 
209
- **의미**: SPEC이 해결될 때까지 진행할 수 없는 SPEC
209
+ **Meaning**: SPECs blocked until this SPEC completes
210
210
 
211
- **예시**:
211
+ **Example**:
212
212
  ```yaml
213
213
  blocks:
214
- - AUTH-002 # OAuth 통합은 기본 인증을 기다림
215
- - PAYMENT-001 # 결제는 인증 필요
214
+ - AUTH-002 # OAuth integration waits for base auth
215
+ - PAYMENT-001 # Payment requires authentication
216
216
  ```
217
217
 
218
- ##### `related_specs` – 관련 SPEC
218
+ ##### `related_specs` – Related SPECs
219
219
 
220
- **의미**: 직접 의존성 없는 관련 항목
220
+ **Meaning**: Related items without direct dependencies
221
221
 
222
- **예시**:
222
+ **Example**:
223
223
  ```yaml
224
224
  related_specs:
225
- - SESSION-001 # 세션 관리 (관련되지만 독립적)
226
- - AUDIT-001 # 감사 로깅 (횡단 관심사)
225
+ - SESSION-001 # Session management (related but independent)
226
+ - AUDIT-001 # Audit logging (cross-cutting concern)
227
227
  ```
228
228
 
229
- ##### `related_issue` – 연결된 GitHub 이슈
229
+ ##### `related_issue` – Linked GitHub Issue
230
230
 
231
- **형식**: 전체 GitHub 이슈 URL
231
+ **Format**: Full GitHub issue URL
232
232
 
233
- **예시**:
233
+ **Example**:
234
234
  ```yaml
235
235
  related_issue: "https://github.com/modu-ai/moai-adk/issues/42"
236
236
  ```
237
237
 
238
- #### 14-15. 범위 필드 (영향 분석)
238
+ #### 14-15. Scope Fields (Impact Analysis)
239
239
 
240
- ##### `scope.packages` – 영향받는 패키지
240
+ ##### `scope.packages` – Affected Packages
241
241
 
242
- **목적**: 어떤 패키지/모듈이 영향받는지 추적
242
+ **Purpose**: Track which packages/modules are affected
243
243
 
244
- **예시**:
244
+ **Example**:
245
245
  ```yaml
246
246
  scope:
247
247
  packages:
@@ -250,11 +250,11 @@ scope:
250
250
  - src/api/routes/auth
251
251
  ```
252
252
 
253
- ##### `scope.files` – 주요 파일
253
+ ##### `scope.files` – Key Files
254
254
 
255
- **목적**: 주요 구현 파일 참조
255
+ **Purpose**: Reference principal implementation files
256
256
 
257
- **예시**:
257
+ **Example**:
258
258
  ```yaml
259
259
  scope:
260
260
  files:
@@ -265,237 +265,237 @@ scope:
265
265
 
266
266
  ---
267
267
 
268
- ## EARS 요구사항 문법
268
+ ## EARS Requirement Syntax
269
269
 
270
- ### 5가지 EARS 패턴
270
+ ### Five EARS Patterns
271
271
 
272
- EARS (Easy Approach to Requirements Syntax) 친숙한 키워드를 사용하여 체계적이고 테스트 가능한 요구사항을 제공합니다.
272
+ EARS (Easy Approach to Requirements Syntax) uses familiar keywords to provide systematic, testable requirements.
273
273
 
274
- #### 패턴 1: Ubiquitous Requirements
274
+ #### Pattern 1: Ubiquitous Requirements
275
275
 
276
- **템플릿**: `시스템은 [능력]해야 한다.`
276
+ **Template**: `The system shall [capability].`
277
277
 
278
- **목적**: 항상 활성화된 기본 기능
278
+ **Purpose**: Always-active base functionality
279
279
 
280
- **특성**:
281
- - 전제 조건 없음
282
- - 항상 적용 가능
283
- - 핵심 기능 정의
280
+ **Characteristics**:
281
+ - No preconditions
282
+ - Always applicable
283
+ - Core functionality definition
284
284
 
285
- **예시**:
285
+ **Examples**:
286
286
  ```markdown
287
- **UR-001**: 시스템은 사용자 인증을 제공해야 한다.
287
+ **UR-001**: The system shall provide user authentication.
288
288
 
289
- **UR-002**: 시스템은 HTTPS 연결을 지원해야 한다.
289
+ **UR-002**: The system shall support HTTPS connections.
290
290
 
291
- **UR-003**: 시스템은 사용자 인증 정보를 안전하게 저장해야 한다.
291
+ **UR-003**: The system shall securely store user credentials.
292
292
 
293
- **UR-004**: 모바일 앱의 크기는 50 MB 미만이어야 한다.
293
+ **UR-004**: The mobile app size shall not exceed 50 MB.
294
294
 
295
- **UR-005**: API 응답 시간은 요청의 95%에 대해 200ms 초과하지 않아야 한다.
295
+ **UR-005**: API response time shall not exceed 200ms for 95% of requests.
296
296
  ```
297
297
 
298
- **모범 사례**:
299
- - ✅ 능동태 사용
300
- - ✅ 요구사항당 단일 책임
301
- - ✅ 측정 가능한 결과
302
- - ❌ 모호한 용어 피하기 ("사용자 친화적", "빠른")
298
+ **Best Practices**:
299
+ - ✅ Use active voice
300
+ - ✅ Single responsibility per requirement
301
+ - ✅ Measurable outcomes
302
+ - ❌ Avoid ambiguous terms ("user-friendly", "fast")
303
303
 
304
- #### 패턴 2: Event-driven Requirements
304
+ #### Pattern 2: Event-driven Requirements
305
305
 
306
- **템플릿**: `WHEN [트리거], 시스템은 [응답]해야 한다.`
306
+ **Template**: `WHEN [trigger], the system shall [response].`
307
307
 
308
- **목적**: 특정 이벤트에 의해 트리거되는 동작 정의
308
+ **Purpose**: Behavior triggered by specific events
309
309
 
310
- **특성**:
311
- - 개별 이벤트에 의해 트리거
312
- - 일회성 응답
313
- - 원인-결과 관계
310
+ **Characteristics**:
311
+ - Triggered by discrete events
312
+ - Single-shot responses
313
+ - Cause-effect relationships
314
314
 
315
- **예시**:
315
+ **Examples**:
316
316
  ```markdown
317
- **ER-001**: WHEN 사용자가 유효한 인증 정보를 제출하면, 시스템은 JWT 토큰을 발급해야 한다.
317
+ **ER-001**: WHEN the user submits valid credentials, the system shall issue a JWT token.
318
318
 
319
- **ER-002**: WHEN 토큰이 만료되면, 시스템은 HTTP 401 Unauthorized를 반환해야 한다.
319
+ **ER-002**: WHEN a token expires, the system shall return HTTP 401 Unauthorized.
320
320
 
321
- **ER-003**: WHEN 사용자가 "비밀번호 찾기" 클릭하면, 시스템은 비밀번호 재설정 이메일을 보내야 한다.
321
+ **ER-003**: WHEN the user clicks "Forgot Password", the system shall send a password reset email.
322
322
 
323
- **ER-004**: WHEN 데이터베이스 연결이 실패하면, 시스템은 지수 백오프로 3 재시도해야 한다.
323
+ **ER-004**: WHEN database connection fails, the system shall retry 3 times with exponential backoff.
324
324
 
325
- **ER-005**: WHEN 파일 업로드가 10 MB 초과하면, 시스템은 에러 메시지와 함께 업로드를 거부해야 한다.
325
+ **ER-005**: WHEN file upload exceeds 10 MB, the system shall reject the upload with an error message.
326
326
  ```
327
327
 
328
- **고급 패턴** (사후 조건 포함):
328
+ **Advanced Pattern** (with postconditions):
329
329
  ```markdown
330
- **ER-006**: WHEN 결제 거래가 완료되면, 시스템은 확인 이메일을 보낸 다음 주문 상태를 "paid"로 업데이트해야 한다.
330
+ **ER-006**: WHEN payment transaction completes, the system shall send confirmation email, then update order status to "paid".
331
331
  ```
332
332
 
333
- **모범 사례**:
334
- - ✅ 요구사항당 단일 트리거
335
- - ✅ 구체적이고 테스트 가능한 응답
336
- - ✅ 에러 조건 포함
337
- - ❌ 여러 WHEN 연결하지 않기
333
+ **Best Practices**:
334
+ - ✅ Single trigger per requirement
335
+ - ✅ Concrete, testable response
336
+ - ✅ Include error conditions
337
+ - ❌ Avoid chaining multiple WHEN clauses
338
338
 
339
- #### 패턴 3: State-driven Requirements
339
+ #### Pattern 3: State-driven Requirements
340
340
 
341
- **템플릿**: `WHILE [상태], 시스템은 [동작]해야 한다.`
341
+ **Template**: `WHILE [state], the system shall [behavior].`
342
342
 
343
- **목적**: 상태 지속적인 동작
343
+ **Purpose**: Persistent behavior during state
344
344
 
345
- **특성**:
346
- - 상태가 지속되는 동안 활성
347
- - 지속적인 모니터링
348
- - 상태 의존적 동작
345
+ **Characteristics**:
346
+ - Active while state persists
347
+ - Continuous monitoring
348
+ - State-dependent behavior
349
349
 
350
- **예시**:
350
+ **Examples**:
351
351
  ```markdown
352
- **SR-001**: WHILE 사용자가 인증된 상태이면, 시스템은 보호된 라우트에 대한 접근을 허용해야 한다.
352
+ **SR-001**: WHILE the user is in an authenticated state, the system shall permit access to protected routes.
353
353
 
354
- **SR-002**: WHILE 토큰이 유효하면, 시스템은 토큰 클레임에서 사용자 ID 추출해야 한다.
354
+ **SR-002**: WHILE a token is valid, the system shall extract user ID from token claims.
355
355
 
356
- **SR-003**: WHILE 시스템이 유지보수 모드이면, 시스템은 HTTP 503 Service Unavailable을 반환해야 한다.
356
+ **SR-003**: WHILE the system is in maintenance mode, the system shall return HTTP 503 Service Unavailable.
357
357
 
358
- **SR-004**: WHILE 배터리 잔량이 20% 미만이면, 모바일 앱은 백그라운드 동기화 빈도를 줄여야 한다.
358
+ **SR-004**: WHILE battery level is below 20%, the mobile app shall reduce background sync frequency.
359
359
 
360
- **SR-005**: WHILE 파일 업로드가 진행 중이면, UI 진행 표시줄을 표시해야 한다.
360
+ **SR-005**: WHILE file upload is in progress, the UI shall display a progress bar.
361
361
  ```
362
362
 
363
- **모범 사례**:
364
- - ✅ 상태 경계 명확히 정의
365
- - ✅ 상태 진입/종료 조건 명시
366
- - ✅ 상태 전환 테스트
367
- - ❌ 겹치는 상태 피하기
363
+ **Best Practices**:
364
+ - ✅ Clearly define state boundaries
365
+ - ✅ Specify state entry/exit conditions
366
+ - ✅ Test state transitions
367
+ - ❌ Avoid overlapping states
368
368
 
369
- #### 패턴 4: Optional Features
369
+ #### Pattern 4: Optional Features
370
370
 
371
- **템플릿**: `WHERE [기능], 시스템은 [동작]할 수 있다.`
371
+ **Template**: `WHERE [feature], the system can [behavior].`
372
372
 
373
- **목적**: 기능 플래그 기반 조건부 기능
373
+ **Purpose**: Feature-flag-based conditional functionality
374
374
 
375
- **특성**:
376
- - 기능이 존재하는 경우에만 적용
377
- - 구성 의존적
378
- - 제품 변형 지원
375
+ **Characteristics**:
376
+ - Only applies when feature exists
377
+ - Configuration-dependent
378
+ - Product variant support
379
379
 
380
- **예시**:
380
+ **Examples**:
381
381
  ```markdown
382
- **OF-001**: WHERE 다중 인증이 활성화된 경우, 시스템은 OTP 검증을 요구할 있다.
382
+ **OF-001**: WHERE multi-factor authentication is enabled, the system can require OTP verification after password confirmation.
383
383
 
384
- **OF-002**: WHERE 세션 로깅이 활성화된 경우, 시스템은 로그인 타임스탬프를 기록할 있다.
384
+ **OF-002**: WHERE session logging is enabled, the system can record login timestamp and IP address.
385
385
 
386
- **OF-003**: WHERE 프리미엄 구독이 활성화된 경우, 시스템은 무제한 API 호출을 허용할 있다.
386
+ **OF-003**: WHERE premium subscription is enabled, the system can permit unlimited API calls.
387
387
 
388
- **OF-004**: WHERE 다크 모드가 선택된 경우, UI 어두운 구성표로 렌더링할 있다.
388
+ **OF-004**: WHERE dark mode is selected, the UI can render in dark color scheme.
389
389
 
390
- **OF-005**: WHERE 분석 동의가 부여된 경우, 시스템은 사용자 동작을 추적할 있다.
390
+ **OF-005**: WHERE analytics consent is granted, the system can track user behavior.
391
391
  ```
392
392
 
393
- **모범 사례**:
394
- - ✅ "할 수 있다(can)" 사용 (허용), "해야 한다(shall)" 아님 (필수)
395
- - ✅ 기능 플래그 조건 명확히 정의
396
- - ✅ 기능 없을 기본 동작 명시
397
- - ❌ 핵심 기능을 선택 사항으로 만들지 않기
393
+ **Best Practices**:
394
+ - ✅ Use "can" (permissive) not "shall" (mandatory)
395
+ - ✅ Clearly define feature flag condition
396
+ - ✅ Specify default behavior without feature
397
+ - ❌ Don't make core functionality optional
398
398
 
399
- #### 패턴 5: Constraints
399
+ #### Pattern 5: Unwanted Behaviors
400
400
 
401
- **템플릿**: `IF [조건], THEN 시스템은 [제약]해야 한다.`
401
+ **Template**: `IF [condition], THEN the system shall [respond appropriately].`
402
402
 
403
- **목적**: 품질 속성 비즈니스 규칙 강제
403
+ **Purpose**: Error handling, quality gates, business rule enforcement
404
404
 
405
- **특성**:
406
- - 조건부 강제
407
- - 품질 게이트
408
- - 비즈니스 규칙 검증
405
+ **Characteristics**:
406
+ - Conditional enforcement
407
+ - Quality gates and constraints
408
+ - Business rule validation
409
409
 
410
- **예시**:
410
+ **Examples**:
411
411
  ```markdown
412
- **C-001**: IF 토큰이 만료되었다면, THEN 시스템은 접근을 거부하고 HTTP 401을 반환해야 한다.
412
+ **UB-001**: IF a token has expired, THEN the system shall deny access and return HTTP 401.
413
413
 
414
- **C-002**: IF 10분 이내에 5번 이상 로그인 실패가 발생하면, THEN 시스템은 임시로 계정을 잠가야 한다.
414
+ **UB-002**: IF 5 or more login failures occur within 10 minutes, THEN the system shall temporarily lock the account.
415
415
 
416
- **C-003**: 액세스 토큰은 15분 수명을 초과하지 않아야 한다.
416
+ **UB-003**: Response processing time shall not exceed 5 seconds.
417
417
 
418
- **C-004**: IF 비밀번호가 8 미만이면, THEN 시스템은 등록을 거부해야 한다.
418
+ **UB-004**: IF password length is less than 8 characters, THEN the system shall reject registration.
419
419
 
420
- **C-005**: IF API 속도 제한이 초과되면, THEN 시스템은 HTTP 429 Too Many Requests를 반환해야 한다.
420
+ **UB-005**: IF API rate limit is exceeded, THEN the system shall return HTTP 429 Too Many Requests.
421
421
  ```
422
422
 
423
- **단순화된 제약** (조건 없음):
423
+ **Simplified Constraints** (no condition):
424
424
  ```markdown
425
- **C-006**: 시스템은 평문 비밀번호를 저장하지 않아야 한다.
425
+ **UB-006**: The system shall never store passwords in plaintext.
426
426
 
427
- **C-007**: /health /login 제외한 모든 API 엔드포인트는 인증을 요구해야 한다.
427
+ **UB-007**: All API endpoints except /health and /login shall require authentication.
428
428
  ```
429
429
 
430
- **모범 사례**:
431
- - ✅ 엄격한 제약에는 SHALL, 부드러운 권장사항에는 SHOULD 사용
432
- - ✅ 제한 정량화 (시간, 크기, 횟수)
433
- - ✅ 강제 메커니즘 명시
434
- - ❌ 모호한 제약 피하기
430
+ **Best Practices**:
431
+ - ✅ Use SHALL for strict constraints, SHOULD for recommendations
432
+ - ✅ Quantify limits (time, size, count)
433
+ - ✅ Specify enforcement mechanism
434
+ - ❌ Avoid vague constraints
435
435
 
436
436
  ---
437
437
 
438
- ## EARS 패턴 선택 가이드
438
+ ## EARS Pattern Selection Guide
439
439
 
440
- | 패턴 | 키워드 | 사용 시기 | 예시 컨텍스트 |
440
+ | Pattern | Keyword | Use When | Context Example |
441
441
  |---------|---------|----------|-----------------|
442
- | **Ubiquitous** | shall | 핵심 기능, 항상 활성 | "시스템은 로그인을 제공해야 한다" |
443
- | **Event-driven** | WHEN | 개별 이벤트에 대한 응답 | "WHEN 로그인 실패 시, 에러 표시" |
444
- | **State-driven** | WHILE | 상태 지속적 동작 | "WHILE 로그인 상태, 접근 허용" |
445
- | **Optional** | WHERE | 기능 플래그 또는 구성 | "WHERE 프리미엄이면, 기능 해제" |
446
- | **Constraints** | IF-THEN | 품질 게이트, 비즈니스 규칙 | "IF 만료되었다면, 거부" |
442
+ | **Ubiquitous** | shall | Core feature, always active | "System shall provide login" |
443
+ | **Event-driven** | WHEN | Response to specific event | "WHEN login fails, show error" |
444
+ | **State-driven** | WHILE | Continuous during state | "WHILE logged in, allow access" |
445
+ | **Optional** | WHERE | Feature flag or config | "WHERE premium enabled, unlock" |
446
+ | **Unwanted Behaviors** | IF-THEN | Error handling, quality gates | "IF expired, deny and return 401" |
447
447
 
448
448
  ---
449
449
 
450
- ## HISTORY 섹션 형식
450
+ ## HISTORY Section Format
451
451
 
452
- HISTORY 섹션은 모든 SPEC 버전과 변경 사항을 문서화합니다.
452
+ The HISTORY section documents all SPEC versions and changes.
453
453
 
454
- ### 구조
454
+ ### Structure
455
455
 
456
456
  ```markdown
457
457
  ## HISTORY
458
458
 
459
459
  ### v{MAJOR}.{MINOR}.{PATCH} ({YYYY-MM-DD})
460
- - **{CHANGE_TYPE}**: {설명}
461
- - **AUTHOR**: {GitHub 핸들}
462
- - **{추가 컨텍스트}**: {세부사항}
460
+ - **{CHANGE_TYPE}**: {Description}
461
+ - **AUTHOR**: {GitHub handle}
462
+ - **{Additional context}**: {Details}
463
463
  ```
464
464
 
465
- ### 변경 유형
465
+ ### Change Types
466
466
 
467
467
  | Type | Description | Example |
468
468
  |------|-------------|---------|
469
- | **INITIAL** | 초안 | `v0.0.1: INITIAL 초안 생성` |
470
- | **REFINED** | 초안 콘텐츠 업데이트 | `v0.0.2: REFINED 검토 기반 요구사항` |
471
- | **COMPLETED** | 구현 완료 | `v0.1.0: COMPLETED TDD 구현` |
472
- | **ADDED** | 요구사항/기능 | `v0.2.0: ADDED 다중 인증` |
473
- | **CHANGED** | 수정된 요구사항 | `v0.2.0: CHANGED 토큰 만료 15분→30분` |
474
- | **FIXED** | 구현 버그 수정 | `v0.1.1: FIXED 토큰 갱신 로직` |
475
- | **DEPRECATED** | 폐기 예정 표시 | `v1.5.0: DEPRECATED 레거시 인증 엔드포인트` |
469
+ | **INITIAL** | First draft | `v0.0.1: INITIAL draft created` |
470
+ | **REFINED** | Content update during draft | `v0.0.2: REFINED requirements based on review` |
471
+ | **COMPLETED** | Implementation finished | `v0.1.0: COMPLETED TDD implementation` |
472
+ | **ADDED** | New requirements/features | `v0.2.0: ADDED multi-factor authentication` |
473
+ | **CHANGED** | Modified requirement | `v0.2.0: CHANGED token expiration 1530 minutes` |
474
+ | **FIXED** | Post-implementation bug fix | `v0.1.1: FIXED token refresh race condition` |
475
+ | **DEPRECATED** | Mark for removal | `v1.5.0: DEPRECATED legacy auth endpoint` |
476
476
 
477
- ### 완전한 HISTORY 예시
477
+ ### Complete HISTORY Example
478
478
 
479
479
  ```markdown
480
480
  ## HISTORY
481
481
 
482
482
  ### v0.2.0 (2025-11-15)
483
- - **ADDED**: OTP를 통한 다중 인증 지원
484
- - **CHANGED**: 사용자 피드백 기반으로 토큰 만료 30분으로 연장
483
+ - **ADDED**: Multi-factor authentication via OTP
484
+ - **CHANGED**: Token expiration extended to 30 minutes based on user feedback
485
485
  - **AUTHOR**: @Goos
486
486
  - **REVIEWER**: @SecurityTeam
487
- - **RATIONALE**: 보안 태세를 유지하면서 UX 개선
487
+ - **RATIONALE**: Maintain security posture while improving UX
488
488
 
489
489
  ### v0.1.1 (2025-11-01)
490
- - **FIXED**: 토큰 갱신 경쟁 조건
490
+ - **FIXED**: Token refresh race condition
491
491
  - **EVIDENCE**: Commit 3f9a2b7
492
492
  - **AUTHOR**: @Goos
493
493
 
494
494
  ### v0.1.0 (2025-10-30)
495
- - **COMPLETED**: TDD 구현 완료
495
+ - **COMPLETED**: TDD implementation finished
496
496
  - **AUTHOR**: @Goos
497
497
  - **EVIDENCE**: Commits 4c66076, 34e1bd9, 1dec08f
498
- - **TEST COVERAGE**: 89.13% (목표: 85%)
498
+ - **TEST COVERAGE**: 89.13% (target: 85%)
499
499
  - **QUALITY METRICS**:
500
500
  - Test Pass Rate: 100% (42/42 tests)
501
501
  - Linting: ruff ✅
@@ -506,39 +506,39 @@ HISTORY 섹션은 모든 SPEC 버전과 변경 사항을 문서화합니다.
506
506
  - @CODE:AUTH-001: 12 occurrences
507
507
 
508
508
  ### v0.0.2 (2025-10-25)
509
- - **REFINED**: 비밀번호 재설정 플로우 요구사항 추가
510
- - **REFINED**: 토큰 수명 제약 명확화
509
+ - **REFINED**: Added password reset flow requirements
510
+ - **REFINED**: Clarified token lifetime constraints
511
511
  - **AUTHOR**: @Goos
512
512
 
513
513
  ### v0.0.1 (2025-10-23)
514
- - **INITIAL**: JWT 인증 SPEC 초안 생성
514
+ - **INITIAL**: JWT authentication SPEC draft created
515
515
  - **AUTHOR**: @Goos
516
- - **SCOPE**: 사용자 인증, 토큰 생성, 토큰 검증
517
- - **CONTEXT**: 2025 4분기 제품 로드맵 요구사항
516
+ - **SCOPE**: User authentication, token generation, token validation
517
+ - **CONTEXT**: Q4 2025 product roadmap requirements
518
518
  ```
519
519
 
520
520
  ---
521
521
 
522
- ## TAG 통합
522
+ ## TAG Integration
523
523
 
524
- ### TAG 블록 형식
524
+ ### TAG Block Format
525
525
 
526
- 모든 SPEC 문서는 타이틀 다음에 TAG 블록으로 시작합니다:
526
+ All SPEC documents start with a TAG block after the title:
527
527
 
528
528
  ```markdown
529
529
  # @SPEC:AUTH-001: JWT Authentication System
530
530
  ```
531
531
 
532
- ### TAG 체인 참조
532
+ ### TAG Chain Reference
533
533
 
534
- SPEC에서 관련 TAG 연결:
534
+ Link related TAGs in SPEC:
535
535
 
536
536
  ```markdown
537
537
  ## Traceability (@TAG Chain)
538
538
 
539
- ### TAG 체인 구조
539
+ ### TAG Chain Structure
540
540
  ```
541
- @SPEC:AUTH-001 ( 문서)
541
+ @SPEC:AUTH-001 (this document)
542
542
 
543
543
  @TEST:AUTH-001 (tests/auth/service.test.ts)
544
544
 
@@ -547,70 +547,70 @@ SPEC에서 관련 TAG 연결:
547
547
  @DOC:AUTH-001 (docs/api/authentication.md)
548
548
  ```
549
549
 
550
- ### 검증 명령어
550
+ ### Validation Commands
551
551
  ```bash
552
- # SPEC TAG 검증
552
+ # Validate SPEC TAG
553
553
  rg '@SPEC:AUTH-001' -n .moai/specs/
554
554
 
555
- # 중복 ID 확인
555
+ # Check for duplicate IDs
556
556
  rg '@SPEC:AUTH' -n .moai/specs/
557
557
  rg 'AUTH-001' -n
558
558
 
559
- # 전체 TAG 체인 스캔
559
+ # Scan full TAG chain
560
560
  rg '@(SPEC|TEST|CODE|DOC):AUTH-001' -n
561
561
  ```
562
562
  ```
563
563
 
564
564
  ---
565
565
 
566
- ## 검증 명령어
566
+ ## Validation Commands
567
567
 
568
- ### 빠른 검증 스크립트
568
+ ### Quick Validation Script
569
569
 
570
570
  ```bash
571
571
  #!/usr/bin/env bash
572
- # validate-spec.sh - SPEC 검증 헬퍼
572
+ # validate-spec.sh - SPEC validation helper
573
573
 
574
574
  SPEC_DIR="$1"
575
575
 
576
- echo "SPEC 검증 중: $SPEC_DIR"
576
+ echo "Validating SPEC: $SPEC_DIR"
577
577
 
578
- # 필수 필드 확인
579
- echo -n "필수 필드... "
578
+ # Check required fields
579
+ echo -n "Required fields... "
580
580
  rg "^(id|version|status|created|updated|author|priority):" "$SPEC_DIR/spec.md" | wc -l | grep -q "7" && echo "✅" || echo "❌"
581
581
 
582
- # 작성자 형식 확인
583
- echo -n "작성자 형식... "
582
+ # Check author format
583
+ echo -n "Author format... "
584
584
  rg "^author: @[A-Z]" "$SPEC_DIR/spec.md" > /dev/null && echo "✅" || echo "❌"
585
585
 
586
- # 버전 형식 확인
587
- echo -n "버전 형식... "
586
+ # Check version format
587
+ echo -n "Version format... "
588
588
  rg "^version: 0\.\d+\.\d+" "$SPEC_DIR/spec.md" > /dev/null && echo "✅" || echo "❌"
589
589
 
590
- # HISTORY 섹션 확인
591
- echo -n "HISTORY 섹션... "
590
+ # Check HISTORY section
591
+ echo -n "HISTORY section... "
592
592
  rg "^## HISTORY" "$SPEC_DIR/spec.md" > /dev/null && echo "✅" || echo "❌"
593
593
 
594
- # TAG 블록 확인
595
- echo -n "TAG 블록... "
594
+ # Check TAG block
595
+ echo -n "TAG block... "
596
596
  rg "^# @SPEC:" "$SPEC_DIR/spec.md" > /dev/null && echo "✅" || echo "❌"
597
597
 
598
- # 중복 ID 확인
598
+ # Check for duplicate IDs
599
599
  SPEC_ID=$(basename "$SPEC_DIR" | sed 's/SPEC-//')
600
600
  DUPLICATE_COUNT=$(rg "@SPEC:$SPEC_ID" -n .moai/specs/ | wc -l)
601
- echo -n "중복 ID 확인... "
601
+ echo -n "Duplicate ID check... "
602
602
  [ "$DUPLICATE_COUNT" -eq 1 ] && echo "✅" || echo "❌ (found $DUPLICATE_COUNT occurrences)"
603
603
 
604
- echo "검증 완료!"
604
+ echo "Validation complete!"
605
605
  ```
606
606
 
607
- ### 사용법
607
+ ### Usage
608
608
 
609
609
  ```bash
610
- # 단일 SPEC 검증
610
+ # Validate single SPEC
611
611
  ./validate-spec.sh .moai/specs/SPEC-AUTH-001
612
612
 
613
- # 모든 SPEC 검증
613
+ # Validate all SPECs
614
614
  for spec in .moai/specs/SPEC-*/; do
615
615
  ./validate-spec.sh "$spec"
616
616
  done
@@ -618,5 +618,5 @@ done
618
618
 
619
619
  ---
620
620
 
621
- **Last Updated**: 2025-10-27
622
- **Version**: 1.1.0
621
+ **Last Updated**: 2025-10-29
622
+ **Version**: 1.2.0