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,10 +1,10 @@
1
1
  ---
2
2
  name: moai-spec-authoring
3
- version: 1.1.0
3
+ version: 1.2.0
4
4
  created: 2025-10-23
5
- updated: 2025-10-27
5
+ updated: 2025-10-29
6
6
  status: active
7
- description: SPEC 문서 작성 가이드 - YAML 메타데이터, EARS 문법, 검증 체크리스트 제공
7
+ description: SPEC document authoring guide - YAML metadata, EARS syntax (5 patterns with Unwanted Behaviors), validation checklist
8
8
  keywords: ['spec', 'authoring', 'ears', 'metadata', 'requirements', 'tdd', 'planning']
9
9
  allowed-tools:
10
10
  - Read
@@ -19,200 +19,201 @@ allowed-tools:
19
19
  | Field | Value |
20
20
  | ----- | ----- |
21
21
  | **Skill Name** | moai-spec-authoring |
22
- | **Version** | 1.1.0 (2025-10-27) |
22
+ | **Version** | 1.2.0 (2025-10-29) |
23
23
  | **Allowed tools** | Read, Bash, Glob |
24
- | **Auto-load** | `/alfred:1-plan`, SPEC 작성 태스크 |
24
+ | **Auto-load** | `/alfred:1-plan`, SPEC authoring tasks |
25
25
  | **Tier** | Foundation |
26
26
 
27
27
  ---
28
28
 
29
29
  ## What It Does
30
30
 
31
- MoAI-ADK SPEC 문서 작성을 위한 종합 가이드입니다. YAML 메타데이터 구조(7 필수 + 9 선택 필드), EARS 요구사항 문법(5 패턴), 버전 관리 생애주기, TAG 통합, 검증 전략을 제공합니다.
31
+ Comprehensive guide for authoring SPEC documents in MoAI-ADK. Provides YAML metadata structure (7 required + 9 optional fields), official EARS requirement syntax (5 patterns including Unwanted Behaviors), version management lifecycle, TAG integration, and validation strategies.
32
32
 
33
- **핵심 기능**:
34
- - 단계별 SPEC 생성 워크플로우
35
- - 완전한 메타데이터 필드 레퍼런스
36
- - EARS 문법 템플릿과 실전 패턴
37
- - 제출 검증 체크리스트
38
- - 일반적인 함정 예방 가이드
39
- - `/alfred:1-plan` 워크플로우 통합
33
+ **Key capabilities**:
34
+ - Step-by-step SPEC creation workflow
35
+ - Complete metadata field reference with lifecycle rules
36
+ - EARS syntax templates and real-world patterns
37
+ - Pre-submission validation checklist
38
+ - Common pitfalls prevention guide
39
+ - `/alfred:1-plan` workflow integration
40
40
 
41
41
  ---
42
42
 
43
43
  ## When to Use
44
44
 
45
- **자동 트리거**:
46
- - `/alfred:1-plan` 명령어 실행
47
- - SPEC 문서 생성 요청
48
- - 요구사항 명확화 논의
49
- - 기능 계획 세션
45
+ **Automatic triggers**:
46
+ - `/alfred:1-plan` command execution
47
+ - SPEC document creation requests
48
+ - Requirements clarification discussions
49
+ - Feature planning sessions
50
50
 
51
- **수동 호출**:
52
- - SPEC 작성 모범 사례 학습
53
- - 기존 SPEC 문서 검증
54
- - 메타데이터 이슈 트러블슈팅
55
- - EARS 문법 패턴 이해
51
+ **Manual invocation**:
52
+ - Learn SPEC authoring best practices
53
+ - Validate existing SPEC documents
54
+ - Troubleshoot metadata issues
55
+ - Understand EARS syntax patterns
56
56
 
57
57
  ---
58
58
 
59
59
  ## Quick Start: 5-Step SPEC Creation
60
60
 
61
- ### Step 1: SPEC 디렉토리 초기화
61
+ ### Step 1: Initialize SPEC Directory
62
62
 
63
63
  ```bash
64
64
  mkdir -p .moai/specs/SPEC-{DOMAIN}-{NUMBER}
65
- # 예시: 인증 기능
65
+ # Example: Authentication feature
66
66
  mkdir -p .moai/specs/SPEC-AUTH-001
67
67
  ```
68
68
 
69
- ### Step 2: YAML Front Matter 작성
69
+ ### Step 2: Write YAML Front Matter
70
70
 
71
71
  ```yaml
72
72
  ---
73
73
  id: AUTH-001
74
74
  version: 0.0.1
75
75
  status: draft
76
- created: 2025-10-23
77
- updated: 2025-10-23
76
+ created: 2025-10-29
77
+ updated: 2025-10-29
78
78
  author: @YourGitHubHandle
79
79
  priority: high
80
80
  ---
81
81
  ```
82
82
 
83
- ### Step 3: SPEC 타이틀 & HISTORY 추가
83
+ ### Step 3: Add SPEC Title & HISTORY
84
84
 
85
85
  ```markdown
86
86
  # @SPEC:AUTH-001: JWT Authentication System
87
87
 
88
88
  ## HISTORY
89
89
 
90
- ### v0.0.1 (2025-10-23)
91
- - **INITIAL**: JWT 인증 SPEC 초안 작성
90
+ ### v0.0.1 (2025-10-29)
91
+ - **INITIAL**: JWT authentication SPEC draft created
92
92
  - **AUTHOR**: @YourHandle
93
93
  ```
94
94
 
95
- ### Step 4: Environment & Assumptions 정의
95
+ ### Step 4: Define Environment & Assumptions
96
96
 
97
97
  ```markdown
98
98
  ## Environment
99
99
 
100
- **Runtime**: Node.js 20.x 이상
100
+ **Runtime**: Node.js 20.x or later
101
101
  **Framework**: Express.js
102
102
  **Database**: PostgreSQL 15+
103
103
 
104
104
  ## Assumptions
105
105
 
106
- 1. 사용자 인증 정보는 PostgreSQL에 저장
107
- 2. JWT 시크릿은 환경변수로 관리
108
- 3. 서버 시계는 NTP로 동기화
106
+ 1. User credentials stored in PostgreSQL
107
+ 2. JWT secrets managed via environment variables
108
+ 3. Server clock synchronized with NTP
109
109
  ```
110
110
 
111
- ### Step 5: EARS 요구사항 작성
111
+ ### Step 5: Write EARS Requirements
112
112
 
113
113
  ```markdown
114
114
  ## Requirements
115
115
 
116
116
  ### Ubiquitous Requirements
117
- **UR-001**: 시스템은 JWT 기반 인증을 제공해야 한다.
117
+ **UR-001**: The system shall provide JWT-based authentication.
118
118
 
119
119
  ### Event-driven Requirements
120
- **ER-001**: WHEN 사용자가 유효한 인증 정보를 제출하면, 시스템은 15분 만료 시간을 가진 JWT 토큰을 발급해야 한다.
120
+ **ER-001**: WHEN the user submits valid credentials, the system shall issue a JWT token with 15-minute expiration.
121
121
 
122
122
  ### State-driven Requirements
123
- **SR-001**: WHILE 사용자가 인증된 상태이면, 시스템은 보호된 리소스에 대한 접근을 허용해야 한다.
123
+ **SR-001**: WHILE the user is in an authenticated state, the system shall permit access to protected resources.
124
124
 
125
125
  ### Optional Features
126
- **OF-001**: WHERE 다중 인증이 활성화된 경우, 시스템은 비밀번호 확인 OTP 검증을 요구할 있다.
126
+ **OF-001**: WHERE multi-factor authentication is enabled, the system can require OTP verification after password confirmation.
127
127
 
128
- ### Constraints
129
- **C-001**: IF 토큰이 만료되었다면, 시스템은 접근을 거부하고 HTTP 401을 반환해야 한다.
128
+ ### Unwanted Behaviors
129
+ **UB-001**: IF a token has expired, THEN the system shall deny access and return HTTP 401.
130
130
  ```
131
131
 
132
132
  ---
133
133
 
134
- ## EARS 5가지 패턴 개요
134
+ ## Five EARS Pattern Overview
135
135
 
136
- | 패턴 | 키워드 | 용도 | 예시 |
137
- |------|--------|------|------|
138
- | **Ubiquitous** | shall | 항상 활성화된 핵심 기능 | "시스템은 로그인을 제공해야 한다" |
139
- | **Event-driven** | WHEN | 특정 이벤트에 대한 응답 | "WHEN 로그인 실패 시, 에러 표시" |
140
- | **State-driven** | WHILE | 상태 지속적 동작 | "WHILE 로그인 상태, 접근 허용" |
141
- | **Optional** | WHERE | 기능 플래그 기반 조건부 | "WHERE 프리미엄이면, 기능 해제" |
142
- | **Constraints** | IF-THEN | 품질 게이트, 비즈니스 규칙 | "IF 만료되었다면, 거부" |
136
+ | Pattern | Keyword | Purpose | Example |
137
+ |---------|---------|---------|---------|
138
+ | **Ubiquitous** | shall | Core functionality always active | "The system shall provide login capability" |
139
+ | **Event-driven** | WHEN | Response to specific events | "WHEN login fails, display error" |
140
+ | **State-driven** | WHILE | Persistent behavior during state | "WHILE in authenticated state, permit access" |
141
+ | **Optional** | WHERE | Conditional features based on flags | "WHERE premium enabled, unlock feature" |
142
+ | **Unwanted Behaviors** | IF-THEN | Error handling, quality gates, business rules | "IF token expires, deny access + return 401" |
143
143
 
144
144
  ---
145
145
 
146
- ## 필수 메타데이터 7개 필드
146
+ ## Seven Required Metadata Fields
147
147
 
148
- 1. **id**: `<DOMAIN>-<NUMBER>` (예: `AUTH-001`) - 불변 식별자
149
- 2. **version**: `MAJOR.MINOR.PATCH` (예: `0.0.1`) - 시맨틱 버전
148
+ 1. **id**: `<DOMAIN>-<NUMBER>` (e.g., `AUTH-001`) - Immutable identifier
149
+ 2. **version**: `MAJOR.MINOR.PATCH` (e.g., `0.0.1`) - Semantic versioning
150
150
  3. **status**: `draft` | `active` | `completed` | `deprecated`
151
- 4. **created**: `YYYY-MM-DD` - 최초 생성일
152
- 5. **updated**: `YYYY-MM-DD` - 최종 수정일
153
- 6. **author**: `@GitHubHandle` - 작성자 (@ 접두사 필수)
151
+ 4. **created**: `YYYY-MM-DD` - Initial creation date
152
+ 5. **updated**: `YYYY-MM-DD` - Final modification date
153
+ 6. **author**: `@GitHubHandle` - Primary author (@ prefix required)
154
154
  7. **priority**: `critical` | `high` | `medium` | `low`
155
155
 
156
- **버전 생애주기**:
157
- - `0.0.x` → draft (초안 작성 중)
158
- - `0.1.0` → completed (구현 완료)
159
- - `1.0.0` → stable (프로덕션 안정)
156
+ **Version Lifecycle**:
157
+ - `0.0.x` → draft (authoring phase)
158
+ - `0.1.0` → completed (implementation done)
159
+ - `1.0.0` → stable (production-ready)
160
160
 
161
161
  ---
162
162
 
163
- ## 검증 체크리스트
164
-
165
- ### 메타데이터 검증
166
- - [ ] 7 필수 필드 모두 존재
167
- - [ ] `author` 필드에 @ 접두사 포함
168
- - [ ] `version` 형식이 `0.x.y` 형식
169
- - [ ] `id`가 중복되지 않음 (`rg "@SPEC:AUTH-001" -n .moai/specs/`)
170
-
171
- ### 콘텐츠 검증
172
- - [ ] YAML Front Matter 완성
173
- - [ ] 타이틀에 `@SPEC:{ID}` TAG 블록
174
- - [ ] HISTORY 섹션에 v0.0.1 INITIAL 엔트리
175
- - [ ] Environment 섹션 정의
176
- - [ ] Assumptions 섹션 정의 (최소 3)
177
- - [ ] Requirements 섹션에 EARS 패턴 사용
178
- - [ ] Traceability 섹션에 TAG 체인 구조
179
-
180
- ### EARS 문법 검증
181
- - [ ] Ubiquitous: "shall" + 능력 표현
182
- - [ ] Event-driven: "WHEN [트리거]"로 시작
183
- - [ ] State-driven: "WHILE [상태]"로 시작
184
- - [ ] Optional: "WHERE [기능]" 시작, "can" 사용
185
- - [ ] Constraints: "IF-THEN" 또는 직접 제약 표현
163
+ ## Validation Checklist
164
+
165
+ ### Metadata Validation
166
+ - [ ] All 7 required fields present
167
+ - [ ] `author` field includes @ prefix
168
+ - [ ] `version` format is `0.x.y`
169
+ - [ ] `id` is not duplicated (`rg "@SPEC:AUTH-001" -n .moai/specs/`)
170
+
171
+ ### Content Validation
172
+ - [ ] YAML Front Matter complete
173
+ - [ ] Title includes `@SPEC:{ID}` TAG block
174
+ - [ ] HISTORY section has v0.0.1 INITIAL entry
175
+ - [ ] Environment section defined
176
+ - [ ] Assumptions section defined (minimum 3 items)
177
+ - [ ] Requirements section uses EARS patterns
178
+ - [ ] Traceability section shows TAG chain structure
179
+
180
+ ### EARS Syntax Validation
181
+ - [ ] Ubiquitous: "shall" + capability
182
+ - [ ] Event-driven: Starts with "WHEN [trigger]"
183
+ - [ ] State-driven: Starts with "WHILE [state]"
184
+ - [ ] Optional: Starts with "WHERE [feature]", uses "can"
185
+ - [ ] Unwanted Behaviors: "IF-THEN" or direct constraint expression
186
186
 
187
187
  ---
188
188
 
189
- ## 일반적인 함정
189
+ ## Common Pitfalls
190
190
 
191
- 1. ❌ **ID 변경**: 할당 후 SPEC ID 변경 → TAG 체인 파괴
192
- 2. ❌ **HISTORY 누락**: 콘텐츠 변경 HISTORY 업데이트 생략
193
- 3. ❌ **잘못된 버전 진행**: v0.0.1 → v1.0.0으로 건너뛰기
194
- 4. ❌ **모호한 요구사항**: "빠르고 사용자 친화적" 같은 측정 불가능한 표현
195
- 5. ❌ **@ 접두사 누락**: `author: Goos` 대신 `author: @Goos`
196
- 6. ❌ **EARS 패턴 혼합**: 하나의 요구사항에 여러 키워드 혼용
191
+ 1. ❌ **Changing SPEC ID after assignment** Breaks TAG chain
192
+ 2. ❌ **Skipping HISTORY updates** Content changes without audit trail
193
+ 3. ❌ **Jumping version numbers** v0.0.1 → v1.0.0 without intermediate steps
194
+ 4. ❌ **Ambiguous requirements** "Fast and user-friendly" (unmeasurable)
195
+ 5. ❌ **Missing @ prefix in author** → `author: Goos` instead of `author: @Goos`
196
+ 6. ❌ **Mixing EARS patterns** Multiple keywords in single requirement
197
197
 
198
198
  ---
199
199
 
200
200
  ## Related Skills
201
201
 
202
- - `moai-foundation-ears` - EARS 문법 패턴
203
- - `moai-foundation-specs` - 메타데이터 검증
204
- - `moai-foundation-tags` - TAG 시스템 통합
205
- - `moai-alfred-spec-metadata-validation` - 자동화된 검증
202
+ - `moai-foundation-ears` - Official EARS syntax patterns
203
+ - `moai-foundation-specs` - Metadata validation automation
204
+ - `moai-foundation-tags` - TAG system integration
205
+ - `moai-alfred-spec-metadata-validation` - Automated validation
206
206
 
207
207
  ---
208
208
 
209
- ## 상세 정보
209
+ ## Detailed Reference
210
210
 
211
- - **메타데이터 레퍼런스**: [reference.md](./reference.md) 참조
212
- - **실전 예제**: [examples.md](./examples.md) 참조
211
+ - **Full Metadata Reference**: [reference.md](./reference.md)
212
+ - **Practical Examples**: [examples.md](./examples.md)
213
213
 
214
214
  ---
215
215
 
216
- **Last Updated**: 2025-10-27
216
+ **Last Updated**: 2025-10-29
217
+ **Version**: 1.2.0
217
218
  **Maintained By**: MoAI-ADK Team
218
- **Support**: `/alfred:1-plan` 명령어로 가이드 받기
219
+ **Support**: Use `/alfred:1-plan` command for guided SPEC creation
@@ -147,9 +147,9 @@ else
147
147
  echo "⚠️ (none found)"
148
148
  fi
149
149
 
150
- echo -n " Constraints (C-XXX)... "
151
- if rg "^\*\*C-\d+" "$SPEC_DIR/spec.md" > /dev/null 2>&1; then
152
- COUNT=$(rg "^\*\*C-\d+" "$SPEC_DIR/spec.md" | wc -l | tr -d ' ')
150
+ echo -n " Unwanted Behaviors (UB-XXX)... "
151
+ if rg "^\*\*UB-\d+" "$SPEC_DIR/spec.md" > /dev/null 2>&1; then
152
+ COUNT=$(rg "^\*\*UB-\d+" "$SPEC_DIR/spec.md" | wc -l | tr -d ' ')
153
153
  echo "✅ ($COUNT found)"
154
154
  else
155
155
  echo "⚠️ (none found)"