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.
Files changed (92) hide show
  1. package/README.ko.md +8 -9
  2. package/README.md +44 -11
  3. package/dist/commands/audit.d.ts +6 -0
  4. package/dist/commands/audit.d.ts.map +1 -0
  5. package/dist/commands/audit.js +111 -0
  6. package/dist/commands/audit.js.map +1 -0
  7. package/dist/commands/log.d.ts +6 -0
  8. package/dist/commands/log.d.ts.map +1 -0
  9. package/dist/commands/log.js +85 -0
  10. package/dist/commands/log.js.map +1 -0
  11. package/dist/commands/next.d.ts +15 -0
  12. package/dist/commands/next.d.ts.map +1 -0
  13. package/dist/commands/next.js +146 -0
  14. package/dist/commands/next.js.map +1 -0
  15. package/dist/commands/plan.d.ts +6 -0
  16. package/dist/commands/plan.d.ts.map +1 -0
  17. package/dist/commands/plan.js +83 -0
  18. package/dist/commands/plan.js.map +1 -0
  19. package/dist/commands/retro.d.ts +6 -0
  20. package/dist/commands/retro.d.ts.map +1 -0
  21. package/dist/commands/retro.js +74 -0
  22. package/dist/commands/retro.js.map +1 -0
  23. package/dist/commands/spec.d.ts +6 -0
  24. package/dist/commands/spec.d.ts.map +1 -0
  25. package/dist/commands/spec.js +56 -0
  26. package/dist/commands/spec.js.map +1 -0
  27. package/dist/commands/status.d.ts +6 -0
  28. package/dist/commands/status.d.ts.map +1 -0
  29. package/dist/commands/status.js +99 -0
  30. package/dist/commands/status.js.map +1 -0
  31. package/dist/daemon/index.d.ts.map +1 -1
  32. package/dist/daemon/index.js +12 -10
  33. package/dist/daemon/index.js.map +1 -1
  34. package/dist/daemon/meta-cache.d.ts +2 -1
  35. package/dist/daemon/meta-cache.d.ts.map +1 -1
  36. package/dist/daemon/meta-cache.js +20 -4
  37. package/dist/daemon/meta-cache.js.map +1 -1
  38. package/dist/index.js +15 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/lib/config.d.ts.map +1 -1
  41. package/dist/lib/config.js +14 -1
  42. package/dist/lib/config.js.map +1 -1
  43. package/dist/lib/planning-parser.d.ts +65 -0
  44. package/dist/lib/planning-parser.d.ts.map +1 -0
  45. package/dist/lib/planning-parser.js +306 -0
  46. package/dist/lib/planning-parser.js.map +1 -0
  47. package/dist/lib/skill-generator.d.ts.map +1 -1
  48. package/dist/lib/skill-generator.js +7 -3
  49. package/dist/lib/skill-generator.js.map +1 -1
  50. package/dist/lib/template.d.ts.map +1 -1
  51. package/dist/lib/template.js +22 -5
  52. package/dist/lib/template.js.map +1 -1
  53. package/dist/lib/workflow-state.d.ts +77 -0
  54. package/dist/lib/workflow-state.d.ts.map +1 -1
  55. package/dist/lib/workflow-state.js +194 -0
  56. package/dist/lib/workflow-state.js.map +1 -1
  57. package/dist/types/config.d.ts +14 -0
  58. package/dist/types/config.d.ts.map +1 -1
  59. package/dist/types/config.js +15 -1
  60. package/dist/types/config.js.map +1 -1
  61. package/package.json +1 -1
  62. package/templates/base/agents/base/tsq-librarian.md +1 -1
  63. package/templates/base/scripts/calculate-retro-metrics.sh +46 -0
  64. package/templates/base/scripts/check-circular-deps.sh +82 -0
  65. package/templates/base/scripts/cleanup-trails.sh +44 -0
  66. package/templates/base/scripts/generate-prd-traceability.sh +91 -0
  67. package/templates/base/scripts/manage-fp-registry.sh +83 -0
  68. package/templates/base/scripts/validate-gherkin.sh +113 -0
  69. package/templates/base/skills/tsq-controller/SKILL.md +60 -37
  70. package/templates/base/skills/tsq-controller/references/model-routing.md +38 -0
  71. package/templates/base/skills/tsq-controller/references/wave-dispatch.md +50 -0
  72. package/templates/base/skills/tsq-full/SKILL.md +70 -0
  73. package/templates/base/skills/tsq-grill/SKILL.md +60 -55
  74. package/templates/base/skills/tsq-grill/references/interview-guide.md +86 -0
  75. package/templates/base/skills/tsq-inspect/SKILL.md +108 -0
  76. package/templates/base/skills/tsq-inspect/references/checklist.md +162 -0
  77. package/templates/base/skills/tsq-quick/SKILL.md +58 -0
  78. package/templates/base/skills/tsq-start/SKILL.md +17 -44
  79. package/templates/base/skills/tsq-start/references/onboarding-steps.md +85 -0
  80. package/templates/platforms/claude-code/scripts/build-gate.sh +25 -2
  81. package/templates/platforms/claude-code/scripts/check-capability.sh +41 -10
  82. package/templates/platforms/claude-code/scripts/completion-guard.sh +79 -3
  83. package/templates/platforms/claude-code/scripts/detect-env.sh +124 -0
  84. package/templates/platforms/claude-code/scripts/stale-guard.sh +47 -0
  85. package/templates/platforms/claude-code/scripts/subagent-stop.sh +41 -2
  86. package/templates/platforms/claude-code/scripts/tdd-guard.sh +57 -0
  87. package/templates/platforms/claude-code/scripts/validate-completion-report.sh +86 -0
  88. package/templates/platforms/claude-code/settings.json +10 -0
  89. package/templates/project-types/fintech/config.yaml +1 -1
  90. package/templates/project-types/mobile-app/config.yaml +1 -1
  91. package/templates/project-types/web-app/config.yaml +1 -1
  92. 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
- Sub-PRD 작성/보강을 위한 소크라틱 심층 인터뷰 스킬.
5
- 기능별 Why/What/How를 체계적으로 파고들어 모호한 요구사항을 구체화.
6
- Use when: "기능 상세화", "요구사항 인터뷰", "PRD 보강", "grill", "기능 정의",
7
- "Sub-PRD 작성", "기능 스펙 잡기", 또는 PRD 기능 인덱스에 빈 항목이 있을 때.
8
- version: "1.0.0"
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
- PRD의 기능을 하나씩 깊이 파고들어 Sub-PRD를 작성하거나 보강하는 스킬.
16
- "질문을 통해 답을 끌어낸다"는 소크라틱 방법론을 따른다.
20
+ 질문을 통해 답을 끌어내는 소크라틱 방법론으로 PRD와 Sub-PRD를 작성한다.
21
+ PRD가 부실하면 위에 세워지는 모든 것이 부실해진다.
17
22
 
18
- ## When to Use
23
+ ## Mode Detection (자동)
19
24
 
20
- - 새 기능의 Sub-PRD를 처음 작성할 때
21
- - 기존 Sub-PRD의 빈 섹션을 채울 때
22
- - 모호한 요구사항을 구체화해야
23
- - PRD 기능 인덱스에 Link가 비어있을
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
- ## Process
33
+ 명시적 모드: `/tsq-grill prd` | `/tsq-grill sub` | `/tsq-grill` (자동)
26
34
 
27
- ### Phase 1: 대상 선정
35
+ ## PRD Mode 프로젝트 전체 인터뷰
28
36
 
29
- 1. `.timsquad/ssot/prd.md`의 기능 인덱스 테이블 읽기
30
- 2. Sub-PRD가 없거나 빈 기능 식별
31
- 3. 사용자에게 인터뷰 대상 기능 확인 (복수 선택 가능)
37
+ PRD가 없거나 프로젝트 초기 단계에서 사용.
32
38
 
33
- ### Phase 2: 디자인 트리 인터뷰
39
+ **질문 트리는 `references/interview-guide.md`를 Read하여 참조한다.**
34
40
 
35
- 기능마다 3단계 깊이로 질문한다. 한 번에 2-3개 질문, 답변 받으면 다음 깊이로.
41
+ ### 인터뷰 원칙
42
+ - 질문 트리는 **가이드**이지 체크리스트가 아니다
43
+ - 이미 답변된 영역은 건너뛴다
44
+ - 한 번에 2-3개 질문만. 사용자가 부담을 느끼면 안 된다
45
+ - 프로젝트 특성에 맞는 질문을 추가한다
36
46
 
37
- ```
38
- Why (목적)
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
- - 번에 질문 2-3개만 (과부하 방지)
58
- - 사용자 답변을 요약해서 확인받기 ("~라는 뜻이 맞나요?")
59
- - 모호한 답변에는 구체적 예시로 재질문
60
- - "모르겠다"는 답변도 유효 결정 보류로 기록
54
+ 1. prd.md를 읽고 빈 섹션 / TBD 항목 목록을 사용자에게 제시
55
+ 2. 사용자가 보강할 항목 선택
56
+ 3. 해당 항목에 대해 소크라틱 인터뷰 진행
57
+ 4. 결과를 prd.md에 반영
58
+ 5. 사용자 리뷰 요청 (Human Checkpoint)
61
59
 
62
- ### Phase 3: Sub-PRD 생성
60
+ ## Sub-PRD Mode — 기능별 인터뷰
63
61
 
64
- 인터뷰 결과를 `.timsquad/ssot/prd/[feature].md`로 구조화:
62
+ **질문 트리는 `references/interview-guide.md`를 Read하여 참조한다.**
65
63
 
66
- 1. `ssot/prd/_template.md` 복사
67
- 2. 인터뷰 답변으로 섹션 채우기
68
- 3. Mapped Artifacts는 링크로 두되 구조 유지
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
- ### Phase 4: PRD 인덱스 업데이트
70
+ ## 질문 방식 원칙 (공통)
72
71
 
73
- `prd.md`의 기능 인덱스 테이블에 새 Sub-PRD 링크 추가.
72
+ - **한 번에 질문 2-3개만** 질문 폭탄은 대충 답하게 만든다
73
+ - **답변을 요약해서 확인** — 에이전트 해석이 맞는지 검증
74
+ - **모호하면 구체적 예시로 재질문** — "사용자 경험 개선"은 PRD에 쓸 수 없다
75
+ - **"모르겠다"도 유효** — TBD로 기록 + 결정 시점 명시
76
+ - **가정하지 않는다** — 선택지 제시, 사용자가 고르게 한다
74
77
 
75
78
  ## Output
76
79
 
77
- - `.timsquad/ssot/prd/[feature].md` Sub-PRD 파일
78
- - `prd.md` 기능 인덱스 업데이트
79
- - 인터뷰 로그: `.timsquad/logs/grill-[feature]-[date].md`
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 생성 후 사용자에게 리뷰 요청 (Human Checkpoint)
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.0.0"
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만 존재 (`[Resource Name]`, `TBD`, `example.com` 등이 50%+)
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 현황(⬜/🟨/✅)을 보여주고 3가지 선택지 제시:
32
+ 온보딩 시 SSOT 현황을 보여주고 3가지 선택지 제시:
33
33
  1. 온보딩 시작 (권장) — PRD부터 순서대로
34
34
  2. 특정 문서만 작성
35
35
  3. 건너뛰기
36
36
 
37
37
  ## 온보딩 프로세스
38
38
 
39
- **작성 우선순위**: prd → requirements → data-design → service-spec → 타입별 필수
39
+ **우선순위**: 개발환경(강제) prd(grill 강제) Sub-PRD(grill 강제) → requirements → data-design → service-spec
40
40
 
41
- 타입별 추가 우선 문서는 `references/onboarding-questions.md` 참조.
41
+ **각 Step의 상세 절차는 `references/onboarding-steps.md`를 Read하여 참조한다.**
42
42
 
43
- **각 문서 작성 흐름**:
44
- 1. **인터뷰**: 핵심 질문 3-5개 (`references/onboarding-questions.md`의 ★ 필수 질문)
45
- 2. **초안 생성**: 답변으로 SSOT 템플릿 placeholder 채움
46
- 3. **확인**: 초안 보여주고 수정 수렴
47
- 4. **저장**: `.timsquad/ssot/{name}.md`
48
- 5. **다음 문서**: 계속 여부 확인
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
- 모든 SSOT 문서 filled + grill.pending 비어있으면 온보딩 완료. 이후:
52
+ ## 온보딩 완료 자동 전환
80
53
 
81
- 1. **`/tsq-decompose` 자동 안내**: "온보딩 완료. `/tsq-decompose`로 Phase-Sequence-Task 실행 계획을 생성하시겠습니까?"
82
- 2. 사용자 승인 시 `/tsq-decompose` 실행 (Sub-PRD → DAG → planning.md)
83
- 3. planning.md 확정 후 정상 파이프라인 진행 (Controller 경유 위임)
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
  - **모호한 경우** → 사용자에게 선택지 제시