solmate-skills 2.0.3 → 2.0.5

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 (40) hide show
  1. package/AGENTS.md +10 -6
  2. package/README.md +118 -5
  3. package/bin/cli.js +42 -2
  4. package/docs-business/agents/openai.yaml +4 -0
  5. package/docs-dev/SKILL.md +17 -0
  6. package/docs-dev/agents/openai.yaml +4 -0
  7. package/docs-pitch/agents/openai.yaml +4 -0
  8. package/docs-plan/SKILL.md +34 -5
  9. package/docs-plan/agents/openai.yaml +4 -0
  10. package/manage-collaboration/agents/openai.yaml +4 -0
  11. package/manage-decisions/agents/openai.yaml +4 -0
  12. package/manage-skills/SKILL.md +8 -1
  13. package/manage-skills/agents/openai.yaml +4 -0
  14. package/package.json +1 -1
  15. package/role-team-lead/agents/openai.yaml +4 -0
  16. package/role-team-member/agents/openai.yaml +4 -0
  17. package/rules-dev/agents/openai.yaml +4 -0
  18. package/rules-docs/agents/openai.yaml +4 -0
  19. package/rules-product/SKILL.md +105 -6
  20. package/rules-product/agents/openai.yaml +4 -0
  21. package/rules-react/SKILL.md +10 -7
  22. package/rules-react/agents/openai.yaml +4 -0
  23. package/rules-workflow/SKILL.md +17 -2
  24. package/rules-workflow/agents/openai.yaml +4 -0
  25. package/tools-obsidian/agents/openai.yaml +4 -0
  26. package/tools-shadcn/agents/openai.yaml +4 -0
  27. package/verify-code/SKILL.md +17 -1
  28. package/verify-code/agents/openai.yaml +4 -0
  29. package/verify-docs/SKILL.md +38 -5
  30. package/verify-docs/agents/openai.yaml +4 -0
  31. package/verify-drizzle-schema/agents/openai.yaml +4 -0
  32. package/verify-implementation/SKILL.md +66 -12
  33. package/verify-implementation/agents/openai.yaml +4 -0
  34. package/verify-performance/SKILL.md +16 -0
  35. package/verify-performance/agents/openai.yaml +4 -0
  36. package/verify-security/agents/openai.yaml +4 -0
  37. package/verify-skills/SKILL.md +179 -0
  38. package/verify-skills/agents/openai.yaml +4 -0
  39. package/verify-ui/SKILL.md +128 -0
  40. package/verify-ui/agents/openai.yaml +4 -0
@@ -0,0 +1,179 @@
1
+ ---
2
+ name: verify-skills
3
+ description: solmate-skills 패키지 자체를 검증합니다. SKILL.md frontmatter, agents/openai.yaml, CLI 목록, README/AGENTS 스킬 목록, 버전 문구, npm pack dry-run을 점검합니다. 스킬 추가·수정 후, 배포 전, 또는 "스킬 패키지 검증" 요청 시 사용합니다.
4
+ argument-hint: "[선택사항: 특정 스킬 이름 또는 점검 영역]"
5
+ ---
6
+
7
+ # 스킬 패키지 검증 스킬 (verify-skills)
8
+
9
+ `solmate-skills` 저장소 자체의 배포 품질과 스킬 메타데이터 정합성을 검증한다.
10
+
11
+ ---
12
+
13
+ ## 실행 시점
14
+
15
+ - 새 스킬 추가 또는 기존 스킬 수정 후
16
+ - `bin/cli.js`, `README.md`, `AGENTS.md`, `package.json` 수정 후
17
+ - npm 배포 또는 태그 생성 전
18
+ - `rules-workflow` Step 17 또는 `verify-implementation` 실행 시
19
+
20
+ ---
21
+
22
+ ## Step 0: 검증 범위 확정
23
+
24
+ 인자가 있으면 해당 스킬 또는 영역만 점검한다. 없으면 루트 패키지 전체를 점검한다.
25
+
26
+ ```bash
27
+ find . -maxdepth 2 -name SKILL.md -print | sort
28
+ node bin/cli.js list
29
+ git status --short
30
+ ```
31
+
32
+ ---
33
+
34
+ ## Check 1: 스킬 디렉터리와 CLI 목록
35
+
36
+ - 루트의 설치 가능한 스킬은 `SKILL.md`가 있는 디렉터리여야 한다.
37
+ - `.claude`, `.codex`, `hooks`, `bin`, `node_modules` 같은 비스킬 디렉터리가 CLI 목록에 나오면 Fail이다.
38
+
39
+ ```bash
40
+ node bin/cli.js list
41
+ find . -maxdepth 2 -name SKILL.md -print | sed 's#^\./##; s#/SKILL.md$##' | sort
42
+ ```
43
+
44
+ - 체크:
45
+ - [ ] CLI 목록이 실제 `SKILL.md` 보유 디렉터리와 일치하는가?
46
+ - [ ] 비스킬 디렉터리가 설치 대상으로 노출되지 않는가?
47
+ - [ ] 새 verify 스킬이 README와 AGENTS 목록에 반영되었는가?
48
+
49
+ ---
50
+
51
+ ## Check 2: SKILL.md frontmatter
52
+
53
+ - 모든 `SKILL.md`가 YAML frontmatter를 갖고, `name`, `description`이 유효한지 확인한다.
54
+ - `name`은 소문자 hyphen-case여야 한다.
55
+
56
+ ```bash
57
+ python3 -c 'import pathlib, yaml, re
58
+ for p in pathlib.Path(".").glob("*/SKILL.md"):
59
+ text=p.read_text()
60
+ m=re.match(r"^---\n(.*?)\n---", text, re.S)
61
+ assert m, f"frontmatter missing: {p}"
62
+ data=yaml.safe_load(m.group(1))
63
+ assert data.get("name") and data.get("description"), f"name/description missing: {p}"
64
+ assert re.match(r"^[a-z0-9-]+$", data["name"]), f"bad name: {p}"
65
+ print("frontmatter ok")'
66
+ ```
67
+
68
+ - 체크:
69
+ - [ ] 모든 `SKILL.md` frontmatter가 파싱되는가?
70
+ - [ ] `name`과 폴더명이 불필요하게 어긋나지 않는가?
71
+ - [ ] `description`이 사용 시점을 충분히 설명하는가?
72
+
73
+ ---
74
+
75
+ ## Check 3: agents/openai.yaml
76
+
77
+ - 루트에서 직접 추적하는 스킬은 `agents/openai.yaml`을 갖는 것이 원칙이다. `git ls-files -s`에서 mode `160000`으로 표시되는 gitlink 외부 확장은 제외한다.
78
+ - `interface.display_name`, `short_description`, `default_prompt`가 있어야 하며, `default_prompt`에는 `$skill-name`이 포함되어야 한다.
79
+
80
+ ```bash
81
+ python3 -c 'import pathlib, subprocess, yaml
82
+ bad=[]
83
+ gitlinks=set()
84
+ for line in subprocess.run(["git", "ls-files", "-s"], capture_output=True, text=True).stdout.splitlines():
85
+ parts=line.split()
86
+ if len(parts) >= 4 and parts[0] == "160000":
87
+ gitlinks.add(parts[3])
88
+ for skill in [p.parent for p in pathlib.Path(".").glob("*/SKILL.md")]:
89
+ if skill.as_posix() in gitlinks:
90
+ continue
91
+ meta=skill/"agents/openai.yaml"
92
+ if not meta.exists():
93
+ bad.append(f"missing openai.yaml: {skill}")
94
+ continue
95
+ data=yaml.safe_load(meta.read_text())
96
+ interface=data.get("interface", {})
97
+ prompt=interface.get("default_prompt", "")
98
+ if "$"+skill.name not in prompt:
99
+ bad.append(f"default_prompt missing ${skill.name}: {meta}")
100
+ if not (25 <= len(interface.get("short_description", "")) <= 64):
101
+ bad.append(f"bad short_description: {meta}")
102
+ print("metadata ok" if not bad else "\n".join(bad))'
103
+ ```
104
+
105
+ - 체크:
106
+ - [ ] 각 스킬에 `agents/openai.yaml`이 있는가?
107
+ - [ ] `short_description` 길이가 25-64자인가?
108
+ - [ ] `default_prompt`가 해당 `$skill-name`을 명시하는가?
109
+
110
+ ---
111
+
112
+ ## Check 4: README, AGENTS, package 버전 동기화
113
+
114
+ - `package.json` 버전과 README의 최신 버전 문구가 일치하는지 확인한다.
115
+ - README와 AGENTS의 verify 목록이 실제 `verify-*` 디렉터리와 맞는지 확인한다.
116
+
117
+ ```bash
118
+ node -p "require('./package.json').version"
119
+ grep -n "What's New in" README.md
120
+ find . -maxdepth 1 -type d -name 'verify-*' -exec basename {} \; | sort
121
+ grep -n "verify-" README.md AGENTS.md
122
+ ```
123
+
124
+ - 체크:
125
+ - [ ] README 최신 버전 문구가 `package.json`과 일치하는가?
126
+ - [ ] README Available Skills에 새 스킬이 반영되었는가?
127
+ - [ ] AGENTS.md 품질 검증 목록에 새 verify 스킬이 반영되었는가?
128
+
129
+ ---
130
+
131
+ ## Check 5: 패키징 검증
132
+
133
+ - npm 패키징 dry-run이 통과해야 한다.
134
+ - 사용자 홈 npm 캐시 권한 문제를 피하려면 임시 캐시를 사용할 수 있다.
135
+
136
+ ```bash
137
+ npm_config_cache=/private/tmp/solmate-npm-cache npm pack --dry-run
138
+ ```
139
+
140
+ - 체크:
141
+ - [ ] dry-run이 성공하는가?
142
+ - [ ] tarball 내용에 새 스킬 파일과 `agents/openai.yaml`이 포함되는가?
143
+ - [ ] dry-run 후 실제 `.tgz` 파일이 작업트리에 남지 않았는가?
144
+
145
+ ---
146
+
147
+ ## 보고 형식
148
+
149
+ ```
150
+ ## 스킬 패키지 검증 결과
151
+
152
+ | 검사 항목 | 결과 | 비고 |
153
+ |:---|:---:|:---|
154
+ | CLI 목록 | Pass / Fail | |
155
+ | SKILL.md frontmatter | Pass / Fail | |
156
+ | agents/openai.yaml | Pass / Fail | |
157
+ | README/AGENTS 동기화 | Pass / Fail | |
158
+ | npm pack dry-run | Pass / Fail | |
159
+
160
+ ### 수정 필요 항목
161
+ - [높음] ...
162
+ ```
163
+
164
+ ---
165
+
166
+ ## Exceptions
167
+
168
+ 1. **gitlink 외부 확장**: `ext-*`가 gitlink 또는 외부 소스 묶음이면 루트 저장소의 `agents/openai.yaml` 필수 대상에서 제외할 수 있다.
169
+ 2. **실험 중인 로컬 스킬**: 배포 대상이 아니라고 명시된 로컬 실험 폴더는 CLI 설치 대상에서 제외되어야 한다.
170
+ 3. **npm 캐시 권한 문제**: 사용자 홈 npm 캐시 권한 오류는 코드 Fail이 아니며, 임시 캐시로 재검증한다.
171
+
172
+ ---
173
+
174
+ ## 관련 스킬
175
+
176
+ - `manage-skills`: verify 스킬 드리프트 탐지
177
+ - `skill-creator`: 스킬 구조와 metadata 작성 기준
178
+ - `verify-docs`: 문서 레이어 검증
179
+ - `verify-implementation`: 전체 verify 스킬 통합 실행
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Skills Package Verification"
3
+ short_description: "Validate skill package metadata and release readiness"
4
+ default_prompt: "Use $verify-skills to validate skill metadata, CLI output, docs lists, and package dry-run."
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: verify-ui
3
+ description: UI 구현이 docs/02_UI_Screens의 화면 설계, 사용자 동선, 데이터 흐름, 로딩·빈 상태·오류 상태와 일치하는지 검증합니다. React/TSX 화면 구현 후, UI-First Gate 확인 후, 또는 "UI 검증", "UX 확인", "화면이 문서와 맞는지 봐줘" 요청 시 사용합니다.
4
+ argument-hint: "[선택사항: 점검할 화면, 라우트, 컴포넌트 경로]"
5
+ ---
6
+
7
+ # UI 구현 검증 스킬 (verify-ui)
8
+
9
+ 구현된 화면이 UI-First Gate에서 합의한 화면 구조, 사용자 동선, 데이터 흐름, 상태별 UI를 실제로 반영하는지 검증한다.
10
+
11
+ ---
12
+
13
+ ## 실행 시점
14
+
15
+ - React/TSX 화면 또는 컴포넌트 구현 후
16
+ - `rules-workflow` Step 15 사용자 사용 흐름 확인 시
17
+ - `docs/02_UI_Screens/` 문서와 구현 결과의 일치 여부를 확인할 때
18
+ - PR 전 UI/UX 회귀 점검 시
19
+
20
+ ---
21
+
22
+ ## Step 0: 검증 범위 확정
23
+
24
+ 인자가 있으면 해당 화면·라우트·컴포넌트에 집중한다. 없으면 변경된 UI 파일과 관련 문서를 먼저 찾는다.
25
+
26
+ ```bash
27
+ git diff --name-only HEAD
28
+ find docs/02_UI_Screens -maxdepth 1 -type f -name '*.md' 2>/dev/null
29
+ find . -path '*/src/*' \( -name '*.tsx' -o -name '*.jsx' \) 2>/dev/null
30
+ ```
31
+
32
+ 검증 전 `docs/02_UI_Screens/00_SCREEN_FLOW.md`, `01_UI_DESIGN.md`, 관련 `XX_PROTOTYPE_REVIEW.md`, 백로그 항목의 `Related UI Docs`를 읽는다.
33
+
34
+ ---
35
+
36
+ ## Check 1: 화면 구조 일치
37
+
38
+ - 구현된 화면의 주요 영역, 정보 위계, CTA가 UI 문서와 일치하는지 확인한다.
39
+ - 화면에 필요한 헤더, 내비게이션, 주요 콘텐츠, 보조 액션, 피드백 영역이 빠지지 않았는지 점검한다.
40
+ - 체크:
41
+ - [ ] 주요 화면과 컴포넌트가 문서의 화면 목록과 대응되는가?
42
+ - [ ] CTA 문구와 위치가 사용자 흐름상 자연스러운가?
43
+ - [ ] 문서에 없는 큰 UI 변경이 있다면 관련 문서가 업데이트되었는가?
44
+
45
+ ---
46
+
47
+ ## Check 2: 사용자 동선
48
+
49
+ - 진입, 다음 행동, 뒤로가기/취소, 완료, 이탈 경로가 구현되어 있는지 확인한다.
50
+ - 링크, 버튼, 폼 제출, 모달, 탭, 라우팅이 `00_SCREEN_FLOW.md`의 흐름과 맞는지 점검한다.
51
+ - 체크:
52
+ - [ ] 핵심 사용자 여정이 끊기지 않는가?
53
+ - [ ] 주요 CTA가 실제 라우트 또는 상태 변경과 연결되는가?
54
+ - [ ] 실패 또는 취소 후 사용자가 회복할 경로가 있는가?
55
+
56
+ ---
57
+
58
+ ## Check 3: 데이터 흐름과 상태
59
+
60
+ - 화면별 입력 데이터, 표시 데이터, 저장/전송 데이터가 문서와 일치하는지 확인한다.
61
+ - mock data, API 응답, 폼 상태, 파생 상태가 화면 요구사항을 과소/과대 구현하지 않는지 점검한다.
62
+ - 체크:
63
+ - [ ] 화면에서 필요한 데이터가 모두 표시되는가?
64
+ - [ ] 입력값 검증과 제출 상태가 사용자에게 보이는가?
65
+ - [ ] 문서상 필요 없는 민감 데이터나 내부 상태가 노출되지 않는가?
66
+
67
+ ---
68
+
69
+ ## Check 4: 상태별 UI
70
+
71
+ - 로딩, 빈 상태, 오류 상태, 권한 없음, 비활성 상태가 구현되어 있는지 확인한다.
72
+ - 상태별 문구가 사용자의 다음 행동을 안내하는지 점검한다.
73
+ - 체크:
74
+ - [ ] Loading state가 존재하고 레이아웃을 크게 흔들지 않는가?
75
+ - [ ] Empty state가 원인과 다음 행동을 설명하는가?
76
+ - [ ] Error state에 재시도, 이동, 문의 등 회복 경로가 있는가?
77
+ - [ ] Disabled state가 시각적으로만 아니라 실제 상호작용도 막는가?
78
+
79
+ ---
80
+
81
+ ## Check 5: 접근성과 반응형
82
+
83
+ - 키보드 탐색, label, aria 속성, focus 상태, 색 대비, 모바일 레이아웃을 확인한다.
84
+ - 체크:
85
+ - [ ] 버튼과 입력 요소에 접근 가능한 이름이 있는가?
86
+ - [ ] 폼 입력에 label 또는 aria-label이 있는가?
87
+ - [ ] 모달/드롭다운/탭이 키보드로 조작 가능한가?
88
+ - [ ] 모바일에서 텍스트, CTA, 주요 콘텐츠가 겹치거나 잘리지 않는가?
89
+
90
+ ---
91
+
92
+ ## 보고 형식
93
+
94
+ ```
95
+ ## UI 검증 결과
96
+
97
+ ### PASS 항목
98
+ - (문제 없는 흐름과 화면 요약)
99
+
100
+ ### 개선 필요 항목
101
+ | 위치 | 영역 | 내용 | 심각도 |
102
+ |------|------|------|:------:|
103
+ | src/app/page.tsx:42 | 상태별 UI | Empty state 미구현 | 중 |
104
+ | src/components/Form.tsx:18 | 접근성 | input label 누락 | 중 |
105
+
106
+ ### 문서 동기화 필요
107
+ - 구현이 문서와 다르면 수정할 문서 또는 코드 위치를 명시한다.
108
+ ```
109
+
110
+ 심각도 기준: **높음** (핵심 동선 차단) / **중** (사용성 또는 문서 불일치) / **낮음** (개선 권장)
111
+
112
+ ---
113
+
114
+ ## Exceptions
115
+
116
+ 1. **초기 스파이크 UI**: 명시적으로 탐색용 스파이크라고 표시된 코드는 낮은 심각도로 보고하되, PR 전에는 문서 동기화를 요구한다.
117
+ 2. **관리자 내부 화면**: 공개 사용자 화면보다 시각 완성도 기준은 낮출 수 있으나, 상태별 UI와 접근성 기준은 유지한다.
118
+ 3. **외부 임베드 UI**: 지도, 결제, 인증 위젯 등 외부 위젯 내부 UI는 제외하되, 로딩·오류·복귀 경로는 검증한다.
119
+
120
+ ---
121
+
122
+ ## 관련 스킬
123
+
124
+ - `docs-plan`: UI-First Gate와 UI 문서 작성 기준
125
+ - `rules-react`: React 화면 구현 기준
126
+ - `verify-docs`: UI 문서와 백로그 구조 검증
127
+ - `verify-code`: 코드 품질 검토
128
+ - `verify-performance`: 화면 성능 검증
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "UI Verification"
3
+ short_description: "Check UI implementation against screen docs"
4
+ default_prompt: "Use $verify-ui to compare implemented screens with UI docs, user flows, and state coverage."