timsquad 3.7.0 → 3.8.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.
- package/README.ko.md +8 -9
- package/README.md +44 -11
- package/dist/commands/audit.d.ts +6 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +111 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/log.d.ts +6 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +85 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/next.d.ts +15 -0
- package/dist/commands/next.d.ts.map +1 -0
- package/dist/commands/next.js +146 -0
- package/dist/commands/next.js.map +1 -0
- package/dist/commands/plan.d.ts +6 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +83 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/retro.d.ts +6 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +74 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/spec.d.ts +6 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +56 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +99 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +12 -10
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/meta-cache.d.ts +2 -1
- package/dist/daemon/meta-cache.d.ts.map +1 -1
- package/dist/daemon/meta-cache.js +20 -4
- package/dist/daemon/meta-cache.js.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +14 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/planning-parser.d.ts +65 -0
- package/dist/lib/planning-parser.d.ts.map +1 -0
- package/dist/lib/planning-parser.js +306 -0
- package/dist/lib/planning-parser.js.map +1 -0
- package/dist/lib/skill-generator.d.ts.map +1 -1
- package/dist/lib/skill-generator.js +7 -3
- package/dist/lib/skill-generator.js.map +1 -1
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +22 -5
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/workflow-state.d.ts +77 -0
- package/dist/lib/workflow-state.d.ts.map +1 -1
- package/dist/lib/workflow-state.js +194 -0
- package/dist/lib/workflow-state.js.map +1 -1
- package/dist/types/config.d.ts +14 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +15 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +1 -1
- package/templates/base/agents/base/tsq-librarian.md +1 -1
- package/templates/base/scripts/calculate-retro-metrics.sh +46 -0
- package/templates/base/scripts/check-circular-deps.sh +82 -0
- package/templates/base/scripts/cleanup-trails.sh +44 -0
- package/templates/base/scripts/generate-prd-traceability.sh +91 -0
- package/templates/base/scripts/manage-fp-registry.sh +83 -0
- package/templates/base/scripts/validate-gherkin.sh +113 -0
- package/templates/base/skills/tsq-controller/SKILL.md +60 -37
- package/templates/base/skills/tsq-controller/references/model-routing.md +38 -0
- package/templates/base/skills/tsq-controller/references/wave-dispatch.md +50 -0
- package/templates/base/skills/tsq-full/SKILL.md +70 -0
- package/templates/base/skills/tsq-grill/SKILL.md +60 -55
- package/templates/base/skills/tsq-grill/references/interview-guide.md +86 -0
- package/templates/base/skills/tsq-inspect/SKILL.md +108 -0
- package/templates/base/skills/tsq-inspect/references/checklist.md +162 -0
- package/templates/base/skills/tsq-quick/SKILL.md +58 -0
- package/templates/base/skills/tsq-start/SKILL.md +17 -44
- package/templates/base/skills/tsq-start/references/onboarding-steps.md +85 -0
- package/templates/platforms/claude-code/scripts/build-gate.sh +25 -2
- package/templates/platforms/claude-code/scripts/check-capability.sh +41 -10
- package/templates/platforms/claude-code/scripts/completion-guard.sh +79 -3
- package/templates/platforms/claude-code/scripts/detect-env.sh +124 -0
- package/templates/platforms/claude-code/scripts/stale-guard.sh +47 -0
- package/templates/platforms/claude-code/scripts/subagent-stop.sh +41 -2
- package/templates/platforms/claude-code/scripts/tdd-guard.sh +57 -0
- package/templates/platforms/claude-code/scripts/validate-completion-report.sh +86 -0
- package/templates/platforms/claude-code/settings.json +10 -0
- package/templates/project-types/fintech/config.yaml +1 -1
- package/templates/project-types/mobile-app/config.yaml +1 -1
- package/templates/project-types/web-app/config.yaml +1 -1
- package/templates/project-types/web-service/config.yaml +1 -1
|
@@ -1,86 +1,91 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tsq-grill
|
|
3
3
|
description: |
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
소크라틱 심층 인터뷰로 PRD와 Sub-PRD를 작성/보강하는 스킬.
|
|
5
|
+
3모드 자동 분기: PRD 미존재 시 프로젝트 전체 인터뷰, PRD 존재 시 기능별 심층 인터뷰,
|
|
6
|
+
PRD가 있지만 빈 섹션이 있으면 보강 인터뷰.
|
|
7
|
+
프로젝트 시작, 아이디어 구체화, 요구사항 정리가 필요한 모든 순간에 사용한다.
|
|
8
|
+
Use when: "PRD 작성", "기획", "기능 상세화", "요구사항 인터뷰", "PRD 보강", "grill",
|
|
9
|
+
"기능 정의", "Sub-PRD 작성", "기능 스펙 잡기", "프로젝트 정의",
|
|
10
|
+
"뭘 만들지 정리", "아이디어 구체화", "스코프 잡기", "기획서",
|
|
11
|
+
또는 PRD가 없거나, PRD에 빈 섹션이 있거나, 기능 인덱스에 빈 항목이 있을 때.
|
|
12
|
+
새 프로젝트를 시작하거나 기존 프로젝트의 방향을 재정리할 때도 반드시 이 스킬을 사용한다.
|
|
13
|
+
version: "2.1.0"
|
|
9
14
|
tags: [tsq, prd, interview, grill, requirements]
|
|
10
15
|
user-invocable: true
|
|
11
16
|
---
|
|
12
17
|
|
|
13
18
|
# /tsq-grill — 소크라틱 심층 인터뷰
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
질문을 통해 답을 끌어내는 소크라틱 방법론으로 PRD와 Sub-PRD를 작성한다.
|
|
21
|
+
PRD가 부실하면 그 위에 세워지는 모든 것이 부실해진다.
|
|
17
22
|
|
|
18
|
-
##
|
|
23
|
+
## Mode Detection (자동)
|
|
19
24
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
```
|
|
26
|
+
.timsquad/ssot/prd.md 존재?
|
|
27
|
+
├── NO → PRD Mode (프로젝트 전체 인터뷰)
|
|
28
|
+
└── YES → prd.md에 빈 섹션(TBD, TODO, 빈 테이블)이 있는가?
|
|
29
|
+
├── YES → PRD Reinforce Mode (빈 섹션 보강 인터뷰)
|
|
30
|
+
└── NO → Sub-PRD Mode (기능별 인터뷰)
|
|
31
|
+
```
|
|
24
32
|
|
|
25
|
-
|
|
33
|
+
명시적 모드: `/tsq-grill prd` | `/tsq-grill sub` | `/tsq-grill` (자동)
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
## PRD Mode — 프로젝트 전체 인터뷰
|
|
28
36
|
|
|
29
|
-
|
|
30
|
-
2. Sub-PRD가 없거나 빈 기능 식별
|
|
31
|
-
3. 사용자에게 인터뷰 대상 기능 확인 (복수 선택 가능)
|
|
37
|
+
PRD가 없거나 프로젝트 초기 단계에서 사용.
|
|
32
38
|
|
|
33
|
-
|
|
39
|
+
**질문 트리는 `references/interview-guide.md`를 Read하여 참조한다.**
|
|
34
40
|
|
|
35
|
-
|
|
41
|
+
### 인터뷰 원칙
|
|
42
|
+
- 질문 트리는 **가이드**이지 체크리스트가 아니다
|
|
43
|
+
- 이미 답변된 영역은 건너뛴다
|
|
44
|
+
- 한 번에 2-3개 질문만. 사용자가 부담을 느끼면 안 된다
|
|
45
|
+
- 프로젝트 특성에 맞는 질문을 추가한다
|
|
36
46
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
What (범위)
|
|
44
|
-
├── Must-Have vs Nice-to-Have 경계는?
|
|
45
|
-
├── 이 기능이 다루지 않는 것은?
|
|
46
|
-
├── 어떤 데이터가 필요하고 어디서 오나?
|
|
47
|
-
└── 기존 시스템과 연동 포인트는?
|
|
48
|
-
|
|
49
|
-
How (설계)
|
|
50
|
-
├── 사용자 흐름 (Happy Path → Exception Path)?
|
|
51
|
-
├── 상태 전환이 있다면?
|
|
52
|
-
├── 에러 케이스와 처리 방식은?
|
|
53
|
-
└── 성능/보안 고려사항은?
|
|
54
|
-
```
|
|
47
|
+
### 진행: Phase 1(비전) → Phase 2(스코프) → Phase 3(성공 지표) → PRD 생성 → 리뷰
|
|
48
|
+
|
|
49
|
+
PRD 생성 시 `.timsquad/ssot/prd.md`에 구조화:
|
|
50
|
+
비전/타겟/시장 → 기능 인덱스 테이블 → 제약사항 → KPI → Anti-scope → TBD
|
|
51
|
+
|
|
52
|
+
## PRD Reinforce Mode — 기존 PRD 보강
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
1. prd.md를 읽고 빈 섹션 / TBD 항목 목록을 사용자에게 제시
|
|
55
|
+
2. 사용자가 보강할 항목 선택
|
|
56
|
+
3. 해당 항목에 대해 소크라틱 인터뷰 진행
|
|
57
|
+
4. 결과를 prd.md에 반영
|
|
58
|
+
5. 사용자 리뷰 요청 (Human Checkpoint)
|
|
61
59
|
|
|
62
|
-
|
|
60
|
+
## Sub-PRD Mode — 기능별 인터뷰
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
**질문 트리는 `references/interview-guide.md`를 Read하여 참조한다.**
|
|
65
63
|
|
|
66
|
-
1.
|
|
67
|
-
2.
|
|
68
|
-
3.
|
|
69
|
-
4.
|
|
64
|
+
1. prd.md 기능 인덱스에서 Sub-PRD 미작성 기능 식별
|
|
65
|
+
2. 사용자에게 대상 기능 확인
|
|
66
|
+
3. Why → What → How 3단계 인터뷰
|
|
67
|
+
4. `.timsquad/ssot/prd/[feature].md` 생성
|
|
68
|
+
5. prd.md 기능 인덱스 업데이트
|
|
70
69
|
|
|
71
|
-
|
|
70
|
+
## 질문 방식 원칙 (공통)
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
- **한 번에 질문 2-3개만** — 질문 폭탄은 대충 답하게 만든다
|
|
73
|
+
- **답변을 요약해서 확인** — 에이전트 해석이 맞는지 검증
|
|
74
|
+
- **모호하면 구체적 예시로 재질문** — "사용자 경험 개선"은 PRD에 쓸 수 없다
|
|
75
|
+
- **"모르겠다"도 유효** — TBD로 기록 + 결정 시점 명시
|
|
76
|
+
- **가정하지 않는다** — 선택지 제시, 사용자가 고르게 한다
|
|
74
77
|
|
|
75
78
|
## Output
|
|
76
79
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
| Mode | 산출물 |
|
|
81
|
+
|------|--------|
|
|
82
|
+
| PRD | `.timsquad/ssot/prd.md` + 인터뷰 로그 |
|
|
83
|
+
| Reinforce | 보강된 `prd.md` (기존 유지, 빈 섹션만) |
|
|
84
|
+
| Sub-PRD | `.timsquad/ssot/prd/[feature].md` + 인덱스 업데이트 |
|
|
80
85
|
|
|
81
86
|
## Rules
|
|
82
87
|
|
|
83
88
|
- 사용자 답변을 임의로 해석하지 않는다 — 확인 후 기록
|
|
84
|
-
- "아직 모르겠다"는 TBD
|
|
89
|
+
- "아직 모르겠다"는 TBD + 결정 시점 명시
|
|
85
90
|
- SSOT 외 파일 수정 금지
|
|
86
|
-
- Sub-PRD 생성 후
|
|
91
|
+
- PRD/Sub-PRD 생성 후 반드시 사용자 리뷰 요청 (Human Checkpoint)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Grill Interview Guide
|
|
3
|
+
category: guide
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Grill Interview Guide — 질문 트리 상세
|
|
7
|
+
|
|
8
|
+
## PRD Mode 질문 트리
|
|
9
|
+
|
|
10
|
+
### Phase 1: 비전 인터뷰
|
|
11
|
+
|
|
12
|
+
프로젝트 전체의 Why를 먼저 확립한다. 여기가 흔들리면 모든 후속 결정이 흔들린다.
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Vision (비전)
|
|
16
|
+
├── 이 프로젝트를 한 문장으로 설명한다면?
|
|
17
|
+
├── 이게 없으면 세상에 어떤 문제가 남는가?
|
|
18
|
+
└── 6개월 후 성공했다면, 어떤 상태인가?
|
|
19
|
+
|
|
20
|
+
Target User (타겟)
|
|
21
|
+
├── 주요 사용자는 누구인가? (구체적 페르소나)
|
|
22
|
+
├── 그 사용자가 지금 이 문제를 어떻게 해결하고 있나?
|
|
23
|
+
├── 왜 기존 방법이 부족한가?
|
|
24
|
+
└── 사용자가 돈을 낼 의향이 있는 부분은?
|
|
25
|
+
|
|
26
|
+
Market (시장) — 경쟁 환경을 모르면 차별화도 불가능하다
|
|
27
|
+
├── 직접 경쟁자는? 간접 경쟁자는?
|
|
28
|
+
├── 경쟁자 대비 차별점은 무엇인가?
|
|
29
|
+
└── 타이밍이 지금인 이유는?
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Phase 2: 스코프 인터뷰
|
|
33
|
+
|
|
34
|
+
무엇을 만들고, 무엇을 만들지 않는지 경계를 확립한다.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Core Features (핵심 기능)
|
|
38
|
+
├── 반드시 있어야 하는 기능 3-5개는?
|
|
39
|
+
├── 각 기능이 왜 필수인가? (없으면 어떻게 되나?)
|
|
40
|
+
├── Nice-to-Have로 미룰 수 있는 것은?
|
|
41
|
+
└── 명시적으로 만들지 않는 것은? (Anti-scope)
|
|
42
|
+
|
|
43
|
+
Technical Constraints (기술 제약)
|
|
44
|
+
├── 기술 스택이 이미 정해져 있나?
|
|
45
|
+
├── 외부 서비스/API 의존성은?
|
|
46
|
+
├── 성능 요구사항은? (응답시간, 동시접속 등)
|
|
47
|
+
└── 보안/규제 요구사항은? (인증, 결제, 개인정보)
|
|
48
|
+
|
|
49
|
+
Business Constraints (비즈니스 제약)
|
|
50
|
+
├── 예산/일정 제약은?
|
|
51
|
+
├── MVP 범위는 어디까지?
|
|
52
|
+
└── 런칭 후 첫 번째 마일스톤은?
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Phase 3: 성공 지표 인터뷰
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Metrics (지표)
|
|
59
|
+
├── 핵심 KPI는 무엇인가? (최대 3개)
|
|
60
|
+
├── 각 KPI의 현재 값과 목표 값은?
|
|
61
|
+
├── 측정 방법은? (어떤 도구/데이터로?)
|
|
62
|
+
└── 실패로 판단하는 기준은?
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Sub-PRD Mode 질문 트리
|
|
66
|
+
|
|
67
|
+
기능마다 3단계 깊이로 질문한다. 한 번에 2-3개 질문, 답변 받으면 다음 깊이로.
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Why (목적)
|
|
71
|
+
├── 이 기능이 없으면 사용자에게 어떤 문제가 생기나?
|
|
72
|
+
├── 핵심 사용자 시나리오는?
|
|
73
|
+
└── 성공을 어떻게 측정하나?
|
|
74
|
+
|
|
75
|
+
What (범위)
|
|
76
|
+
├── Must-Have vs Nice-to-Have 경계는?
|
|
77
|
+
├── 이 기능이 다루지 않는 것은?
|
|
78
|
+
├── 어떤 데이터가 필요하고 어디서 오나?
|
|
79
|
+
└── 기존 시스템과 연동 포인트는?
|
|
80
|
+
|
|
81
|
+
How (설계)
|
|
82
|
+
├── 사용자 흐름 (Happy Path → Exception Path)?
|
|
83
|
+
├── 상태 전환이 있다면?
|
|
84
|
+
├── 에러 케이스와 처리 방식은?
|
|
85
|
+
└── 성능/보안 고려사항은?
|
|
86
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tsq-inspect
|
|
3
|
+
description: |
|
|
4
|
+
프로젝트 파이프라인 전체 건강 점검. 데드코드, 죽은 프로세스, 끊어진 Hook 체인,
|
|
5
|
+
문서 drift, 고아 스킬, 미등록 스크립트, 설정 불일치를 탐지하여 리포트 생성.
|
|
6
|
+
Use when: "점검", "헬스체크", "건강 검진", "파이프라인 검증", "전체 점검",
|
|
7
|
+
"데드코드", "죽은 프로세스", "inspect", "health check", "프레임워크 진단",
|
|
8
|
+
"뭐가 빠졌지", "뭐가 고장났지", "설정 확인", "Hook 확인", "스킬 확인",
|
|
9
|
+
또는 릴리스 전 최종 점검, 대규모 작업 후 정합성 확인, 새 세션 시작 시 현황 파악.
|
|
10
|
+
프로젝트가 "이상하게 동작한다" 싶으면 이 스킬을 먼저 실행하라.
|
|
11
|
+
version: "1.0.0"
|
|
12
|
+
tags: [tsq, inspect, health, audit, pipeline, dead-code]
|
|
13
|
+
user-invocable: true
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# /tsq-inspect — 파이프라인 전체 건강 점검
|
|
17
|
+
|
|
18
|
+
릴리스 전, 대규모 작업 후, 또는 "뭔가 이상하다" 싶을 때 실행하는 종합 진단.
|
|
19
|
+
데드코드와 죽은 프로세스는 시간이 지나면 반드시 누적된다 — 정기적으로 제거해야 파이프라인이 건강하다.
|
|
20
|
+
|
|
21
|
+
## Protocol
|
|
22
|
+
|
|
23
|
+
1. **데이터 수집**: 아래 7개 영역을 자동 점검 (CLI + 파일 스캔)
|
|
24
|
+
2. **리포트 생성**: 영역별 PASS/WARN/FAIL + 구체적 항목
|
|
25
|
+
3. **권고 제시**: 수정 방법과 우선순위
|
|
26
|
+
4. **사용자 확인**: 자동 수정 가능한 항목은 동의 후 즉시 처리
|
|
27
|
+
|
|
28
|
+
## 점검 7영역
|
|
29
|
+
|
|
30
|
+
### 1. Hook 정합성
|
|
31
|
+
settings.json에 등록된 Hook vs 실제 스크립트 파일 대조.
|
|
32
|
+
|
|
33
|
+
| 점검 | 방법 |
|
|
34
|
+
|------|------|
|
|
35
|
+
| 유령 Hook | settings.json에 등록됐지만 스크립트 파일 없음 |
|
|
36
|
+
| 고아 스크립트 | scripts/ 디렉토리에 있지만 settings.json에 미등록 |
|
|
37
|
+
| Fail 전략 불일치 | `\|\| true` 유무와 의도된 fail-closed/open 비교 |
|
|
38
|
+
|
|
39
|
+
### 2. 스킬 정합성
|
|
40
|
+
templates/base/skills/ vs 배포된 .claude/skills/ 대조.
|
|
41
|
+
|
|
42
|
+
| 점검 | 방법 |
|
|
43
|
+
|------|------|
|
|
44
|
+
| 고아 스킬 | 디렉토리 존재하지만 SKILL.md 없음 |
|
|
45
|
+
| Frontmatter 누락 | name 또는 description 빠짐 |
|
|
46
|
+
| 120줄 초과 | Progressive Disclosure 기준 위반 |
|
|
47
|
+
| references/ 포인터 끊김 | SKILL.md에서 참조하지만 파일 없음 |
|
|
48
|
+
| 미배포 스킬 | config의 SKILL_PRESETS에 없고 BASE_SKILLS에도 없음 |
|
|
49
|
+
|
|
50
|
+
### 3. CLI 정합성
|
|
51
|
+
src/index.ts 등록 vs src/commands/ 파일 대조.
|
|
52
|
+
|
|
53
|
+
| 점검 | 방법 |
|
|
54
|
+
|------|------|
|
|
55
|
+
| 미등록 커맨드 | src/commands/*.ts 있지만 index.ts에 import 없음 |
|
|
56
|
+
| 유령 import | index.ts에 import 있지만 파일 없음 |
|
|
57
|
+
| 빌드 동기화 | src/ vs dist/ 타임스탬프 비교 |
|
|
58
|
+
|
|
59
|
+
### 4. 문서 Drift
|
|
60
|
+
보완계획/SSOT 문서의 주장 vs 실제 수치 대조.
|
|
61
|
+
|
|
62
|
+
| 점검 | 방법 |
|
|
63
|
+
|------|------|
|
|
64
|
+
| Hook 수 불일치 | 문서 주장 vs settings.json 실제 수 |
|
|
65
|
+
| 스킬 수 불일치 | 문서 주장 vs 실제 디렉토리 수 |
|
|
66
|
+
| 테스트 수 불일치 | 문서 주장 vs `npm test` 실제 수 |
|
|
67
|
+
| CLI 수 불일치 | 문서 주장 vs index.ts 등록 수 |
|
|
68
|
+
| 로드맵 상태 | 이슈 상태(open/closed) vs 문서 "완료/미착수" |
|
|
69
|
+
|
|
70
|
+
**상세 점검 항목은 `references/checklist.md`를 Read하여 참조.**
|
|
71
|
+
|
|
72
|
+
### 5. 테스트 커버리지 갭
|
|
73
|
+
소스 파일 대비 테스트 파일 존재 여부.
|
|
74
|
+
|
|
75
|
+
| 점검 | 방법 |
|
|
76
|
+
|------|------|
|
|
77
|
+
| 테스트 없는 소스 | src/**/*.ts에 대응하는 *.test.ts 없음 |
|
|
78
|
+
| 빈 테스트 | .test.ts 존재하지만 describe/it 블록 없음 |
|
|
79
|
+
|
|
80
|
+
### 6. 설정 일관성
|
|
81
|
+
config.json, package.json, tsconfig.json 간 교차 검증.
|
|
82
|
+
|
|
83
|
+
| 점검 | 방법 |
|
|
84
|
+
|------|------|
|
|
85
|
+
| 버전 불일치 | package.json vs config.json framework_version |
|
|
86
|
+
| 스택 불일치 | config.json stack vs 실제 dependencies |
|
|
87
|
+
| 스크립트 누락 | test/build 스크립트 미정의 |
|
|
88
|
+
|
|
89
|
+
### 7. 상태 파일 위생
|
|
90
|
+
.timsquad/state/ 디렉토리의 정합성.
|
|
91
|
+
|
|
92
|
+
| 점검 | 방법 |
|
|
93
|
+
|------|------|
|
|
94
|
+
| 좀비 토큰 | controller-active 존재하지만 Controller 미실행 |
|
|
95
|
+
| Stale workflow | workflow.json의 current_phase와 current-phase.json 불일치 |
|
|
96
|
+
| 깨진 JSONL | decisions.jsonl에 유효하지 않은 JSON 행 |
|
|
97
|
+
| 잔여 임시 파일 | *.tmp, *.bak 등 |
|
|
98
|
+
|
|
99
|
+
## 리포트
|
|
100
|
+
|
|
101
|
+
`.timsquad/logs/inspect-{date}.md`에 저장. 영역별 PASS/WARN/FAIL + 상세 항목 + 권고.
|
|
102
|
+
|
|
103
|
+
## Rules
|
|
104
|
+
|
|
105
|
+
- 점검은 읽기 전용 — 자동 수정은 반드시 사용자 동의 후
|
|
106
|
+
- 리포트는 `.timsquad/logs/inspect-{date}.md`에 저장
|
|
107
|
+
- `tsq audit score`를 내부적으로 실행하여 7영역 점수도 포함
|
|
108
|
+
- FAIL이 1건이라도 있으면 사용자에게 즉시 알림
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Inspect Checklist
|
|
3
|
+
category: guide
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Inspect 상세 점검 체크리스트
|
|
7
|
+
|
|
8
|
+
## 1. Hook 정합성 — 실행 커맨드
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# settings.json에서 등록된 스크립트 목록 추출
|
|
12
|
+
REGISTERED=$(grep '"command"' .claude/settings.json 2>/dev/null | \
|
|
13
|
+
grep -oE 'scripts/[a-z-]+\.sh' | sort -u)
|
|
14
|
+
|
|
15
|
+
# 실제 스크립트 파일 목록
|
|
16
|
+
ACTUAL=$(ls .claude/scripts/*.sh 2>/dev/null | xargs -I{} basename {} | sort -u)
|
|
17
|
+
|
|
18
|
+
# 차이 비교
|
|
19
|
+
diff <(echo "$REGISTERED") <(echo "$ACTUAL")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**판정 기준:**
|
|
23
|
+
- 유령 Hook (등록 O, 파일 X) → **FAIL**
|
|
24
|
+
- 고아 스크립트 (등록 X, 파일 O) → **WARN** (유틸리티일 수 있음)
|
|
25
|
+
- Fail 전략: `|| true` 없으면 fail-closed, 있으면 fail-open
|
|
26
|
+
|
|
27
|
+
## 2. 스킬 정합성 — 실행 커맨드
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# 전체 스킬 디렉토리
|
|
31
|
+
SKILLS=$(ls -d .claude/skills/tsq-*/ 2>/dev/null)
|
|
32
|
+
|
|
33
|
+
for SKILL_DIR in $SKILLS; do
|
|
34
|
+
SKILL_FILE="$SKILL_DIR/SKILL.md"
|
|
35
|
+
NAME=$(basename "$SKILL_DIR")
|
|
36
|
+
|
|
37
|
+
# SKILL.md 존재 확인
|
|
38
|
+
[ ! -f "$SKILL_FILE" ] && echo "FAIL: $NAME — SKILL.md 없음" && continue
|
|
39
|
+
|
|
40
|
+
# Frontmatter 확인
|
|
41
|
+
head -20 "$SKILL_FILE" | grep -q '^name:' || echo "WARN: $NAME — name 누락"
|
|
42
|
+
head -20 "$SKILL_FILE" | grep -q '^description:' || echo "WARN: $NAME — description 누락"
|
|
43
|
+
|
|
44
|
+
# 라인수 확인 (120줄 기준)
|
|
45
|
+
LINES=$(wc -l < "$SKILL_FILE")
|
|
46
|
+
[ "$LINES" -gt 120 ] && echo "WARN: $NAME — ${LINES}줄 (120줄 초과)"
|
|
47
|
+
|
|
48
|
+
# references/ 포인터 검증 (한 줄씩 처리)
|
|
49
|
+
grep -oE 'references/[a-zA-Z0-9_-]+\.md' "$SKILL_FILE" 2>/dev/null | sort -u | while IFS= read -r REF; do
|
|
50
|
+
[ -z "$REF" ] && continue
|
|
51
|
+
[ ! -f "$SKILL_DIR/$REF" ] && echo "FAIL: $NAME — $REF 파일 없음"
|
|
52
|
+
done
|
|
53
|
+
done
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 3. CLI 정합성 — 실행 커맨드
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# index.ts에서 import된 커맨드 파일
|
|
60
|
+
IMPORTED=$(grep "from './commands/" src/index.ts | \
|
|
61
|
+
grep -oE "commands/[a-z]+\.js" | sed 's/\.js//' | sort)
|
|
62
|
+
|
|
63
|
+
# 실제 커맨드 파일
|
|
64
|
+
ACTUAL=$(ls src/commands/*.ts 2>/dev/null | \
|
|
65
|
+
xargs -I{} basename {} .ts | sort)
|
|
66
|
+
|
|
67
|
+
# 비교
|
|
68
|
+
diff <(echo "$IMPORTED" | sed 's|commands/||') <(echo "$ACTUAL")
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 4. 문서 Drift — 점검 대상 패턴
|
|
72
|
+
|
|
73
|
+
문서에서 수치를 추출하는 정규식 패턴:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Hook 수: /Hook[:\s]*(\d+)개/ 또는 /(\d+)개.*Hook/
|
|
77
|
+
스킬 수: /(\d+)개.*skill/i 또는 /스킬[:\s]*(\d+)/
|
|
78
|
+
테스트 수: /(\d+)\s*테스트/ 또는 /(\d+)\s*tests?/i
|
|
79
|
+
CLI 수: /(\d+)개.*커맨드/ 또는 /CLI[:\s]*(\d+)/
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
비교 대상 실제 수치:
|
|
83
|
+
- Hook: `grep -c '"command"' .claude/settings.json` ÷ 2 (중복 키 제거)
|
|
84
|
+
- 스킬: `ls -d .claude/skills/tsq-*/ | wc -l`
|
|
85
|
+
- 테스트: `npm test 2>&1 | grep -oE '\d+ passed'`
|
|
86
|
+
- CLI: `grep 'registerCommand' src/index.ts | wc -l` 또는 `node dist/index.js --help`
|
|
87
|
+
|
|
88
|
+
## 5. 테스트 커버리지 갭
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# 소스 파일 목록 (테스트/설정 제외)
|
|
92
|
+
SRC_FILES=$(find src -name '*.ts' \
|
|
93
|
+
-not -name '*.test.*' -not -name '*.spec.*' \
|
|
94
|
+
-not -name '*.d.ts' -not -path '*/types/*')
|
|
95
|
+
|
|
96
|
+
for SRC in $SRC_FILES; do
|
|
97
|
+
BASE=$(basename "$SRC" .ts)
|
|
98
|
+
# 대응 테스트 파일 검색
|
|
99
|
+
FOUND=$(find tests -name "${BASE}.test.*" -o -name "${BASE}.spec.*" 2>/dev/null | head -1)
|
|
100
|
+
[ -z "$FOUND" ] && echo "GAP: $SRC — 테스트 없음"
|
|
101
|
+
done
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 6. 설정 일관성
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# package.json version vs config.json framework_version
|
|
108
|
+
PKG_VER=$(jq -r '.version' package.json)
|
|
109
|
+
CFG_VER=$(jq -r '.project.framework_version // "없음"' .timsquad/config.json 2>/dev/null)
|
|
110
|
+
[ "$PKG_VER" != "$CFG_VER" ] && echo "WARN: 버전 불일치 pkg=$PKG_VER cfg=$CFG_VER"
|
|
111
|
+
|
|
112
|
+
# config stack vs actual dependencies
|
|
113
|
+
CONFIG_STACK=$(jq -r '.project.stack // [] | .[]' .timsquad/config.json 2>/dev/null)
|
|
114
|
+
for TECH in $CONFIG_STACK; do
|
|
115
|
+
grep -q "\"$TECH\"" package.json 2>/dev/null || \
|
|
116
|
+
echo "WARN: stack '$TECH'가 config에 있지만 dependencies에 없음"
|
|
117
|
+
done
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 7. 상태 파일 위생
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
STATE_DIR=".timsquad/state"
|
|
124
|
+
|
|
125
|
+
# 좀비 토큰
|
|
126
|
+
if [ -f "$STATE_DIR/controller-active" ]; then
|
|
127
|
+
# 10분 이상 된 파일이면 좀비
|
|
128
|
+
AGE=$(( $(date +%s) - $(stat -f %m "$STATE_DIR/controller-active" 2>/dev/null || echo 0) ))
|
|
129
|
+
[ "$AGE" -gt 600 ] && echo "WARN: 좀비 controller-active (${AGE}초 전)"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
# Phase 동기화
|
|
133
|
+
if [ -f "$STATE_DIR/workflow.json" ] && [ -f "$STATE_DIR/current-phase.json" ]; then
|
|
134
|
+
WF_PHASE=$(jq -r '.current_phase.id // "null"' "$STATE_DIR/workflow.json")
|
|
135
|
+
CP_PHASE=$(jq -r '.current // "null"' "$STATE_DIR/current-phase.json")
|
|
136
|
+
[ "$WF_PHASE" != "$CP_PHASE" ] && echo "FAIL: Phase 불일치 workflow=$WF_PHASE current=$CP_PHASE"
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# JSONL 검증
|
|
140
|
+
if [ -f "$STATE_DIR/decisions.jsonl" ]; then
|
|
141
|
+
LINE_NUM=0
|
|
142
|
+
while IFS= read -r line; do
|
|
143
|
+
LINE_NUM=$((LINE_NUM + 1))
|
|
144
|
+
echo "$line" | jq empty 2>/dev/null || echo "FAIL: decisions.jsonl 행 $LINE_NUM — 유효하지 않은 JSON"
|
|
145
|
+
done < "$STATE_DIR/decisions.jsonl"
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# 잔여 임시 파일
|
|
149
|
+
TEMP=$(find "$STATE_DIR" -name "*.tmp" -o -name "*.bak" 2>/dev/null)
|
|
150
|
+
[ -n "$TEMP" ] && echo "WARN: 잔여 임시 파일: $TEMP"
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 자동 수정 가능 항목
|
|
154
|
+
|
|
155
|
+
사용자 동의 후 즉시 처리 가능한 항목:
|
|
156
|
+
|
|
157
|
+
| 항목 | 자동 수정 방법 |
|
|
158
|
+
|------|-------------|
|
|
159
|
+
| 좀비 controller-active | `rm .timsquad/state/controller-active` |
|
|
160
|
+
| 잔여 임시 파일 | `rm *.tmp *.bak` |
|
|
161
|
+
| Phase 불일치 | workflow.json 기준으로 current-phase.json 동기화 |
|
|
162
|
+
| 깨진 JSONL 행 | 해당 행 삭제 |
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tsq-quick
|
|
3
|
+
description: |
|
|
4
|
+
Controller 경유 단일 태스크 실행. SSOT, 메모리, 현재 파이프라인 상태를 자동 참조하여
|
|
5
|
+
컨텍스트를 잃지 않고 빠르게 작업을 완료한다. 풀 파이프라인(Phase-Sequence) 오버헤드 없이
|
|
6
|
+
단일 태스크만 실행하므로, 기능 전체 구현이 아닌 부분 작업에 적합하다.
|
|
7
|
+
Use when: "/tsq-quick", "빨리 해줘", "간단한 수정", "이것만", "버그 수정",
|
|
8
|
+
"리팩토링", "메서드 추가", "API 하나 추가", "테스트 작성", "이 파일 수정",
|
|
9
|
+
"다음 태스크", "태스크 13 실행", 또는 planning.md의 특정 태스크 하나를 실행할 때.
|
|
10
|
+
단일 파일/모듈 범위의 코딩, 수정, 추가 작업이면 이 스킬을 사용한다.
|
|
11
|
+
version: "1.0.0"
|
|
12
|
+
tags: [tsq, quick, controller, pipeline]
|
|
13
|
+
user-invocable: true
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# /tsq-quick — Controller 경유 단일 태스크
|
|
17
|
+
|
|
18
|
+
풀 파이프라인 없이 단일 태스크를 Controller 경유로 실행한다.
|
|
19
|
+
Controller를 경유하는 이유: SSOT/메모리/현재 상태를 주입받아야 이전 작업과 일관성을 유지할 수 있고,
|
|
20
|
+
Capability Token으로 서브에이전트의 변경 범위를 제한할 수 있기 때문이다.
|
|
21
|
+
|
|
22
|
+
## Protocol
|
|
23
|
+
|
|
24
|
+
1. **현재 위치 확인**: `.timsquad/state/workflow.json` → 진행 중인 Phase/Sequence/Task 파악
|
|
25
|
+
2. **태스크 결정**:
|
|
26
|
+
- 사용자가 태스크를 지정 → 해당 태스크 실행
|
|
27
|
+
- 미지정 → `workflow.json`의 다음 미완료 태스크 실행
|
|
28
|
+
3. **SSOT 참조**: `.timsquad/ssot-map.yaml` → 해당 태스크 관련 spec 로드
|
|
29
|
+
4. **메모리 참조**: `memory/` 디렉토리 읽기
|
|
30
|
+
5. **Controller 위임** (tsq-controller Protocol, 단일 태스크 모드):
|
|
31
|
+
- Capability Token 발급
|
|
32
|
+
- 에이전트 파일 + spec + methodology 조합
|
|
33
|
+
- Task() 단일 호출
|
|
34
|
+
- Completion Report 검증
|
|
35
|
+
- Capability Token 회수
|
|
36
|
+
6. **로그 기록**: 최소 로그 (L1 수준)
|
|
37
|
+
7. **테스트 게이트**: 변경된 파일 관련 단위 테스트만 실행
|
|
38
|
+
8. **workflow.json 갱신**: 완료된 태스크 상태 기록
|
|
39
|
+
|
|
40
|
+
## vs /tsq-full
|
|
41
|
+
|
|
42
|
+
| 항목 | /tsq-quick | /tsq-full |
|
|
43
|
+
|------|-----------|-----------|
|
|
44
|
+
| Phase-Sequence-Task | X (단일) | O (전체) |
|
|
45
|
+
| Controller 경유 | O | O |
|
|
46
|
+
| SSOT/메모리 참조 | O | O |
|
|
47
|
+
| 게이트 | unit만 | unit → integration → e2e |
|
|
48
|
+
| Librarian 호출 | X | O |
|
|
49
|
+
| planning.md 필요 | X | O |
|
|
50
|
+
|
|
51
|
+
## Usage
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
/tsq-quick 로그인 버튼 색상을 파란색으로 변경
|
|
55
|
+
/tsq-quick UserService에 이메일 검증 메서드 추가
|
|
56
|
+
/tsq-quick 태스크 13 실행
|
|
57
|
+
/tsq-quick ← 다음 미완료 태스크 자동 실행
|
|
58
|
+
```
|
|
@@ -4,7 +4,7 @@ description: |
|
|
|
4
4
|
TimSquad 파이프라인 시작. 데몬 기동, 프로토콜 활성화, 현재 상태 복원.
|
|
5
5
|
초기화 직후 프로젝트는 자동으로 온보딩 모드 진입 (SSOT 문서 작성 가이드).
|
|
6
6
|
Use when: 사용자가 /tsq-start로 TimSquad 파이프라인을 시작할 때.
|
|
7
|
-
version: "2.
|
|
7
|
+
version: "2.1.0"
|
|
8
8
|
tags: [tsq, pipeline, start, onboarding]
|
|
9
9
|
user-invocable: true
|
|
10
10
|
---
|
|
@@ -23,68 +23,41 @@ user-invocable: true
|
|
|
23
23
|
## 온보딩 감지 (Step 5)
|
|
24
24
|
|
|
25
25
|
`.timsquad/ssot/`의 `.md` 파일을 스캔하여 작성 완료도 판정:
|
|
26
|
-
- **empty**: placeholder만 존재 (
|
|
26
|
+
- **empty**: placeholder만 존재 (50%+)
|
|
27
27
|
- **partial**: 일부 섹션만 작성
|
|
28
28
|
- **filled**: 주요 섹션 작성 완료
|
|
29
29
|
|
|
30
30
|
**진입 조건** (하나라도 해당): prd.md가 empty / required 70%+ empty / progress=0
|
|
31
31
|
|
|
32
|
-
온보딩 시 SSOT
|
|
32
|
+
온보딩 시 SSOT 현황을 보여주고 3가지 선택지 제시:
|
|
33
33
|
1. 온보딩 시작 (권장) — PRD부터 순서대로
|
|
34
34
|
2. 특정 문서만 작성
|
|
35
35
|
3. 건너뛰기
|
|
36
36
|
|
|
37
37
|
## 온보딩 프로세스
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
**우선순위**: 개발환경(강제) → prd(grill 강제) → Sub-PRD(grill 강제) → requirements → data-design → service-spec
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
**각 Step의 상세 절차는 `references/onboarding-steps.md`를 Read하여 참조한다.**
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### PRD → Grill 자동 연결
|
|
51
|
-
|
|
52
|
-
PRD 초안 완성 후 기능 인덱스에 기능이 2개 이상이면 자동으로 `/tsq-grill` 반복 진입:
|
|
53
|
-
|
|
54
|
-
1. PRD 기능 인덱스 테이블에서 Sub-PRD 미작성 기능 목록 추출
|
|
55
|
-
2. 사용자에게 목록 보여주고 순서 확인 ("이 순서로 하나씩 상세화합니다")
|
|
56
|
-
3. 각 기능마다 `/tsq-grill` 프로세스 실행 (Why → What → How 인터뷰 → Sub-PRD 생성)
|
|
57
|
-
4. 하나 완료 후 자동으로 다음 기능 진행 (사용자가 "중단", "나중에"라고 하면 정지)
|
|
58
|
-
5. 중단 시 진행 상태를 `onboarding-progress.json`에 기록 → 다음 `/tsq-start`에서 이어서 진행
|
|
59
|
-
6. 모든 기능의 Sub-PRD 완성 시 → 나머지 SSOT 문서(requirements, data-design 등) 온보딩 계속
|
|
60
|
-
|
|
61
|
-
이렇게 하면 PRD가 기능 목록만 있는 껍데기가 아니라, 각 기능의 Why/What/How까지 잡힌 상태에서 설계 단계로 넘어간다.
|
|
62
|
-
|
|
63
|
-
**세션 관리**: `.timsquad/state/onboarding-progress.json`에 진행 상태 저장:
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"documents": { "prd": "filled", "requirements": "empty", ... },
|
|
67
|
-
"grill": {
|
|
68
|
-
"pending": ["feature-b", "feature-c"],
|
|
69
|
-
"completed": ["feature-a"],
|
|
70
|
-
"current": null
|
|
71
|
-
},
|
|
72
|
-
"last_updated": "ISO8601"
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
세션 끊겨도 다음 `/tsq-start`에서 `grill.pending`부터 이어서 진행. 모든 문서 filled + grill.pending 비어있으면 자동 완료.
|
|
43
|
+
| Step | 내용 | 강제 여부 |
|
|
44
|
+
|------|------|:---------:|
|
|
45
|
+
| 0 | 테스트 프레임워크 설치 | 건너뛸 수 없음 |
|
|
46
|
+
| 1 | `/tsq-grill prd` — PRD 심층 인터뷰 | 건너뛸 수 없음 |
|
|
47
|
+
| 2 | `/tsq-grill` 반복 — Sub-PRD 작성 | 중단 가능 |
|
|
48
|
+
| 3 | 나머지 SSOT 문서 | 선택적 |
|
|
76
49
|
|
|
77
|
-
|
|
50
|
+
타입별 추가 우선 문서는 `references/onboarding-questions.md` 참조.
|
|
78
51
|
|
|
79
|
-
|
|
52
|
+
## 온보딩 완료 후 자동 전환
|
|
80
53
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
54
|
+
모든 SSOT 문서 filled + grill.pending 비어있으면:
|
|
55
|
+
1. `/tsq-decompose` 자동 안내 (Phase-Sequence-Task 생성)
|
|
56
|
+
2. planning.md 확정 후 정상 파이프라인 진행
|
|
84
57
|
|
|
85
58
|
## 파이프라인 분기
|
|
86
59
|
|
|
87
|
-
온보딩 완료 + planning.md 확정
|
|
60
|
+
온보딩 완료 + planning.md 확정 후:
|
|
88
61
|
- **파이프라인 적합** (새 기능, API, DB, 아키텍처) → controller 경유 위임
|
|
89
62
|
- **단순 작업** (오타, 스타일, 1-2줄) → 직접 수행 + 최소 로그
|
|
90
63
|
- **모호한 경우** → 사용자에게 선택지 제시
|