timsquad 3.4.0 → 3.6.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 (218) hide show
  1. package/README.ko.md +4 -0
  2. package/README.md +4 -0
  3. package/dist/commands/audit.d.ts +22 -0
  4. package/dist/commands/audit.d.ts.map +1 -0
  5. package/dist/commands/audit.js +233 -0
  6. package/dist/commands/audit.js.map +1 -0
  7. package/dist/commands/compile.d.ts.map +1 -1
  8. package/dist/commands/compile.js +84 -3
  9. package/dist/commands/compile.js.map +1 -1
  10. package/dist/commands/daemon.d.ts.map +1 -1
  11. package/dist/commands/daemon.js +50 -3
  12. package/dist/commands/daemon.js.map +1 -1
  13. package/dist/commands/full.js +1 -0
  14. package/dist/commands/full.js.map +1 -1
  15. package/dist/commands/git/pr.js +6 -5
  16. package/dist/commands/git/pr.js.map +1 -1
  17. package/dist/commands/git/release.js +2 -7
  18. package/dist/commands/git/release.js.map +1 -1
  19. package/dist/commands/improve.js +2 -2
  20. package/dist/commands/improve.js.map +1 -1
  21. package/dist/commands/init.js +42 -6
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/log.d.ts.map +1 -1
  24. package/dist/commands/log.js +34 -2
  25. package/dist/commands/log.js.map +1 -1
  26. package/dist/commands/meta-index.d.ts.map +1 -1
  27. package/dist/commands/meta-index.js +30 -0
  28. package/dist/commands/meta-index.js.map +1 -1
  29. package/dist/commands/metrics.d.ts.map +1 -1
  30. package/dist/commands/metrics.js +6 -2
  31. package/dist/commands/metrics.js.map +1 -1
  32. package/dist/commands/retro.d.ts.map +1 -1
  33. package/dist/commands/retro.js +71 -14
  34. package/dist/commands/retro.js.map +1 -1
  35. package/dist/commands/session.js +3 -3
  36. package/dist/commands/session.js.map +1 -1
  37. package/dist/commands/skills.js +4 -7
  38. package/dist/commands/skills.js.map +1 -1
  39. package/dist/commands/status.js +1 -1
  40. package/dist/commands/status.js.map +1 -1
  41. package/dist/commands/upgrade.d.ts.map +1 -1
  42. package/dist/commands/upgrade.js +18 -1
  43. package/dist/commands/upgrade.js.map +1 -1
  44. package/dist/commands/workflow.d.ts +2 -0
  45. package/dist/commands/workflow.d.ts.map +1 -1
  46. package/dist/commands/workflow.js +180 -6
  47. package/dist/commands/workflow.js.map +1 -1
  48. package/dist/daemon/context-writer.d.ts +14 -0
  49. package/dist/daemon/context-writer.d.ts.map +1 -1
  50. package/dist/daemon/context-writer.js +29 -0
  51. package/dist/daemon/context-writer.js.map +1 -1
  52. package/dist/daemon/event-queue.d.ts +4 -0
  53. package/dist/daemon/event-queue.d.ts.map +1 -1
  54. package/dist/daemon/event-queue.js +107 -6
  55. package/dist/daemon/event-queue.js.map +1 -1
  56. package/dist/daemon/file-watcher.d.ts +14 -8
  57. package/dist/daemon/file-watcher.d.ts.map +1 -1
  58. package/dist/daemon/file-watcher.js +78 -41
  59. package/dist/daemon/file-watcher.js.map +1 -1
  60. package/dist/daemon/index.d.ts +1 -0
  61. package/dist/daemon/index.d.ts.map +1 -1
  62. package/dist/daemon/index.js +129 -53
  63. package/dist/daemon/index.js.map +1 -1
  64. package/dist/daemon/jsonl-watcher.d.ts +1 -0
  65. package/dist/daemon/jsonl-watcher.d.ts.map +1 -1
  66. package/dist/daemon/jsonl-watcher.js.map +1 -1
  67. package/dist/daemon/session-notes.d.ts +33 -0
  68. package/dist/daemon/session-notes.d.ts.map +1 -0
  69. package/dist/daemon/session-notes.js +74 -0
  70. package/dist/daemon/session-notes.js.map +1 -0
  71. package/dist/daemon/session-state.d.ts +8 -0
  72. package/dist/daemon/session-state.d.ts.map +1 -1
  73. package/dist/daemon/session-state.js +33 -0
  74. package/dist/daemon/session-state.js.map +1 -1
  75. package/dist/daemon/shutdown.d.ts.map +1 -1
  76. package/dist/daemon/shutdown.js +3 -1
  77. package/dist/daemon/shutdown.js.map +1 -1
  78. package/dist/index.js +2 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/lib/agent-generator.d.ts +4 -0
  81. package/dist/lib/agent-generator.d.ts.map +1 -1
  82. package/dist/lib/agent-generator.js +63 -3
  83. package/dist/lib/agent-generator.js.map +1 -1
  84. package/dist/lib/compile-rules.d.ts +2 -0
  85. package/dist/lib/compile-rules.d.ts.map +1 -1
  86. package/dist/lib/compile-rules.js +2 -0
  87. package/dist/lib/compile-rules.js.map +1 -1
  88. package/dist/lib/compiler.d.ts +21 -1
  89. package/dist/lib/compiler.d.ts.map +1 -1
  90. package/dist/lib/compiler.js +113 -3
  91. package/dist/lib/compiler.js.map +1 -1
  92. package/dist/lib/config.d.ts +3 -0
  93. package/dist/lib/config.d.ts.map +1 -1
  94. package/dist/lib/config.js +17 -2
  95. package/dist/lib/config.js.map +1 -1
  96. package/dist/lib/project.d.ts.map +1 -1
  97. package/dist/lib/project.js +8 -3
  98. package/dist/lib/project.js.map +1 -1
  99. package/dist/lib/skill-generator.d.ts +1 -1
  100. package/dist/lib/skill-generator.d.ts.map +1 -1
  101. package/dist/lib/skill-generator.js +39 -3
  102. package/dist/lib/skill-generator.js.map +1 -1
  103. package/dist/lib/ssot-map.d.ts +31 -0
  104. package/dist/lib/ssot-map.d.ts.map +1 -0
  105. package/dist/lib/ssot-map.js +76 -0
  106. package/dist/lib/ssot-map.js.map +1 -0
  107. package/dist/lib/template.js +1 -0
  108. package/dist/lib/template.js.map +1 -1
  109. package/dist/lib/workflow-state.d.ts +1 -1
  110. package/dist/lib/workflow-state.d.ts.map +1 -1
  111. package/dist/lib/workflow-state.js +1 -1
  112. package/dist/lib/workflow-state.js.map +1 -1
  113. package/dist/types/config.d.ts +10 -1
  114. package/dist/types/config.d.ts.map +1 -1
  115. package/dist/types/config.js +22 -17
  116. package/dist/types/config.js.map +1 -1
  117. package/dist/types/index.d.ts +1 -0
  118. package/dist/types/index.d.ts.map +1 -1
  119. package/dist/types/index.js +1 -0
  120. package/dist/types/index.js.map +1 -1
  121. package/dist/types/meta-index.d.ts +8 -0
  122. package/dist/types/meta-index.d.ts.map +1 -1
  123. package/dist/types/project.d.ts +1 -1
  124. package/dist/types/project.d.ts.map +1 -1
  125. package/dist/types/project.js.map +1 -1
  126. package/dist/types/ssot-map.d.ts +28 -0
  127. package/dist/types/ssot-map.d.ts.map +1 -0
  128. package/dist/types/ssot-map.js +6 -0
  129. package/dist/types/ssot-map.js.map +1 -0
  130. package/package.json +4 -4
  131. package/templates/base/agents/base/tsq-architect.md +2 -2
  132. package/templates/base/agents/base/tsq-librarian.md +45 -0
  133. package/templates/base/knowledge/checklists/plan-quality.md +31 -0
  134. package/templates/base/knowledge/checklists/stability-verification.md +14 -0
  135. package/templates/base/skills/_shared/naming-conventions.md +49 -0
  136. package/templates/base/skills/_template/SKILL.md +33 -17
  137. package/templates/base/skills/audit/SKILL.md +66 -0
  138. package/templates/base/skills/coding/SKILL.md +49 -29
  139. package/templates/base/skills/coding/rules/async-patterns.md +81 -0
  140. package/templates/base/skills/coding/rules/code-organization.md +80 -0
  141. package/templates/base/skills/coding/rules/error-handling.md +76 -0
  142. package/templates/base/skills/coding/rules/type-safety.md +85 -0
  143. package/templates/base/skills/controller/SKILL.md +50 -84
  144. package/templates/base/skills/controller/delegation/developer.md +25 -0
  145. package/templates/base/skills/controller/delegation/librarian.md +33 -0
  146. package/templates/base/skills/controller/delegation/reviewer.md +19 -0
  147. package/templates/base/skills/controller/memory/.gitkeep +0 -0
  148. package/templates/base/skills/controller/triggers/phase-complete.md +25 -0
  149. package/templates/base/skills/controller/triggers/sequence-complete.md +15 -0
  150. package/templates/base/skills/controller/triggers/ssot-changed.md +14 -0
  151. package/templates/base/skills/controller/triggers/task-complete.md +14 -0
  152. package/templates/base/skills/database/SKILL.md +8 -25
  153. package/templates/base/skills/database/rules/query-optimization.md +32 -0
  154. package/templates/base/skills/database/rules/supabase-patterns.md +94 -0
  155. package/templates/base/skills/librarian/SKILL.md +53 -0
  156. package/templates/base/skills/main-session-constraints/SKILL.md +62 -0
  157. package/templates/base/skills/methodology/tdd/SKILL.md +6 -0
  158. package/templates/base/skills/product-audit/SKILL.md +115 -0
  159. package/templates/base/skills/product-audit/checklists/01-security.md +86 -0
  160. package/templates/base/skills/product-audit/checklists/02-performance.md +67 -0
  161. package/templates/base/skills/product-audit/checklists/03-seo.md +46 -0
  162. package/templates/base/skills/product-audit/checklists/04-accessibility.md +66 -0
  163. package/templates/base/skills/product-audit/checklists/05-ui-ux.md +50 -0
  164. package/templates/base/skills/product-audit/checklists/06-architecture.md +53 -0
  165. package/templates/base/skills/product-audit/checklists/07-functional-requirements.md +55 -0
  166. package/templates/base/skills/product-audit/rules/audit-protocol.md +136 -0
  167. package/templates/base/skills/product-audit/rules/false-positive-guard.md +81 -0
  168. package/templates/base/skills/product-audit/rules/scoring-criteria.md +113 -0
  169. package/templates/base/skills/product-audit/templates/improvement-plan-template.md +60 -0
  170. package/templates/base/skills/product-audit/templates/report-template.md +88 -0
  171. package/templates/base/skills/prompt-engineering/SKILL.md +54 -73
  172. package/templates/base/skills/retrospective/SKILL.md +70 -95
  173. package/templates/base/skills/retrospective/references/improvement-template.md +26 -0
  174. package/templates/base/skills/review/SKILL.md +72 -0
  175. package/templates/base/skills/security/SKILL.md +50 -37
  176. package/templates/base/skills/security/rules/auth-patterns.md +62 -0
  177. package/templates/base/skills/security/rules/dependency-security.md +69 -0
  178. package/templates/base/skills/security/rules/input-validation.md +68 -0
  179. package/templates/base/skills/security/rules/secrets-management.md +65 -0
  180. package/templates/base/skills/spec/SKILL.md +60 -0
  181. package/templates/base/skills/stability-verification/SKILL.md +64 -0
  182. package/templates/base/skills/stability-verification/references/release-checklist.md +34 -0
  183. package/templates/base/skills/stability-verification/references/security-fix-patterns.md +112 -0
  184. package/templates/base/skills/stability-verification/rules/verification-layers.md +67 -0
  185. package/templates/base/skills/stability-verification/rules/verification-workflow.md +69 -0
  186. package/templates/base/skills/stability-verification/scripts/verify.sh +294 -0
  187. package/templates/base/skills/testing/SKILL.md +33 -25
  188. package/templates/base/skills/testing/references/e2e-stability.md +33 -0
  189. package/templates/base/skills/tsq-cli/SKILL.md +73 -0
  190. package/templates/base/skills/tsq-cli/references/cli-reference.md +92 -0
  191. package/templates/base/skills/tsq-protocol/SKILL.md +41 -25
  192. package/templates/base/skills/typescript/SKILL.md +3 -9
  193. package/templates/base/timsquad/ssot/test-spec.template.md +11 -1
  194. package/templates/base/timsquad/ssot-map.template.yaml +41 -0
  195. package/templates/platforms/claude-code/rules/api-conventions.md +12 -0
  196. package/templates/platforms/claude-code/rules/build-gate.md +28 -0
  197. package/templates/platforms/claude-code/rules/completion-verification.md +30 -0
  198. package/templates/platforms/claude-code/rules/context-monitor.md +23 -0
  199. package/templates/platforms/claude-code/rules/librarian-constraints.md +11 -0
  200. package/templates/platforms/claude-code/rules/plan-review.md +45 -0
  201. package/templates/platforms/claude-code/rules/quality-guards.md +43 -0
  202. package/templates/platforms/claude-code/rules/session-notes.md +18 -0
  203. package/templates/platforms/claude-code/rules/skill-suggest.md +27 -0
  204. package/templates/platforms/claude-code/rules/test-conventions.md +13 -0
  205. package/templates/platforms/claude-code/scripts/build-gate.sh +73 -0
  206. package/templates/platforms/claude-code/scripts/change-scope-guard.sh +113 -0
  207. package/templates/platforms/claude-code/scripts/completion-guard.sh +122 -24
  208. package/templates/platforms/claude-code/scripts/context-restore.sh +68 -0
  209. package/templates/platforms/claude-code/scripts/e2e-commit-gate.sh +70 -0
  210. package/templates/platforms/claude-code/scripts/e2e-marker.sh +51 -0
  211. package/templates/platforms/claude-code/scripts/phase-guard.sh +5 -5
  212. package/templates/platforms/claude-code/scripts/pre-compact.sh +70 -0
  213. package/templates/platforms/claude-code/scripts/safe-guard.sh +83 -0
  214. package/templates/platforms/claude-code/scripts/skill-inject.sh +216 -0
  215. package/templates/platforms/claude-code/scripts/skill-rules.json +95 -0
  216. package/templates/platforms/claude-code/scripts/skill-suggest.sh +105 -0
  217. package/templates/platforms/claude-code/scripts/subagent-inject.sh +53 -0
  218. package/templates/platforms/claude-code/settings.json +71 -9
@@ -0,0 +1,15 @@
1
+ # Sequence Complete Trigger
2
+
3
+ 시퀀스 내 모든 태스크 완료 시 controller가 수행하는 행동 규칙.
4
+
5
+ ## 행동
6
+
7
+ 1. **통합 테스트**: `npm run test:integration` 실행 확인
8
+ 2. **빌드 검증**: `tsc --noEmit` 타입 체크 확인
9
+ 3. **L2 로그**: 데몬이 L2 시퀀스 로그를 자동 생성했는지 확인
10
+ 4. **다음 시퀀스**: 동일 Phase 내 다음 시퀀스가 있으면 위임 준비
11
+
12
+ ## 게이트 조건
13
+
14
+ - 통합 테스트 실패 시: 다음 시퀀스 진행 차단 + 수정 안내
15
+ - 빌드 실패 시: 다음 시퀀스 진행 차단
@@ -0,0 +1,14 @@
1
+ # SSOT Changed Trigger
2
+
3
+ SSOT 문서가 변경되었을 때 controller가 수행하는 행동 규칙.
4
+
5
+ ## 행동
6
+
7
+ 1. **자동 컴파일 확인**: 데몬이 `tsq compile build` 자동 실행했는지 확인
8
+ 2. **Stale 체크**: `.compile-manifest.json` hash가 최신인지 확인
9
+ 3. **영향 분석**: 변경된 SSOT 문서가 현재 작업 중인 태스크에 영향을 미치는지 판단
10
+
11
+ ## 데몬 역할
12
+
13
+ - 데몬이 SSOT 파일 변경을 감지하면 `tsq compile build` 자동 실행 (기계적)
14
+ - Controller는 컴파일 결과만 확인하고, AI 판단이 필요한 문서 갱신은 Librarian에게 위임
@@ -0,0 +1,14 @@
1
+ # Task Complete Trigger
2
+
3
+ 태스크 완료 시 controller가 수행하는 행동 규칙.
4
+
5
+ ## 행동
6
+
7
+ 1. **Unit Test 확인**: 변경 파일에 대한 단위 테스트가 실행되었는지 확인
8
+ 2. **L1 로그 확인**: 데몬이 L1 태스크 로그를 자동 생성했는지 확인
9
+ 3. **다음 태스크 확인**: 동일 시퀀스 내 다음 태스크가 있으면 위임 준비
10
+
11
+ ## 게이트 조건
12
+
13
+ - 단위 테스트 미실행 시: 경고 메시지 + 테스트 실행 안내
14
+ - L1 로그 미생성 시: `tsq log enrich` 수동 실행 안내
@@ -11,6 +11,12 @@ user-invocable: false
11
11
 
12
12
  # Database Methodology
13
13
 
14
+ ## Resources
15
+
16
+ | Priority | Type | Resource | Description |
17
+ |----------|------|----------|-------------|
18
+ | HIGH | rule | [supabase-patterns](rules/supabase-patterns.md) | JSONB, RLS, Edge Runtime, USE_MOCK, 커넥션 풀링 |
19
+
14
20
  ## 정규화 기준
15
21
 
16
22
  | 정규형 | 적용 기준 | 예외 허용 조건 |
@@ -39,32 +45,9 @@ user-invocable: false
39
45
  - 대응: [트리거/애플리케이션 로직]
40
46
  ```
41
47
 
42
- ## 쿼리 최적화 프로세스
43
-
44
- ### 1. 분석
45
-
46
- ```sql
47
- EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
48
- ```
49
-
50
- ### 2. 체크리스트
51
-
52
- | 항목 | 확인 내용 |
53
- |-----|----------|
54
- | Seq Scan | 대용량 테이블에 순차 스캔? |
55
- | Index 사용 | 적절한 인덱스 사용 중? |
56
- | Join 순서 | 작은 테이블 먼저 조인? |
57
- | N+1 | 루프 내 쿼리 실행? |
58
- | 불필요 컬럼 | SELECT * 사용? |
59
-
60
- ### 3. 최적화 기법
48
+ ## 쿼리 최적화
61
49
 
62
- | 문제 | 해결책 |
63
- |-----|-------|
64
- | 느린 조인 | 인덱스 추가, 조인 순서 변경 |
65
- | N+1 | Eager Loading, JOIN |
66
- | 대용량 스캔 | 파티셔닝, 커버링 인덱스 |
67
- | 동시성 | 적절한 격리 수준 |
50
+ 상세 프로세스(EXPLAIN 분석, 체크리스트, 기법)는 `rules/query-optimization.md` 참조.
68
51
 
69
52
  ## 마이그레이션 규칙
70
53
 
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: Query Optimization Process
3
+ impact: MEDIUM
4
+ tags: database, query, optimization, explain
5
+ ---
6
+
7
+ # Query Optimization Process
8
+
9
+ ## 1. 분석
10
+
11
+ ```sql
12
+ EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
13
+ ```
14
+
15
+ ## 2. 체크리스트
16
+
17
+ | 항목 | 확인 내용 |
18
+ |-----|----------|
19
+ | Seq Scan | 대용량 테이블에 순차 스캔? |
20
+ | Index 사용 | 적절한 인덱스 사용 중? |
21
+ | Join 순서 | 작은 테이블 먼저 조인? |
22
+ | N+1 | 루프 내 쿼리 실행? |
23
+ | 불필요 컬럼 | SELECT * 사용? |
24
+
25
+ ## 3. 최적화 기법
26
+
27
+ | 문제 | 해결책 |
28
+ |-----|-------|
29
+ | 느린 조인 | 인덱스 추가, 조인 순서 변경 |
30
+ | N+1 | Eager Loading, JOIN |
31
+ | 대용량 스캔 | 파티셔닝, 커버링 인덱스 |
32
+ | 동시성 | 적절한 격리 수준 |
@@ -0,0 +1,94 @@
1
+ ---
2
+ title: Supabase Patterns
3
+ impact: HIGH
4
+ tags: supabase, database, edge-runtime, rls
5
+ ---
6
+
7
+ # Supabase Patterns
8
+
9
+ ## JSONB 쿼리
10
+
11
+ ```sql
12
+ -- .contains() 사용 시 주의: GIN 인덱스 필수
13
+ CREATE INDEX idx_data_gin ON records USING GIN (data);
14
+
15
+ -- 올바른 사용
16
+ SELECT * FROM records WHERE data @> '{"status": "active"}'::jsonb;
17
+
18
+ -- 피해야 할 패턴: 중첩 키 직접 접근 (인덱스 미사용)
19
+ -- SELECT * FROM records WHERE data->'nested'->'key' = '"value"';
20
+ -- 대안: jsonb_path_query 또는 표현식 인덱스
21
+ ```
22
+
23
+ ## RLS (Row Level Security)
24
+
25
+ ```sql
26
+ -- 항상 RLS 활성화
27
+ ALTER TABLE user_data ENABLE ROW LEVEL SECURITY;
28
+
29
+ -- 서비스 키와 anon 키 구분
30
+ -- anon: 클라이언트 사이드, RLS 적용
31
+ -- service_role: 서버 사이드, RLS 바이패스
32
+
33
+ -- 정책 패턴
34
+ CREATE POLICY "Users can view own data"
35
+ ON user_data FOR SELECT
36
+ USING (auth.uid() = user_id);
37
+
38
+ CREATE POLICY "Users can insert own data"
39
+ ON user_data FOR INSERT
40
+ WITH CHECK (auth.uid() = user_id);
41
+ ```
42
+
43
+ ## Edge Runtime 초기화
44
+
45
+ ```typescript
46
+ // Edge Runtime에서 Supabase 클라이언트 초기화
47
+ // 반드시 함수 내부에서 생성 (모듈 레벨 싱글톤 금지)
48
+ import { createClient } from '@supabase/supabase-js';
49
+
50
+ export function getSupabase() {
51
+ return createClient(
52
+ process.env.SUPABASE_URL!,
53
+ process.env.SUPABASE_ANON_KEY!
54
+ );
55
+ }
56
+ ```
57
+
58
+ ## USE_MOCK 패턴
59
+
60
+ ```typescript
61
+ // 테스트/개발 환경에서 Supabase Mock
62
+ const USE_MOCK = process.env.USE_MOCK_DB === 'true';
63
+
64
+ function getClient() {
65
+ if (USE_MOCK) {
66
+ return createMockClient(); // 인메모리 구현
67
+ }
68
+ return createClient(SUPABASE_URL, SUPABASE_KEY);
69
+ }
70
+ ```
71
+
72
+ ## Edge Runtime 커넥션 풀링
73
+
74
+ - Supabase는 PgBouncer 내장 (포트 6543)
75
+ - Edge Functions에서는 항상 풀링 URL 사용
76
+ - `connection_limit=1` 설정 권장 (Edge 인스턴스별)
77
+ - 장기 트랜잭션 피하기 (풀 고갈 방지)
78
+
79
+ ```
80
+ # 직접 연결 (마이그레이션용)
81
+ DATABASE_URL=postgres://...@db.xxx.supabase.co:5432/postgres
82
+
83
+ # 풀링 연결 (애플리케이션용)
84
+ DATABASE_URL=postgres://...@db.xxx.supabase.co:6543/postgres?pgbouncer=true
85
+ ```
86
+
87
+ ## 소유권 경계
88
+
89
+ | 영역 | 담당 | 설명 |
90
+ |------|------|------|
91
+ | 스키마 설계 | Database 스킬 | 테이블, 인덱스, RLS |
92
+ | Prisma 스키마 | Prisma 스킬 | schema.prisma, 마이그레이션 |
93
+ | 쿼리 로직 | Coding 스킬 | 비즈니스 로직 내 DB 호출 |
94
+ | 성능 튜닝 | Database 스킬 | EXPLAIN, 인덱스 최적화 |
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: librarian
3
+ description: |
4
+ Phase 종합 기록, SSOT 상태 갱신, 문서 작성 전담 스킬.
5
+ Phase 완료 시 controller가 호출하여 종합 리포트를 생성한다.
6
+ Use when: Phase 완료 후 기록, 리포트 작성, SSOT 상태 점검, 문서 갱신, 로그 정리 시.
7
+ version: "1.0.0"
8
+ tags: [librarian, recording, documentation, phase-report]
9
+ depends_on: [tsq-protocol]
10
+ conflicts_with: []
11
+ user-invocable: false
12
+ context: fork
13
+ allowed-tools: Read, Write, Edit, Grep, Glob, Bash
14
+ ---
15
+
16
+ # Librarian (Phase 기록 전담)
17
+
18
+ Phase 종합 기록 전담. 문서 작성/갱신만 수행하고 소스 코드를 수정하지 않는다.
19
+
20
+ ## Contract
21
+
22
+ - **Trigger**: Phase 완료 시 controller가 호출 (triggers/phase-complete.md)
23
+ - **Input**: L1/L2/L3 로그 + SSOT 현재 상태 + Phase 정보
24
+ - **Output**: Phase 종합 리포트 + SSOT stale 보고 + context note
25
+ - **Error**: 기록 실패 시 에러 리포트만 생성 (프로세스 차단 안 함)
26
+ - **Dependencies**: tsq-protocol
27
+
28
+ ## Protocol
29
+
30
+ 1. **L1/L2 로그 수집**: `.timsquad/logs/` 하위 해당 Phase 로그 전체 읽기
31
+ 2. **SSOT 상태 확인**: `.compile-manifest.json` hash 비교 → stale 목록 식별
32
+ 3. **종합 리포트 작성**: `.timsquad/reports/{phase}-report.md` 생성
33
+ - 완료된 시퀀스/태스크 요약
34
+ - 에이전트별 기여 분석
35
+ - 발견된 이슈 및 피드백 분류
36
+ 4. **Context Note 생성**: `docs/sprint/` 하위에 다음 Phase 맥락 문서
37
+ - 이번 Phase 핵심 결정사항
38
+ - 미해결 항목 (carry-over)
39
+ - 다음 Phase 주의사항
40
+
41
+ ## Constraints
42
+
43
+ - **소스 코드(src/, lib/, app/) 수정 절대 금지**
44
+ - `.timsquad/` 및 `docs/` 내 문서 작성·갱신만 허용
45
+ - 기록, 분석, 리포트 작성만 수행
46
+
47
+ ## Verification
48
+
49
+ | Check | Command | Pass Criteria |
50
+ |-------|---------|---------------|
51
+ | 리포트 생성 | `ls .timsquad/reports/{phase}-report.md` | 파일 존재 |
52
+ | SSOT stale | `.compile-manifest.json` 확인 | stale 목록 출력 |
53
+ | 소스 무변경 | `git diff --name-only src/ lib/ app/` | 변경 없음 |
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: main-session-constraints
3
+ description: |
4
+ 메인세션(PM 역할) 제약 스킬. 메인세션에서의 작업 원칙, 금지사항, 위임 규칙을 정의한다.
5
+ CLAUDE.md에서 분리된 작업 원칙을 포함. 메인세션 시작 시 자동 매칭.
6
+ Use when: 메인세션(PM), 요구사항 분석, 작업 위임, 프로젝트 관리
7
+ version: "1.0.0"
8
+ tags: [constraints, main-session, pm, rules]
9
+ depends_on: [tsq-protocol, controller]
10
+ conflicts_with: []
11
+ user-invocable: false
12
+ ---
13
+
14
+ # Main Session Constraints
15
+
16
+ 메인세션(PM 역할)에서의 작업 원칙과 제약사항.
17
+
18
+ ## Philosophy
19
+
20
+ - 메인세션은 PM 역할: 분석, 계획, 위임이 핵심
21
+ - 구현은 서브에이전트에게 위임 (직접 구현 최소화)
22
+ - 요구사항에 여러 해석이 있으면 선택지를 제시
23
+
24
+ ## Contract
25
+
26
+ - **Trigger**: 메인세션 시작 시 자동 활성
27
+ - **Input**: 사용자 요구사항
28
+ - **Output**: 분석 결과 + 위임 계획 또는 직접 수행
29
+ - **Error**: 요구사항 모호 시 선택지 제시
30
+ - **Dependencies**: tsq-protocol, controller
31
+
32
+ ## Protocol
33
+
34
+ 1. **요구사항 분석**: 사용자 요구 파악 + 모호함 해소
35
+ 2. **스킬 확인**: 관련 스킬 존재 여부 확인
36
+ 3. **위임 판단**: 서브에이전트 위임 vs 직접 수행 결정
37
+ 4. **실행**: controller 스킬 기반 위임 또는 직접 수행
38
+
39
+ ## Verification
40
+
41
+ | Check | Command | Pass Criteria |
42
+ |-------|---------|---------------|
43
+ | spec 존재 | SSOT 확인 | 관련 스펙 존재 |
44
+ | 검증 기준 | 테스트/확인 방법 | 구현 전 명시됨 |
45
+ | SCR 준수 | 코드 리뷰 | 단일 책임 원칙 |
46
+
47
+ ## Quick Rules
48
+
49
+ ### 작업 원칙
50
+ - 구현 전에 검증 기준(테스트 or 확인 방법)을 먼저 명시
51
+ - 요구사항 모호 시 조용히 선택하지 말고 선택지 제시
52
+ - Quick Mode(`tsq q`)와 Full Mode(`tsq f`) 적절히 구분
53
+
54
+ ### 위임 규칙
55
+ - 구현/테스트/리뷰는 서브에이전트에게 Task()로 위임
56
+ - 간단한 수정(Quick Mode)은 직접 수행 가능
57
+ - 위임 시 controller 스킬의 Delegation Process 준수
58
+
59
+ ### 금지사항
60
+ - 스펙 없이 대규모 구현 시작
61
+ - 서브에이전트 결과를 검증 없이 수용
62
+ - Phase gate 조건 미충족 시 다음 Phase 진행
@@ -4,6 +4,12 @@ description: Test-Driven Development 방법론 가이드라인
4
4
  version: "1.0.0"
5
5
  tags: [tdd, methodology, testing]
6
6
  user-invocable: false
7
+ hooks:
8
+ PreToolUse:
9
+ - matcher: "Write|Edit"
10
+ hooks:
11
+ - type: prompt
12
+ prompt: "TDD: 이 파일에 대한 테스트가 먼저 작성되었는지 확인하라. 테스트 없이 구현 코드를 작성하면 Red-Green-Refactor 사이클을 위반한다."
7
13
  ---
8
14
 
9
15
  # TDD (Test-Driven Development)
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: product-audit
3
+ description: |
4
+ 통합 제품 감사 스킬. 7개 영역(Security, Performance, SEO, Accessibility, UI/UX, Architecture, Functional)을
5
+ 정량 스코어링으로 평가하고, 6단계 사이클(Plan→Audit→Report→Remediation Plan→Fix→Re-audit)로 운영한다.
6
+ Use when: Phase gate 전 품질 확인, 보안 감사, 성능 리뷰, 접근성 점검, 릴리스 전 최종 검증, 코드 감사 요청 시.
7
+ version: "2.0.0"
8
+ tags: [audit, quality, security, performance, accessibility, seo]
9
+ depends_on: [coding, testing]
10
+ conflicts_with: []
11
+ user-invocable: false
12
+ ---
13
+
14
+ # Product Audit
15
+
16
+ 7개 영역을 체계적으로 평가하고, 정량 스코어와 개선 사이클로 품질을 추적한다.
17
+
18
+ ## Philosophy
19
+
20
+ - 정량 70% + 정성 30% 가중 평균으로 객관적 평가
21
+ - 모든 항목에 `source: estimated | measured` 명시
22
+ - False Positive는 FP Registry로 관리하여 재감사 시 노이즈 제거
23
+ - Closed-loop: 감사 → 개선 → 재감사 사이클로 품질 수렴
24
+
25
+ ## Contract
26
+
27
+ - **Trigger**: 감사 태스크, Phase gate 전, 릴리스 전 검증
28
+ - **Input**: 감사 범위 + FP Registry + 이전 리포트 (재감사 시)
29
+ - **Output**: 정량 스코어 보고서 + severity 분류 + 개선 계획
30
+ - **Error**: Critical 항목 존재 시 gate 차단
31
+ - **Dependencies**: coding, testing
32
+
33
+ ## Protocol — 6단계 사이클
34
+
35
+ ### Phase 1: Plan (감사 계획)
36
+ 감사 범위, 대상 영역, 기준을 결정하고 계획을 저장한다.
37
+ - 프로젝트 타입에 따라 영역별 가중치 조정
38
+ - FP Registry 로딩, baseline(이전 감사 결과) 확인
39
+ - 계획을 문서로 저장 → 유저 컨펌 후 진행
40
+
41
+ ### Phase 2: Audit (감사 실행)
42
+ 계획에 따라 7개 영역을 순회하며 체크리스트 기반 평가.
43
+ - 각 항목: pass / fail / warning / skip + source 명시
44
+ - 자동화 가능 항목은 도구 실행 (Lighthouse, axe-core, eslint 등)
45
+ - 수동 항목은 코드 리뷰로 판정
46
+
47
+ ### Phase 3: Report (보고)
48
+ 감사 결과를 정량 스코어로 집계하고 개선점을 보고한다.
49
+ - 영역별 점수 + 가중 평균 종합 점수 산출
50
+ - severity별 finding 분류 (Critical/High/Medium/Low)
51
+ - 이전 감사 대비 diff (개선/악화 추적)
52
+
53
+ ### Phase 4: Remediation Plan (개선 계획)
54
+ 보고서를 토대로 개선 계획을 수립한다.
55
+ - severity 기준 우선순위 정렬
56
+ - 개선 계획 문서 작성 → 유저 컨펌 → 저장
57
+ - 컨펌 없이 개선 실시하지 않음
58
+
59
+ ### Phase 5: Fix (개선 실시)
60
+ 컨펌된 계획에 따라 개선을 실행하고 테스트한다.
61
+ - 개선 완료 후 관련 테스트 실행 (unit + integration)
62
+ - E2E 테스트까지 통과 확인
63
+ - 테스트 실패 시 수정 반복
64
+
65
+ ### Phase 6: Re-audit (재감사)
66
+ 개선 완료 후 동일 기준으로 재감사를 실시한다.
67
+ - Phase 2와 동일 절차, 이전 결과와 diff 비교
68
+ - Gate 기준 충족 시 완료, 미충족 시 Phase 4로 복귀
69
+
70
+ ## Verification
71
+
72
+ | Check | Method | Pass Criteria |
73
+ |-------|--------|---------------|
74
+ | 종합 점수 | 가중 평균 | >= 60점 (gate) |
75
+ | Critical 항목 | severity 확인 | 0건 |
76
+ | source 필드 | 리포트 확인 | 모든 항목 존재 |
77
+ | 재감사 diff | 이전 대비 비교 | PASS→FAIL 전환 0건 |
78
+
79
+ ## 7개 감사 영역
80
+
81
+ | # | 영역 | 핵심 기준 | 체크리스트 |
82
+ |---|------|-----------|-----------|
83
+ | 01 | Security | OWASP Top 10:2025, ASVS v5, CWE Top 25, CVSS 4.0 | [01-security](checklists/01-security.md) |
84
+ | 02 | Performance | Core Web Vitals (LCP/INP/CLS), Lighthouse v12 | [02-performance](checklists/02-performance.md) |
85
+ | 03 | SEO | E-E-A-T, AI Overview, Schema.org, Mobile-first | [03-seo](checklists/03-seo.md) |
86
+ | 04 | Accessibility | WCAG 2.2 AA, EAA 2025, WAI-ARIA APG | [04-accessibility](checklists/04-accessibility.md) |
87
+ | 05 | UI/UX | Nielsen 10 Heuristics, 반응형, 디자인 시스템 | [05-ui-ux](checklists/05-ui-ux.md) |
88
+ | 06 | Architecture & DB | ISO 25010:2023, 데이터 아키텍처, API 설계 | [06-architecture](checklists/06-architecture.md) |
89
+ | 07 | Functional & Requirements | RTM, 테스트 커버리지, 요구사항 추적 | [07-functional-requirements](checklists/07-functional-requirements.md) |
90
+
91
+ ## Severity & SLA
92
+
93
+ | Severity | Action | SLA |
94
+ |----------|--------|-----|
95
+ | Critical | 즉시 수정, 배포 차단 | 같은 Phase |
96
+ | High | 다음 시퀀스 내 수정 | 현재 Phase |
97
+ | Medium | 백로그 등록 | 다음 Phase |
98
+ | Low | 선택적 개선 | 스프린트 내 |
99
+
100
+ ## Resources
101
+
102
+ | Priority | Type | Resource | Description |
103
+ |----------|------|----------|-------------|
104
+ | HIGH | rule | [audit-protocol](rules/audit-protocol.md) | 6단계 절차 상세, 입출력, 도구 연동 |
105
+ | HIGH | rule | [scoring-criteria](rules/scoring-criteria.md) | 영역별 가중치, 점수 산출, gate 기준 |
106
+ | HIGH | rule | [false-positive-guard](rules/false-positive-guard.md) | FP Registry, 오탐 방지 규칙, 계층적 검증 |
107
+ | MEDIUM | checklist | [01-security](checklists/01-security.md) | OWASP 2025 + ASVS v5 + CWE Top 25 |
108
+ | MEDIUM | checklist | [02-performance](checklists/02-performance.md) | CWV 2026 + Lighthouse v12 |
109
+ | MEDIUM | checklist | [03-seo](checklists/03-seo.md) | E-E-A-T + AI Overview + Schema |
110
+ | MEDIUM | checklist | [04-accessibility](checklists/04-accessibility.md) | WCAG 2.2 AA + EAA 2025 |
111
+ | MEDIUM | checklist | [05-ui-ux](checklists/05-ui-ux.md) | Nielsen Heuristics + 반응형 + 디자인 시스템 |
112
+ | MEDIUM | checklist | [06-architecture](checklists/06-architecture.md) | ISO 25010 + DB + API 설계 |
113
+ | MEDIUM | checklist | [07-functional-requirements](checklists/07-functional-requirements.md) | RTM + 테스트 커버리지 |
114
+ | LOW | template | [report-template](templates/report-template.md) | 감사 보고서 양식 |
115
+ | LOW | template | [improvement-plan-template](templates/improvement-plan-template.md) | 개선 계획 양식 |
@@ -0,0 +1,86 @@
1
+ ---
2
+ title: Security Checklist
3
+ area: "01"
4
+ tags: security, owasp, asvs, cwe
5
+ standards: OWASP Top 10:2025, ASVS v5.0, CWE Top 25 2025, CVSS 4.0
6
+ ---
7
+
8
+ # 01. Security Checklist
9
+
10
+ ## A. Access Control & Authorization
11
+
12
+ | # | 항목 | Severity | 근거 |
13
+ |---|------|:--------:|------|
14
+ | A-1 | 서버 측 접근 제어 — 모든 요청에 적용, 클라이언트 측 검증에 의존하지 않음 | CRITICAL | OWASP A01, CWE-862 |
15
+ | A-2 | Deny-by-default — 명시적 허용만 접근 가능 | CRITICAL | OWASP A01, ASVS v5 V4 |
16
+ | A-3 | 객체 수준 권한 검증 (BOLA/IDOR 방지) — 모든 API 엔드포인트 | CRITICAL | API1:2023, CWE-639 |
17
+ | A-4 | 함수 수준 권한 검증 (BFLA 방지) — admin vs user 분리 | CRITICAL | API5:2023, CWE-284 |
18
+ | A-5 | 속성 수준 권한 검증 — mass assignment / 과도한 데이터 노출 방지 | HIGH | API3:2023 |
19
+ | A-6 | CORS 명시적 allowlist — 인증 엔드포인트에 wildcard origin 금지 | HIGH | OWASP A01, CWE-352 |
20
+ | A-7 | CSRF 방어 — 상태 변경 요청에 토큰 또는 SameSite 쿠키 | HIGH | CWE-352 |
21
+ | A-8 | 경로 탐색 방지 — 파일 경로 검증 및 정규화 | HIGH | CWE-22 |
22
+
23
+ ## B. Authentication & Session
24
+
25
+ | # | 항목 | Severity | 근거 |
26
+ |---|------|:--------:|------|
27
+ | B-1 | 비밀번호 정책: 최소 8자, 유출 DB 대조, 구성 규칙 강제 금지 | CRITICAL | NIST SP 800-63B, ASVS v5 V2 |
28
+ | B-2 | MFA 구현 — 피싱 저항 방식 우선 (passkeys, 하드웨어 키) | CRITICAL | NIST SP 800-63-4 |
29
+ | B-3 | JWT 검증: 만료, 발급자, 대상 확인, algorithm "none" 거부 | CRITICAL | API2:2023 |
30
+ | B-4 | 민감 작업 시 재인증 (비밀번호 변경, 결제 등) | HIGH | ASVS v5 V2 |
31
+ | B-5 | 인증 실패 시 계정 잠금 / 속도 제한 | HIGH | CWE-306 |
32
+ | B-6 | 세션 토큰: 암호학적 무작위 생성, Secure·HttpOnly·SameSite 플래그 | HIGH | ASVS v5 V3 |
33
+ | B-7 | OAuth 2.1 + PKCE 필수, implicit/hybrid flow 제거 | HIGH | OAuth 2.1 |
34
+ | B-8 | 짧은 수명 access token (5-15분) + refresh token rotation | HIGH | OAuth 2.1, ASVS v5 |
35
+
36
+ ## C. Injection Prevention
37
+
38
+ | # | 항목 | Severity | 근거 |
39
+ |---|------|:--------:|------|
40
+ | C-1 | Parameterized query / prepared statement — 모든 DB 접근 | CRITICAL | CWE-89 |
41
+ | C-2 | 컨텍스트 인식 출력 인코딩 — HTML/JS/CSS 내 사용자 데이터 | CRITICAL | CWE-79 |
42
+ | C-3 | 서버 측 입력 검증 — allowlist 기반 | CRITICAL | OWASP A05, ASVS v5 V5 |
43
+ | C-4 | OS 명령 삽입 방지 — 사용자 입력 포함 쉘 명령 금지, 안전한 API 사용 | CRITICAL | CWE-78 |
44
+ | C-5 | 코드 삽입 방지 — eval() 등에 사용자 데이터 금지 | CRITICAL | CWE-94 |
45
+ | C-6 | 역직렬화 공격 방지 — 신뢰하지 않는 직렬화 데이터 거부, JSON 사용 | HIGH | CWE-502 |
46
+ | C-7 | Content Security Policy (CSP) 헤더 설정 | HIGH | OWASP A05 |
47
+ | C-8 | 파일 업로드 제한 — 타입·크기·내용 검증, 웹루트 외부 저장, 파일명 변경 | HIGH | CWE-434 |
48
+
49
+ ## D. Security Misconfiguration
50
+
51
+ | # | 항목 | Severity | 근거 |
52
+ |---|------|:--------:|------|
53
+ | D-1 | 기본 자격증명, 샘플 앱, 불필요 기능 프로덕션에서 제거 | CRITICAL | OWASP A02, API8:2023 |
54
+ | D-2 | 디렉토리 목록, 스택 트레이스, 상세 오류 메시지 비활성화 | HIGH | OWASP A02 |
55
+ | D-3 | HTTPS 전면 적용 + HSTS (includeSubDomains, preload) | HIGH | OWASP A02 |
56
+ | D-4 | 보안 헤더: X-Content-Type-Options, X-Frame-Options, Referrer-Policy | MEDIUM | OWASP A02 |
57
+ | D-5 | 클라우드 스토리지/버킷 권한 최소화, IAM least-privilege | CRITICAL | OWASP A02 |
58
+
59
+ ## E. Cryptography
60
+
61
+ | # | 항목 | Severity | 근거 |
62
+ |---|------|:--------:|------|
63
+ | E-1 | 민감 데이터 암호화 — 저장: AES-256, 전송: TLS 1.2+ (1.3 권장) | CRITICAL | OWASP A04 |
64
+ | E-2 | 비밀번호 해싱: Argon2id, bcrypt, scrypt (적절한 work factor) | CRITICAL | ASVS v5 V2 |
65
+ | E-3 | 민감 데이터를 로그·URL·클라이언트 저장소에 저장 금지 | HIGH | CWE-200 |
66
+ | E-4 | 보안 관련 값은 암호학적 난수 생성기 사용 | HIGH | OWASP A04 |
67
+ | E-5 | 폐기된 프로토콜 비활성화 (SSLv3, TLS 1.0/1.1, 약한 암호 스위트) | HIGH | OWASP A04 |
68
+
69
+ ## F. Supply Chain
70
+
71
+ | # | 항목 | Severity | 근거 |
72
+ |---|------|:--------:|------|
73
+ | F-1 | 의존성 버전 고정 + lock 파일 + 체크섬/서명 검증 | HIGH | OWASP A03 |
74
+ | F-2 | 의존성 취약점 지속 스캔 (Dependabot, Snyk 등) | HIGH | OWASP A03 |
75
+ | F-3 | Typosquatting 및 dependency confusion 공격 모니터링 | HIGH | OWASP A03 |
76
+ | F-4 | SBOM 생성 (SPDX 또는 CycloneDX) — 빌드마다 | HIGH | CISA 2025, EU CRA |
77
+ | F-5 | 서드파티 API 무결성 검증 — upstream 무조건 신뢰 금지 | HIGH | API10:2023 |
78
+
79
+ ## G. Error Handling & Logging
80
+
81
+ | # | 항목 | Severity | 근거 |
82
+ |---|------|:--------:|------|
83
+ | G-1 | 안전한 실패 — 오류 시 접근 거부, "fail open" 금지 | CRITICAL | OWASP A10 |
84
+ | G-2 | 예외 시 민감 정보 노출 방지 (스택 트레이스, 내부 경로, SQL) | HIGH | OWASP A10, CWE-200 |
85
+ | G-3 | 인증 이벤트, 접근 제어 실패, 입력 검증 실패 로깅 | HIGH | OWASP A09 |
86
+ | G-4 | 로그 무결성 보호 — 로그 삽입 방지 | MEDIUM | OWASP A09 |
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: Performance Checklist
3
+ area: "02"
4
+ tags: performance, core-web-vitals, lighthouse
5
+ standards: Core Web Vitals 2026, Lighthouse v12
6
+ ---
7
+
8
+ # 02. Performance Checklist
9
+
10
+ ## Core Web Vitals 기준값
11
+
12
+ | Metric | Good | Needs Improvement | Poor |
13
+ |--------|:----:|:------------------:|:----:|
14
+ | LCP (Largest Contentful Paint) | <= 2.5s | 2.5s - 4.0s | > 4.0s |
15
+ | INP (Interaction to Next Paint) | <= 200ms | 200ms - 500ms | > 500ms |
16
+ | CLS (Cumulative Layout Shift) | <= 0.1 | 0.1 - 0.25 | > 0.25 |
17
+
18
+ 측정: 75th percentile, 28일 필드 데이터 기준.
19
+
20
+ ## A. Core Web Vitals
21
+
22
+ | # | 항목 | Severity | 근거 |
23
+ |---|------|:--------:|------|
24
+ | A-1 | LCP <= 2.5s (모바일 75th percentile) | CRITICAL | CWV — 모바일 페이지 38% 미통과 |
25
+ | A-2 | INP <= 200ms — 모든 인터랙션 응답 | CRITICAL | CWV — 43% 사이트 미통과, 가장 빈번한 실패 |
26
+ | A-3 | CLS <= 0.1 — 이미지/광고 공간 예약 (width/height, aspect-ratio) | CRITICAL | CWV |
27
+ | A-4 | Long task (>50ms) 분할 — `scheduler.yield()` 또는 Web Worker 활용 | HIGH | INP 최적화 |
28
+ | A-5 | 페이지 로드 중 인터랙션 INP 특별 관리 (로드 후 대비 2.6배 악화) | HIGH | CWV 필드 데이터 |
29
+
30
+ ## B. Bundle & Loading
31
+
32
+ | # | 항목 | Severity | 근거 |
33
+ |---|------|:--------:|------|
34
+ | B-1 | 초기 JS 번들 (gzip): <= 300-350KB | HIGH | 100KB당 3G에서 +3.2s |
35
+ | B-2 | Critical-path 리소스: <= 170KB | HIGH | 제한된 네트워크 기준 |
36
+ | B-3 | Code splitting + tree-shaking 적용 | HIGH | 번들 최적화 |
37
+ | B-4 | Below-the-fold 컴포넌트 lazy loading | HIGH | 초기 로딩 최적화 |
38
+ | B-5 | 서드파티 스크립트 지연 로딩 (Partytown 등) | MEDIUM | TBT 감소 |
39
+ | B-6 | SSR/RSC 적용 (콘텐츠 중심 페이지) — RSC는 클라이언트 JS 40-60% 감소 | MEDIUM | TTI 최적화 |
40
+
41
+ ## C. Rendering
42
+
43
+ | # | 항목 | Severity | 근거 |
44
+ |---|------|:--------:|------|
45
+ | C-1 | 불필요한 리렌더 방지 (React.memo, useMemo, useCallback) | MEDIUM | 렌더링 성능 |
46
+ | C-2 | DOM 복잡도 관리 — 과도한 DOM은 스타일 재계산·페인트 지연 | MEDIUM | 렌더링 성능 |
47
+ | C-3 | 이벤트 핸들러 최적화 — debounce, layout thrashing 방지 | MEDIUM | INP 최적화 |
48
+ | C-4 | 이미지 최적화 — WebP/AVIF, srcset, lazy loading | MEDIUM | LCP + 대역폭 |
49
+
50
+ ## D. Monitoring & Budget
51
+
52
+ | # | 항목 | Severity | 근거 |
53
+ |---|------|:--------:|------|
54
+ | D-1 | CI에 성능 예산 설정 (경고: 500KB, 에러: 1MB) | MEDIUM | 성능 회귀 방지 |
55
+ | D-2 | RUM (Real User Monitoring) 사용 — 랩 데이터만으로 불충분 | LOW | 필드 vs 랩 괴리 |
56
+
57
+ ## Lighthouse v12 점수 가중치 참고
58
+
59
+ | Metric | Weight |
60
+ |--------|:------:|
61
+ | Total Blocking Time (TBT) | 30% |
62
+ | Largest Contentful Paint (LCP) | 25% |
63
+ | Cumulative Layout Shift (CLS) | 25% |
64
+ | First Contentful Paint (FCP) | 10% |
65
+ | Speed Index (SI) | 10% |
66
+
67
+ Target: 90+ (green).
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: SEO Checklist
3
+ area: "03"
4
+ tags: seo, e-e-a-t, structured-data, ai-overview
5
+ standards: Google Search Guidelines 2025-2026, Schema.org
6
+ ---
7
+
8
+ # 03. SEO Checklist
9
+
10
+ ## A. Technical SEO
11
+
12
+ | # | 항목 | Severity | 근거 |
13
+ |---|------|:--------:|------|
14
+ | A-1 | Core Web Vitals 통과 (LCP/INP/CLS) — 랭킹 시그널 | CRITICAL | Google 2025-26 |
15
+ | A-2 | Mobile-first 준수 — 터치 타겟 >= 48×48px, 본문 >= 16px, 수평 스크롤 없음 | CRITICAL | Google 모바일 인덱싱 |
16
+ | A-3 | HTTPS 전면 적용 | CRITICAL | 랭킹 시그널 |
17
+ | A-4 | 크롤 가능성 — robots.txt, sitemap.xml, 95%+ 인덱스율 목표 | HIGH | 기술적 SEO |
18
+ | A-5 | Canonical URL 설정 — 중복 콘텐츠 방지 | HIGH | 기술적 SEO |
19
+ | A-6 | JavaScript 렌더링 비용 관리 — SSR/SSG 우선, CSR은 SEO 위험 | HIGH | Google 렌더링 |
20
+
21
+ ## B. Structured Data
22
+
23
+ | # | 항목 | Severity | 근거 |
24
+ |---|------|:--------:|------|
25
+ | B-1 | JSON-LD 구조화 데이터 구현 (Article, Product, FAQ, HowTo 등) | CRITICAL | AI Overview 선정률 73% 향상 |
26
+ | B-2 | Schema.org 마크업 유효성 검증 (Google Rich Results Test) | HIGH | 구조화 데이터 |
27
+ | B-3 | 멀티모달 콘텐츠: 텍스트 + 이미지 + 비디오 + 스키마 조합 | HIGH | AI Overview 선정률 317% 향상 |
28
+
29
+ ## C. Content & E-E-A-T
30
+
31
+ | # | 항목 | Severity | 근거 |
32
+ |---|------|:--------:|------|
33
+ | C-1 | E-E-A-T 시그널 — 경험·전문성·권위·신뢰도 명확히 표현 | CRITICAL | Google 2025-26 핵심 |
34
+ | C-2 | 콘텐츠 최신성 — 3개월 이내 업데이트 시 AI 인용 6건 vs 구 콘텐츠 3.6건 | HIGH | AI Overview 인용 |
35
+ | C-3 | 헤딩 간 120-180 단어 구조화 — ChatGPT 인용 70% 향상 | HIGH | AI 인용 최적화 |
36
+ | C-4 | 실시간 팩트 검증 지원 — 최신 통계, 권위 있는 출처 인용 | HIGH | AI Overview 선정 89% 향상 |
37
+ | C-5 | 직접 경험 시그널 포함 (Helpful Content System) | HIGH | E-E-A-T |
38
+
39
+ ## D. Meta & Accessibility
40
+
41
+ | # | 항목 | Severity | 근거 |
42
+ |---|------|:--------:|------|
43
+ | D-1 | 고유한 title, meta description — 페이지별 | MEDIUM | 기본 SEO |
44
+ | D-2 | 의미 있는 링크 텍스트 — "여기 클릭" 금지 | MEDIUM | SEO + A11y |
45
+ | D-3 | 접근성 명세 게시 (EAA 요구사항, 신뢰 시그널) | MEDIUM | EAA 2025 |
46
+ | D-4 | "People Also Ask" 테마 최적화 | LOW | SERP 노출 |