moai-adk 0.3.0__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/__init__.py +8 -0
  2. moai_adk/__main__.py +86 -0
  3. moai_adk/cli/__init__.py +2 -0
  4. moai_adk/cli/commands/__init__.py +16 -0
  5. moai_adk/cli/commands/backup.py +56 -0
  6. moai_adk/cli/commands/doctor.py +184 -0
  7. moai_adk/cli/commands/init.py +284 -0
  8. moai_adk/cli/commands/restore.py +77 -0
  9. moai_adk/cli/commands/status.py +79 -0
  10. moai_adk/cli/commands/update.py +133 -0
  11. moai_adk/cli/main.py +12 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +159 -0
  14. moai_adk/core/__init__.py +2 -0
  15. moai_adk/core/git/__init__.py +24 -0
  16. moai_adk/core/git/branch.py +26 -0
  17. moai_adk/core/git/branch_manager.py +137 -0
  18. moai_adk/core/git/checkpoint.py +140 -0
  19. moai_adk/core/git/commit.py +68 -0
  20. moai_adk/core/git/event_detector.py +81 -0
  21. moai_adk/core/git/manager.py +127 -0
  22. moai_adk/core/project/__init__.py +2 -0
  23. moai_adk/core/project/backup_utils.py +84 -0
  24. moai_adk/core/project/checker.py +302 -0
  25. moai_adk/core/project/detector.py +105 -0
  26. moai_adk/core/project/initializer.py +174 -0
  27. moai_adk/core/project/phase_executor.py +297 -0
  28. moai_adk/core/project/validator.py +118 -0
  29. moai_adk/core/quality/__init__.py +6 -0
  30. moai_adk/core/quality/trust_checker.py +441 -0
  31. moai_adk/core/quality/validators/__init__.py +6 -0
  32. moai_adk/core/quality/validators/base_validator.py +19 -0
  33. moai_adk/core/template/__init__.py +8 -0
  34. moai_adk/core/template/backup.py +95 -0
  35. moai_adk/core/template/config.py +95 -0
  36. moai_adk/core/template/languages.py +44 -0
  37. moai_adk/core/template/merger.py +117 -0
  38. moai_adk/core/template/processor.py +310 -0
  39. moai_adk/templates/.claude/agents/alfred/cc-manager.md +474 -0
  40. moai_adk/templates/.claude/agents/alfred/code-builder.md +534 -0
  41. moai_adk/templates/.claude/agents/alfred/debug-helper.md +302 -0
  42. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +175 -0
  43. moai_adk/templates/.claude/agents/alfred/git-manager.md +200 -0
  44. moai_adk/templates/.claude/agents/alfred/project-manager.md +152 -0
  45. moai_adk/templates/.claude/agents/alfred/spec-builder.md +256 -0
  46. moai_adk/templates/.claude/agents/alfred/tag-agent.md +247 -0
  47. moai_adk/templates/.claude/agents/alfred/trust-checker.md +332 -0
  48. moai_adk/templates/.claude/commands/alfred/0-project.md +523 -0
  49. moai_adk/templates/.claude/commands/alfred/1-spec.md +531 -0
  50. moai_adk/templates/.claude/commands/alfred/2-build.md +413 -0
  51. moai_adk/templates/.claude/commands/alfred/3-sync.md +552 -0
  52. moai_adk/templates/.claude/hooks/alfred/README.md +238 -0
  53. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +165 -0
  54. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +79 -0
  55. moai_adk/templates/.claude/hooks/alfred/core/checkpoint.py +271 -0
  56. moai_adk/templates/.claude/hooks/alfred/core/context.py +110 -0
  57. moai_adk/templates/.claude/hooks/alfred/core/project.py +284 -0
  58. moai_adk/templates/.claude/hooks/alfred/core/tags.py +244 -0
  59. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +23 -0
  60. moai_adk/templates/.claude/hooks/alfred/handlers/compact.py +51 -0
  61. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +25 -0
  62. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +80 -0
  63. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +71 -0
  64. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +41 -0
  65. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +635 -0
  66. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +691 -0
  67. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +469 -0
  68. moai_adk/templates/.claude/settings.json +135 -0
  69. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +68 -0
  70. moai_adk/templates/.github/workflows/moai-gitflow.yml +255 -0
  71. moai_adk/templates/.gitignore +41 -0
  72. moai_adk/templates/.moai/config.json +89 -0
  73. moai_adk/templates/.moai/memory/development-guide.md +367 -0
  74. moai_adk/templates/.moai/memory/spec-metadata.md +277 -0
  75. moai_adk/templates/.moai/project/product.md +121 -0
  76. moai_adk/templates/.moai/project/structure.md +150 -0
  77. moai_adk/templates/.moai/project/tech.md +221 -0
  78. moai_adk/templates/CLAUDE.md +733 -0
  79. moai_adk/templates/__init__.py +2 -0
  80. moai_adk/utils/__init__.py +8 -0
  81. moai_adk/utils/banner.py +42 -0
  82. moai_adk/utils/logger.py +152 -0
  83. moai_adk-0.3.0.dist-info/METADATA +20 -0
  84. moai_adk-0.3.0.dist-info/RECORD +87 -0
  85. moai_adk-0.3.0.dist-info/WHEEL +4 -0
  86. moai_adk-0.3.0.dist-info/entry_points.txt +2 -0
  87. moai_adk-0.3.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,367 @@
1
+ # {{PROJECT_NAME}} 개발 가이드
2
+
3
+ > "명세 없으면 코드 없다. 테스트 없으면 구현 없다."
4
+
5
+ MoAI-ADK 범용 개발 툴킷을 사용하는 모든 에이전트와 개발자를 위한 통합 가드레일이다. Python 기반으로 구축된 툴킷은 모든 주요 프로그래밍 언어를 지원하며, @TAG 추적성을 통한 SPEC 우선 TDD 방법론을 따른다. 한국어가 기본 소통 언어다.
6
+
7
+ ---
8
+
9
+ ## SPEC 우선 TDD 워크플로우
10
+
11
+ ### 핵심 개발 루프 (3단계)
12
+
13
+ 1. **SPEC 작성** (`/alfred:1-spec`) → 명세 없이는 코드 없음
14
+ 2. **TDD 구현** (`/alfred:2-build`) → 테스트 없이는 구현 없음
15
+ 3. **문서 동기화** (`/alfred:3-sync`) → 추적성 없이는 완성 없음
16
+
17
+ ### 온디맨드 지원
18
+
19
+ - **디버깅**: `@agent-debug-helper` 오류 발생 시 호출
20
+ - **CLI 명령어**: init, doctor, status, update, restore, help, version
21
+ - **시스템 진단**: 언어별 도구 자동 감지 및 요구사항 검증
22
+
23
+ 모든 변경사항은 @TAG 시스템, SPEC 기반 요구사항, 언어별 TDD 관행을 따른다.
24
+
25
+ ### EARS 요구사항 작성법
26
+
27
+ **EARS (Easy Approach to Requirements Syntax)**: 체계적인 요구사항 작성 방법론
28
+
29
+ #### EARS 5가지 구문
30
+ 1. **기본 요구사항 (Ubiquitous)**: 시스템은 [기능]을 제공해야 한다
31
+ 2. **이벤트 기반 (Event-driven)**: WHEN [조건]이면, 시스템은 [동작]해야 한다
32
+ 3. **상태 기반 (State-driven)**: WHILE [상태]일 때, 시스템은 [동작]해야 한다
33
+ 4. **선택적 기능 (Optional)**: WHERE [조건]이면, 시스템은 [동작]할 수 있다
34
+ 5. **제약사항 (Constraints)**: IF [조건]이면, 시스템은 [제약]해야 한다
35
+
36
+ #### 실제 작성 예시
37
+ ```markdown
38
+ ### Ubiquitous Requirements (기본 요구사항)
39
+ - 시스템은 사용자 인증 기능을 제공해야 한다
40
+
41
+ ### Event-driven Requirements (이벤트 기반)
42
+ - WHEN 사용자가 유효한 자격증명으로 로그인하면, 시스템은 JWT 토큰을 발급해야 한다
43
+ - WHEN 토큰이 만료되면, 시스템은 401 에러를 반환해야 한다
44
+
45
+ ### State-driven Requirements (상태 기반)
46
+ - WHILE 사용자가 인증된 상태일 때, 시스템은 보호된 리소스 접근을 허용해야 한다
47
+
48
+ ### Optional Features (선택적 기능)
49
+ - WHERE 리프레시 토큰이 제공되면, 시스템은 새로운 액세스 토큰을 발급할 수 있다
50
+
51
+ ### Constraints (제약사항)
52
+ - IF 잘못된 토큰이 제공되면, 시스템은 접근을 거부해야 한다
53
+ - 액세스 토큰 만료시간은 15분을 초과하지 않아야 한다
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Context Engineering (컨텍스트 엔지니어링)
59
+
60
+ MoAI-ADK는 Anthropic의 "Effective Context Engineering for AI Agents" 원칙을 기반으로 효율적인 컨텍스트 관리를 구현합니다.
61
+
62
+ ### 1. JIT (Just-in-Time) Retrieval
63
+
64
+ **원칙**: 필요한 순간에만 문서를 로드하여 초기 컨텍스트 부담을 최소화
65
+
66
+ **Alfred의 JIT 전략**:
67
+
68
+ | 커맨드 | 필수 로드 | 선택적 로드 | 로드 타이밍 |
69
+ |--------|----------|------------|------------|
70
+ | `/alfred:1-spec` | product.md | structure.md, tech.md | SPEC 후보 발굴 시 |
71
+ | `/alfred:2-build` | SPEC-XXX/spec.md | development-guide.md | TDD 구현 시작 시 |
72
+ | `/alfred:3-sync` | sync-report.md | TAG 인덱스 | 문서 동기화 시 |
73
+
74
+ **구현 방법**:
75
+ - Alfred는 커맨드 실행 시점에 필요한 문서만 `Read` 도구로 로드
76
+ - 에이전트는 자신의 작업에 필요한 문서만 요청
77
+ - CLAUDE.md의 "메모리 전략" 섹션에 명시된 5개 문서는 항상 로드
78
+
79
+ ### 2. Compaction (압축)
80
+
81
+ **원칙**: 긴 세션(>70% 토큰 사용)은 요약 후 새 세션으로 재시작
82
+
83
+ **Compaction 트리거**:
84
+ - 토큰 사용량 > 140,000 (총 200,000의 70%)
85
+ - 대화 턴 수 > 50회
86
+ - 사용자가 명시적으로 `/clear` 또는 `/new` 실행
87
+
88
+ **Compaction 절차**:
89
+ 1. **요약 생성**: 현재 세션의 핵심 결정사항, 완료된 작업, 다음 단계를 요약
90
+ 2. **새 세션 시작**: 요약 내용을 새 세션의 첫 메시지로 전달
91
+ 3. **권장 사항 안내**: 사용자에게 `/clear` 또는 `/new` 명령 사용 권장
92
+
93
+ **예시**:
94
+ ```markdown
95
+ **권장사항**: 다음 단계 진행 전 `/clear` 또는 `/new` 명령으로 새로운 대화 세션을 시작하면 더 나은 성능과 컨텍스트 관리를 경험할 수 있습니다.
96
+ ```
97
+
98
+ ### Context Engineering 체크리스트
99
+
100
+ **커맨드 설계 시**:
101
+ - [ ] JIT: 필요한 문서만 로드하는가?
102
+ - [ ] 선택적 로드: 조건부로 문서를 로드하는가?
103
+ - [ ] Compaction: 긴 작업 시 중간 요약을 제공하는가?
104
+
105
+ **에이전트 설계 시**:
106
+ - [ ] 최소 도구: 필요한 도구만 YAML frontmatter에 선언했는가?
107
+ - [ ] 명확한 역할: 단일 책임 원칙을 준수하는가?
108
+
109
+ **장기 세션 관리**:
110
+ - [ ] 토큰 사용량 모니터링
111
+ - [ ] 70% 초과 시 Compaction 권장
112
+ - [ ] `/clear` 또는 `/new` 안내 문구 포함
113
+
114
+ ---
115
+
116
+ ## TRUST 5원칙
117
+
118
+ ### T - 테스트 주도 개발 (SPEC 기반)
119
+
120
+ **SPEC → Test → Code 사이클**:
121
+
122
+ - **SPEC**: `@SPEC:ID` 태그가 포함된 상세 SPEC 우선 작성 (EARS 방식)
123
+ - **RED**: `@TEST:ID` - SPEC 요구사항 기반 실패하는 테스트 작성 및 실패 확인
124
+ - **GREEN**: `@CODE:ID` - 테스트를 통과하고 SPEC을 충족하는 최소한의 코드 구현
125
+ - **REFACTOR**: `@CODE:ID` - SPEC 준수를 유지하면서 코드 품질 개선, `@DOC:ID` 문서화
126
+
127
+ **언어별 TDD 구현**:
128
+
129
+ - **Python**: pytest + SPEC 기반 테스트 케이스 (mypy 타입 힌트)
130
+ - **TypeScript**: Vitest + SPEC 기반 테스트 스위트 (strict typing)
131
+ - **Java**: JUnit + SPEC 어노테이션 (행동 주도 테스트)
132
+ - **Go**: go test + SPEC 테이블 주도 테스트 (인터페이스 준수)
133
+ - **Rust**: cargo test + SPEC 문서 테스트 (trait 검증)
134
+
135
+ 각 테스트는 @TEST:ID → @CODE:ID 참조를 통해 특정 SPEC 요구사항과 연결한다.
136
+
137
+ ### R - 요구사항 주도 가독성
138
+
139
+ **SPEC 정렬 클린 코드**:
140
+
141
+ - 함수는 SPEC 요구사항을 직접 구현 (함수당 ≤ 50 LOC)
142
+ - 변수명은 SPEC 용어와 도메인 언어를 반영
143
+ - 코드 구조는 SPEC 설계 결정을 반영
144
+ - 주석은 SPEC 설명과 @TAG 참조만 허용
145
+
146
+ **언어별 SPEC 구현**:
147
+
148
+ - **Python**: SPEC 인터페이스를 반영하는 타입 힌트 + mypy 검증
149
+ - **TypeScript**: SPEC 계약과 일치하는 엄격한 인터페이스
150
+ - **Java**: SPEC 구성요소 구현 클래스 + 강한 타이핑
151
+ - **Go**: SPEC 요구사항 충족 인터페이스 + gofmt
152
+ - **Rust**: SPEC 안전 요구사항을 구현하는 타입 + rustfmt
153
+
154
+ 모든 코드 요소는 @TAG 주석을 통해 SPEC까지 추적 가능하다.
155
+
156
+ ### U - 통합 SPEC 아키텍처
157
+
158
+ - **SPEC 기반 복잡도 관리**: 각 SPEC은 복잡도 임계값을 정의한다. 초과 시 새로운 SPEC 또는 명확한 근거가 있는 면제가 필요하다.
159
+ - **SPEC 구현 단계**: SPEC 작성과 구현을 분리하며, TDD 사이클 중 SPEC을 수정하지 않는다.
160
+ - **언어 간 SPEC 준수**: Python(모듈), TypeScript(인터페이스), Java(패키지), Go(패키지), Rust(크레이트) 등 언어별 경계를 SPEC이 정의한다.
161
+ - **SPEC 기반 아키텍처**: 도메인 경계는 언어 관례가 아닌 SPEC에 의해 정의되며, @TAG 시스템으로 언어 간 추적성을 유지한다.
162
+
163
+ ### S - SPEC 준수 보안
164
+
165
+ - **SPEC 보안 요구사항**: 모든 SPEC에 보안 요구사항, 데이터 민감도, 접근 제어를 명시적으로 정의한다.
166
+ - **보안 by 설계**: 보안 제어는 완료 후 추가하는 것이 아니라 TDD 단계에서 구현한다.
167
+ - **언어 무관 보안 패턴**:
168
+ - SPEC 인터페이스 정의 기반 입력 검증
169
+ - SPEC 정의 중요 작업에 대한 감사 로깅
170
+ - SPEC 권한 모델을 따르는 접근 제어
171
+ - SPEC 환경 요구사항별 비밀 관리
172
+
173
+ ### T - SPEC 추적성
174
+
175
+ - **SPEC-코드 추적성**: 모든 코드 변경은 @TAG 시스템을 통해 SPEC ID와 특정 요구사항을 참조한다.
176
+ - **3단계 워크플로우 추적**:
177
+ - `/alfred:1-spec`: `@SPEC:ID` 태그로 SPEC 작성 (.moai/specs/)
178
+ - `/alfred:2-build`: `@TEST:ID` (tests/) → `@CODE:ID` (src/) TDD 구현
179
+ - `/alfred:3-sync`: `@DOC:ID` (docs/) 문서 동기화, 전체 TAG 검증
180
+ - **코드 스캔 기반 추적성**: 중간 캐시 없이 `rg '@(SPEC|TEST|CODE|DOC):' -n`으로 코드를 직접 스캔하여 TAG 추적성 보장한다.
181
+
182
+ ---
183
+
184
+ ## SPEC 우선 사고방식
185
+
186
+ 1. **SPEC 기반 의사결정**: 모든 기술적 결정은 기존 SPEC을 참조하거나 새로운 SPEC을 만든다. 명확한 요구사항 없이는 구현하지 않는다.
187
+ 2. **SPEC 맥락 읽기**: 코드 변경 전에 관련 SPEC 문서를 읽고, @TAG 관계를 파악하고, 준수를 검증한다.
188
+ 3. **SPEC 소통**: 한국어가 기본 소통 언어다. 모든 SPEC 문서는 기술 용어는 영어로, 설명은 명확한 한국어로 작성한다.
189
+
190
+ ## SPEC-TDD 워크플로우
191
+
192
+ 1. **SPEC 우선**: 코드 작성 전에 SPEC을 생성하거나 참조한다. `/alfred:1-spec`을 사용하여 요구사항, 설계, 작업을 명확히 정의한다.
193
+ 2. **TDD 구현**: Red-Green-Refactor를 엄격히 따른다. 언어별 적절한 테스트 프레임워크와 함께 `/alfred:2-build`를 사용한다.
194
+ 3. **추적성 동기화**: `/alfred:3-sync`를 실행하여 문서를 업데이트하고 SPEC과 코드 간 @TAG 관계를 유지한다.
195
+
196
+ ## @TAG 시스템
197
+
198
+ ### 핵심 체계
199
+
200
+ ```text
201
+ @SPEC:ID → @TEST:ID → @CODE:ID → @DOC:ID
202
+ ```
203
+
204
+ **TDD 완벽 정렬**:
205
+ - `@SPEC:ID` (사전 준비) - EARS 방식 요구사항 명세
206
+ - `@TEST:ID` (RED) - 실패하는 테스트 작성
207
+ - `@CODE:ID` (GREEN + REFACTOR) - 구현 및 리팩토링
208
+ - `@DOC:ID` (문서화) - Living Document 생성
209
+
210
+ ### TAG BLOCK 템플릿
211
+
212
+ > **📋 SPEC 메타데이터 표준 (SSOT)**: `spec-metadata.md`
213
+
214
+ **모든 SPEC 문서는 YAML Front Matter + HISTORY 섹션을 포함**해야 합니다:
215
+ - **필수 필드 7개**: id, version, status, created, updated, author, priority
216
+ - **선택 필드 9개**: category, labels, depends_on, blocks, related_specs, related_issue, scope
217
+ - **HISTORY 섹션**: 모든 버전 변경 이력 기록 (필수)
218
+
219
+ **전체 템플릿, 필드 상세 설명, 검증 방법**: `spec-metadata.md` 참조
220
+
221
+ **간단한 참조 예시**:
222
+ ```yaml
223
+ ---
224
+ id: AUTH-001
225
+ version: 0.0.1
226
+ status: draft
227
+ created: 2025-09-15
228
+ updated: 2025-09-15
229
+ author: @Goos
230
+ priority: high
231
+ ---
232
+
233
+ # @SPEC:AUTH-001: JWT 인증 시스템
234
+
235
+ ## HISTORY
236
+ ### v0.0.1 (2025-09-15)
237
+ - **INITIAL**: JWT 기반 인증 시스템 명세 작성
238
+ ...
239
+ ```
240
+
241
+ **소스 코드 (src/)**:
242
+ ```text
243
+ # @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/auth/service.test.ts
244
+ ```
245
+
246
+ **테스트 코드 (tests/)**:
247
+ ```text
248
+ # @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
249
+ ```
250
+
251
+ ### @CODE 서브 카테고리 (주석 레벨)
252
+
253
+ 구현 세부사항은 `@CODE:ID` 내부에 주석으로 표기:
254
+ - `@CODE:ID:API` - REST API, GraphQL 엔드포인트
255
+ - `@CODE:ID:UI` - 컴포넌트, 뷰, 화면
256
+ - `@CODE:ID:DATA` - 데이터 모델, 스키마, 타입
257
+ - `@CODE:ID:DOMAIN` - 비즈니스 로직, 도메인 규칙
258
+ - `@CODE:ID:INFRA` - 인프라, 데이터베이스, 외부 연동
259
+
260
+ ### TAG 사용 규칙
261
+
262
+ - **TAG ID**: `<도메인>-<3자리>` (예: `AUTH-003`) - **영구 불변**
263
+ - **디렉토리 명명 규칙**: `.moai/specs/SPEC-{ID}/` (필수)
264
+ - ✅ **올바른 예**: `SPEC-AUTH-001/`, `SPEC-REFACTOR-001/`, `SPEC-UPDATE-REFACTOR-001/`
265
+ - ❌ **잘못된 예**: `AUTH-001/`, `SPEC-001-auth/`, `SPEC-AUTH-001-jwt/`
266
+ - **복합 도메인**: 하이픈으로 연결 가능 (예: `UPDATE-REFACTOR-001`)
267
+ - **경고**: 하이픈 3개 이상 연결 시 단순화 권장
268
+ - **TAG 내용**: 자유롭게 수정 가능 (HISTORY에 기록 필수)
269
+ - **버전 관리**: Semantic Versioning (v0.0.1 → v0.1.0 → v1.0.0)
270
+ - 상세 버전 체계: `spec-metadata.md#버전-체계` 참조
271
+ - **새 TAG 생성 전 중복 확인**: `rg "@SPEC:{ID}" -n .moai/specs/` (필수)
272
+ - **TAG 검증**: `rg '@(SPEC|TEST|CODE|DOC):' -n .moai/specs/ tests/ src/ docs/`
273
+ - **SPEC 버전 일치성 확인**: `rg "SPEC-{ID}.md v" -n`
274
+ - **CODE-FIRST 원칙**: TAG의 진실은 코드 자체에만 존재
275
+
276
+ ### HISTORY 작성 가이드
277
+
278
+ **변경 유형 태그**:
279
+ - `INITIAL`: 최초 작성 (v1.0.0)
280
+ - `ADDED`: 새 기능/요구사항 추가 → Minor 버전 증가
281
+ - `CHANGED`: 기존 내용 수정 → Patch 버전 증가
282
+ - `FIXED`: 버그/오류 수정 → Patch 버전 증가
283
+ - `REMOVED`: 기능/요구사항 제거 → Major 버전 증가
284
+ - `BREAKING`: 하위 호환성 깨지는 변경 → Major 버전 증가
285
+ - `DEPRECATED`: 향후 제거 예정 표시
286
+
287
+ **필수 메타데이터**:
288
+ - `AUTHOR`: 작성자/수정자 (GitHub ID)
289
+ - `REVIEW`: 리뷰어 및 승인 상태
290
+ - `REASON`: 변경 이유 (선택사항, 중요 변경 시 권장)
291
+ - `RELATED`: 관련 이슈/PR 번호 (선택사항)
292
+
293
+ **HISTORY 검색 예시**:
294
+ ```bash
295
+ # 특정 TAG의 전체 변경 이력 조회
296
+ rg -A 20 "# @SPEC:AUTH-001" .moai/specs/SPEC-AUTH-001.md
297
+
298
+ # HISTORY 섹션만 추출
299
+ rg -A 50 "## HISTORY" .moai/specs/SPEC-AUTH-001.md
300
+
301
+ # 최근 변경 사항만 확인
302
+ rg "### v[0-9]" .moai/specs/SPEC-AUTH-001.md | head -3
303
+ ```
304
+
305
+
306
+ ---
307
+
308
+ ## 개발 원칙
309
+
310
+ ### 코드 제약
311
+
312
+ - 파일당 300 LOC 이하
313
+ - 함수당 50 LOC 이하
314
+ - 매개변수 5개 이하
315
+ - 복잡도 10 이하
316
+
317
+ ### 품질 기준
318
+
319
+ - 테스트 커버리지 85% 이상
320
+ - 의도 드러내는 이름 사용
321
+ - 가드절 우선 사용
322
+ - 언어별 표준 도구 활용
323
+
324
+ ### 리팩토링 규칙
325
+
326
+ - **3회 반복 규칙**: 패턴의 3번째 반복 시 리팩토링 계획
327
+ - **준비 리팩토링**: 변경을 쉽게 만드는 환경 준비 후 변경 적용
328
+ - **즉시 정리**: 작은 문제는 즉시 수정, 범위 확대 시 별도 작업으로 분리
329
+
330
+ ## 예외 처리
331
+
332
+ 권장사항을 초과하거나 벗어날 때 Waiver를 작성하여 PR/Issue/ADR에 첨부한다.
333
+
334
+ **Waiver 필수 포함 사항**:
335
+
336
+ - 이유와 검토한 대안
337
+ - 위험과 완화 방안
338
+ - 임시/영구 상태
339
+ - 만료 조건과 승인자
340
+
341
+ ## 언어별 도구 매핑
342
+
343
+ - **Python**: pytest (테스트), mypy (타입 검사), black (포맷)
344
+ - **TypeScript**: Vitest (테스트), Biome (린터+포맷)
345
+ - **Java**: JUnit (테스트), Maven/Gradle (빌드)
346
+ - **Go**: go test (테스트), gofmt (포맷)
347
+ - **Rust**: cargo test (테스트), rustfmt (포맷)
348
+
349
+ ## 변수 역할 참고
350
+
351
+ | Role | Description | Example |
352
+ | ------------------ | ----------------------------------- | ------------------------------------- |
353
+ | Fixed Value | Constant after initialization | `const MAX_SIZE = 100` |
354
+ | Stepper | Changes sequentially | `for (let i = 0; i < n; i++)` |
355
+ | Flag | Boolean state indicator | `let isValid = true` |
356
+ | Walker | Traverses a data structure | `while (node) { node = node.next; }` |
357
+ | Most Recent Holder | Holds the most recent value | `let lastError` |
358
+ | Most Wanted Holder | Holds optimal/maximum value | `let bestScore = -Infinity` |
359
+ | Gatherer | Accumulator | `sum += value` |
360
+ | Container | Stores multiple values | `const list = []` |
361
+ | Follower | Previous value of another variable | `prev = curr; curr = next;` |
362
+ | Organizer | Reorganizes data | `const sorted = array.sort()` |
363
+ | Temporary | Temporary storage | `const temp = a; a = b; b = temp;` |
364
+
365
+ ---
366
+
367
+ 이 가이드는 MoAI-ADK 3단계 파이프라인을 실행하는 표준을 제공한다.
@@ -0,0 +1,277 @@
1
+ # SPEC 메타데이터 구조 가이드
2
+
3
+ > **MoAI-ADK SPEC 메타데이터 표준**
4
+ >
5
+ > 모든 SPEC 문서는 이 메타데이터 구조를 따라야 합니다.
6
+
7
+ ---
8
+
9
+ ## 📋 메타데이터 구조 개요
10
+
11
+ SPEC 메타데이터는 **필수 필드 7개**와 **선택 필드 9개**로 구성됩니다.
12
+
13
+ ### 전체 구조 예시
14
+
15
+ ```yaml
16
+ ---
17
+ # 필수 필드 (7개)
18
+ id: AUTH-001 # SPEC 고유 ID
19
+ version: 0.0.1 # Semantic Version (v0.0.1 = INITIAL, draft 시작)
20
+ status: draft # draft|active|completed|deprecated
21
+ created: 2025-09-15 # 생성일 (YYYY-MM-DD)
22
+ updated: 2025-09-15 # 최종 수정일 (YYYY-MM-DD, 최초에는 created와 동일)
23
+ author: @Goos # 작성자 (GitHub ID, 단수형)
24
+ priority: high # low|medium|high|critical
25
+
26
+ # 선택 필드 - 분류/메타
27
+ category: security # feature|bugfix|refactor|security|docs|perf
28
+ labels: # 분류 태그 (검색용)
29
+ - authentication
30
+ - jwt
31
+
32
+ # 선택 필드 - 관계 (의존성 그래프)
33
+ depends_on: # 의존하는 SPEC (선택)
34
+ - USER-001
35
+ blocks: # 차단하는 SPEC (선택)
36
+ - AUTH-002
37
+ related_specs: # 관련 SPEC (선택)
38
+ - TOKEN-002
39
+ related_issue: "https://github.com/modu-ai/moai-adk/issues/123"
40
+
41
+ # 선택 필드 - 범위 (영향 분석)
42
+ scope:
43
+ packages: # 영향받는 패키지
44
+ - src/core/auth
45
+ files: # 핵심 파일 (선택)
46
+ - auth-service.ts
47
+ - jwt-manager.ts
48
+ ---
49
+ ```
50
+
51
+ ---
52
+
53
+ ## 필수 필드 (Required Fields)
54
+
55
+ ### 1. `id` - SPEC 고유 ID
56
+ - **타입**: string
57
+ - **형식**: `<DOMAIN>-<NUMBER>`
58
+ - **예시**: `AUTH-001`, `INSTALLER-SEC-001`
59
+ - **규칙**:
60
+ - 영구 불변 (한 번 부여하면 변경 불가)
61
+ - 3자리 숫자 사용 (001~999)
62
+ - 도메인은 대문자, 하이픈 사용 가능
63
+ - 디렉토리명: `.moai/specs/SPEC-{ID}/` (예: `.moai/specs/SPEC-AUTH-001/`)
64
+
65
+ ### 2. `version` - 버전
66
+ - **타입**: string (Semantic Version)
67
+ - **형식**: `MAJOR.MINOR.PATCH`
68
+ - **기본값**: `0.0.1` (모든 SPEC 시작 버전, status: draft)
69
+ - **버전 체계**:
70
+ - **v0.0.1**: INITIAL - SPEC 최초 작성 (status: draft)
71
+ - **v0.0.x**: Draft 수정/개선 (SPEC 문서 수정 시 패치 버전 증가)
72
+ - **v0.1.0**: TDD 구현 완료 (status: completed, /alfred:3-sync 자동 업데이트)
73
+ - **v0.1.x**: 버그 수정, 문서 개선 (패치 버전)
74
+ - **v0.x.0**: 기능 추가, 주요 개선 (마이너 버전)
75
+ - **v1.0.0**: 정식 안정화 버전 (프로덕션 준비, 사용자 명시적 승인 필수)
76
+
77
+ ### 3. `status` - 진행 상태
78
+ - **타입**: enum
79
+ - **가능한 값**:
80
+ - `draft`: 초안 작성 중
81
+ - `active`: 구현 진행 중
82
+ - `completed`: 구현 완료
83
+ - `deprecated`: 사용 중지 예정
84
+
85
+ ### 4. `created` - 생성일
86
+ - **타입**: date (string)
87
+ - **형식**: `YYYY-MM-DD`
88
+ - **예시**: `2025-10-06`
89
+
90
+ ### 5. `updated` - 최종 수정일
91
+ - **타입**: date (string)
92
+ - **형식**: `YYYY-MM-DD`
93
+ - **규칙**: SPEC 내용 수정 시마다 업데이트
94
+
95
+ ### 6. `author` - 작성자
96
+ - **타입**: string
97
+ - **형식**: `@{GitHub ID}`
98
+ - **예시**: `@Goos`
99
+ - **규칙**:
100
+ - 단수형 사용 (~~authors 배열 사용하지 않음~~)
101
+ - GitHub ID 앞에 @ 접두사 필수
102
+ - 복수 작성자는 HISTORY 섹션에 기록
103
+
104
+ ### 7. `priority` - 우선순위
105
+ - **타입**: enum
106
+ - **가능한 값**:
107
+ - `critical`: 즉시 처리 필요 (보안, 중대 버그)
108
+ - `high`: 높은 우선순위 (주요 기능)
109
+ - `medium`: 중간 우선순위 (개선사항)
110
+ - `low`: 낮은 우선순위 (최적화, 문서)
111
+
112
+ ---
113
+
114
+ ## 선택 필드 (Optional Fields)
115
+
116
+ ### 분류/메타 필드
117
+
118
+ #### 8. `category` - 변경 유형
119
+ - **타입**: enum
120
+ - **가능한 값**:
121
+ - `feature`: 새 기능 추가
122
+ - `bugfix`: 버그 수정
123
+ - `refactor`: 리팩토링
124
+ - `security`: 보안 개선
125
+ - `docs`: 문서화
126
+ - `perf`: 성능 최적화
127
+
128
+ #### 9. `labels` - 분류 태그
129
+ - **타입**: array of string
130
+ - **용도**: 검색, 필터링, 그루핑
131
+ - **예시**:
132
+ ```yaml
133
+ labels:
134
+ - installer
135
+ - template
136
+ - security
137
+ ```
138
+
139
+ ### 관계 필드 (Dependency Graph)
140
+
141
+ #### 10. `depends_on` - 의존 SPEC
142
+ - **타입**: array of string
143
+ - **의미**: 이 SPEC이 완료되려면 먼저 완료되어야 하는 SPEC 목록
144
+ - **예시**:
145
+ ```yaml
146
+ depends_on:
147
+ - USER-001
148
+ - AUTH-001
149
+ ```
150
+ - **활용**: 작업 순서 결정, 병렬 작업 가능 여부 판단
151
+
152
+ #### 11. `blocks` - 차단 SPEC
153
+ - **타입**: array of string
154
+ - **의미**: 이 SPEC으로 인해 차단된 SPEC 목록
155
+ - **예시**:
156
+ ```yaml
157
+ blocks:
158
+ - PAYMENT-003
159
+ ```
160
+
161
+ #### 12. `related_specs` - 관련 SPEC
162
+ - **타입**: array of string
163
+ - **의미**: 직접적 의존성은 없지만 관련된 SPEC 목록
164
+ - **예시**:
165
+ ```yaml
166
+ related_specs:
167
+ - TOKEN-002
168
+ - SESSION-001
169
+ ```
170
+
171
+ #### 13. `related_issue` - 관련 GitHub Issue
172
+ - **타입**: string (URL)
173
+ - **형식**: GitHub Issue 전체 URL
174
+ - **예시**:
175
+ ```yaml
176
+ related_issue: "https://github.com/modu-ai/moai-adk/issues/123"
177
+ ```
178
+
179
+ ### 범위 필드 (Scope/Impact)
180
+
181
+ #### 14. `scope.packages` - 영향받는 패키지
182
+ - **타입**: array of string
183
+ - **의미**: 이 SPEC이 영향을 주는 패키지/모듈 경로
184
+ - **예시**:
185
+ ```yaml
186
+ scope:
187
+ packages:
188
+ - moai-adk-ts/src/core/installer
189
+ - moai-adk-ts/src/core/git
190
+ ```
191
+
192
+ #### 15. `scope.files` - 핵심 파일
193
+ - **타입**: array of string
194
+ - **의미**: 주요 변경 대상 파일 (참고용)
195
+ - **예시**:
196
+ ```yaml
197
+ scope:
198
+ files:
199
+ - template-processor.ts
200
+ - template-security.ts
201
+ ```
202
+
203
+ ---
204
+
205
+ ## 메타데이터 검증
206
+
207
+ ### 필수 필드 검증
208
+ ```bash
209
+ # 모든 SPEC 파일에 필수 필드가 있는지 확인
210
+ rg "^(id|version|status|created|updated|author|priority):" .moai/specs/SPEC-*/spec.md
211
+
212
+ # priority 필드 누락 확인
213
+ rg -L "^priority:" .moai/specs/SPEC-*/spec.md
214
+ ```
215
+
216
+ ### 형식 검증
217
+ ```bash
218
+ # author 필드 형식 확인 (@Goos 형식)
219
+ rg "^author: @[A-Z]" .moai/specs/SPEC-*/spec.md
220
+
221
+ # version 필드 형식 확인 (0.x.y)
222
+ rg "^version: 0\.\d+\.\d+" .moai/specs/SPEC-*/spec.md
223
+ ```
224
+
225
+ ---
226
+
227
+ ## 마이그레이션 가이드
228
+
229
+ ### 기존 SPEC 업데이트
230
+
231
+ #### 1. priority 필드 추가
232
+ 기존 SPEC에 priority 필드가 없다면 추가:
233
+ ```yaml
234
+ priority: medium # 또는 low|high|critical
235
+ ```
236
+
237
+ #### 2. author 필드 표준화
238
+ - `authors: ["@goos"]` → `author: @Goos`
239
+ - 소문자 → 대문자로 변경
240
+
241
+ #### 3. 선택 필드 추가 (권장)
242
+ ```yaml
243
+ category: refactor
244
+ labels:
245
+ - code-quality
246
+ - maintenance
247
+ ```
248
+
249
+ ---
250
+
251
+ ## 설계 원칙
252
+
253
+ ### 1. DRY (Don't Repeat Yourself)
254
+ - ❌ **제거**: `reference` 필드 (모든 SPEC이 같은 masterplan 참조 → 중복)
255
+ - ✅ **대안**: README.md에 프로젝트 레벨 문서 명시
256
+
257
+ ### 2. Context-Aware
258
+ - 필요한 컨텍스트만 포함
259
+ - 선택 필드는 실제 필요할 때만 사용
260
+
261
+ ### 3. Traceable
262
+ - `depends_on`, `blocks`, `related_specs`로 SPEC 간 의존성 명시
263
+ - 자동화 도구로 순환 의존성 검증 가능
264
+
265
+ ### 4. Maintainable
266
+ - 모든 필드는 자동화 도구로 검증 가능
267
+ - 일관된 형식으로 파싱 용이
268
+
269
+ ### 5. Simple First
270
+ - 복잡도 최소화
271
+ - 필수 7개 + 선택 9개로 제한
272
+ - 점진적 확장 가능
273
+
274
+ ---
275
+
276
+ **최종 업데이트**: 2025-10-06
277
+ **작성자**: @Alfred