@simplysm/sd-claude 14.0.47 → 14.0.49
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/{claude/references/sd-simplysm14/sd-claude/usage.md → README.md} +2 -2
- package/claude/rules/sd-claude-rules.md +25 -10
- package/claude/rules/sd-options.md +11 -6
- package/claude/sd-subagent-start.sh +6 -0
- package/claude/settings.json +1 -12
- package/claude/skills/sd-check/SKILL.md +43 -12
- package/claude/skills/sd-claude-docs/SKILL.md +30 -58
- package/claude/skills/sd-claude-docs/references/package-claudemd.md +12 -0
- package/claude/skills/sd-claude-docs/references/package-doc-gen.md +26 -13
- package/claude/skills/sd-commit/SKILL.md +1 -1
- package/claude/skills/sd-debug/SKILL.md +5 -3
- package/claude/skills/sd-deliverable/SKILL.md +1 -1
- package/claude/skills/sd-dev/SKILL.md +14 -9
- package/claude/skills/sd-doc-extract/SKILL.md +8 -10
- package/claude/skills/sd-doc-extract/_common.py +8 -1
- package/claude/skills/sd-doc-extract/_extract_docx.py +74 -34
- package/claude/skills/sd-doc-extract/_extract_pdf.py +12 -1
- package/claude/skills/sd-doc-extract/_extract_pptx.py +103 -23
- package/claude/skills/sd-doc-extract/_extract_xlsb.py +93 -4
- package/claude/skills/sd-doc-extract/_extract_xlsx.py +98 -36
- package/claude/skills/sd-doc-extract/extract.py +22 -3
- package/claude/skills/sd-inner-clarify/SKILL.md +78 -0
- package/claude/skills/sd-inner-debug/SKILL.md +1 -1
- package/claude/skills/sd-inner-review/SKILL.md +13 -0
- package/claude/skills/sd-issue/SKILL.md +1 -1
- package/claude/skills/sd-outlook/SKILL.md +1 -1
- package/claude/skills/sd-plan/SKILL.md +50 -17
- package/claude/skills/sd-prompt/SKILL.md +180 -178
- package/claude/skills/sd-prompt/references/eval-runner.md +5 -30
- package/claude/skills/sd-prompt/references/sd-eval-env-template.md +23 -0
- package/claude/skills/sd-refactor/SKILL.md +2 -2
- package/claude/skills/sd-tdd/SKILL.md +45 -16
- package/claude/skills/sd-use/SKILL.md +84 -80
- package/claude/skills/sd-wbs/SKILL.md +84 -27
- package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/assets.md +2 -3
- package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/hooks.md +7 -6
- package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/scripts.md +1 -9
- package/package.json +3 -2
- package/scripts/sync.mjs +4 -2
- package/claude/references/sd-simplysm14/angular/docs/bootstrap.md +0 -48
- package/claude/references/sd-simplysm14/angular/docs/directives.md +0 -236
- package/claude/references/sd-simplysm14/angular/docs/features.md +0 -379
- package/claude/references/sd-simplysm14/angular/docs/pipes.md +0 -32
- package/claude/references/sd-simplysm14/angular/docs/plugins.md +0 -37
- package/claude/references/sd-simplysm14/angular/docs/provider-types.md +0 -283
- package/claude/references/sd-simplysm14/angular/docs/providers.md +0 -379
- package/claude/references/sd-simplysm14/angular/docs/styling.md +0 -222
- package/claude/references/sd-simplysm14/angular/docs/type-utilities.md +0 -250
- package/claude/references/sd-simplysm14/angular/docs/ui-data.md +0 -275
- package/claude/references/sd-simplysm14/angular/docs/ui-form.md +0 -490
- package/claude/references/sd-simplysm14/angular/docs/ui-layout.md +0 -140
- package/claude/references/sd-simplysm14/angular/docs/ui-navigation.md +0 -273
- package/claude/references/sd-simplysm14/angular/docs/ui-overlay.md +0 -157
- package/claude/references/sd-simplysm14/angular/docs/ui-visual.md +0 -127
- package/claude/references/sd-simplysm14/angular/docs/utils.md +0 -295
- package/claude/references/sd-simplysm14/angular/usage.md +0 -489
- package/claude/references/sd-simplysm14/capacitor-plugin-auto-update/usage.md +0 -182
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/file-operations.md +0 -154
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/permissions.md +0 -84
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/storage-paths.md +0 -107
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/types.md +0 -83
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/usage.md +0 -133
- package/claude/references/sd-simplysm14/capacitor-plugin-intent/usage.md +0 -203
- package/claude/references/sd-simplysm14/capacitor-plugin-usb-storage/usage.md +0 -258
- package/claude/references/sd-simplysm14/core-browser/usage.md +0 -306
- package/claude/references/sd-simplysm14/core-common/docs/errors.md +0 -82
- package/claude/references/sd-simplysm14/core-common/docs/extensions.md +0 -167
- package/claude/references/sd-simplysm14/core-common/docs/features.md +0 -136
- package/claude/references/sd-simplysm14/core-common/docs/types.md +0 -245
- package/claude/references/sd-simplysm14/core-common/docs/utils.md +0 -591
- package/claude/references/sd-simplysm14/core-common/usage.md +0 -255
- package/claude/references/sd-simplysm14/core-node/docs/child-process.md +0 -182
- package/claude/references/sd-simplysm14/core-node/docs/features.md +0 -214
- package/claude/references/sd-simplysm14/core-node/docs/file-system.md +0 -509
- package/claude/references/sd-simplysm14/core-node/docs/file-watching.md +0 -139
- package/claude/references/sd-simplysm14/core-node/docs/logging.md +0 -180
- package/claude/references/sd-simplysm14/core-node/docs/path.md +0 -176
- package/claude/references/sd-simplysm14/core-node/docs/utilities-cpx.md +0 -194
- package/claude/references/sd-simplysm14/core-node/docs/utilities-fsx.md +0 -469
- package/claude/references/sd-simplysm14/core-node/docs/utilities-pathx.md +0 -151
- package/claude/references/sd-simplysm14/core-node/docs/worker-threads.md +0 -334
- package/claude/references/sd-simplysm14/core-node/docs/worker.md +0 -205
- package/claude/references/sd-simplysm14/core-node/usage.md +0 -259
- package/claude/references/sd-simplysm14/excel/docs/core-classes.md +0 -453
- package/claude/references/sd-simplysm14/excel/docs/types.md +0 -459
- package/claude/references/sd-simplysm14/excel/docs/utilities.md +0 -194
- package/claude/references/sd-simplysm14/excel/docs/wrapper.md +0 -73
- package/claude/references/sd-simplysm14/excel/usage.md +0 -134
- package/claude/references/sd-simplysm14/lint/usage.md +0 -130
- package/claude/references/sd-simplysm14/orm-common/docs/core.md +0 -188
- package/claude/references/sd-simplysm14/orm-common/docs/expression.md +0 -190
- package/claude/references/sd-simplysm14/orm-common/docs/models.md +0 -17
- package/claude/references/sd-simplysm14/orm-common/docs/query-builder.md +0 -97
- package/claude/references/sd-simplysm14/orm-common/docs/queryable-executable.md +0 -250
- package/claude/references/sd-simplysm14/orm-common/docs/schema-builders.md +0 -364
- package/claude/references/sd-simplysm14/orm-common/docs/types.md +0 -522
- package/claude/references/sd-simplysm14/orm-common/usage.md +0 -229
- package/claude/references/sd-simplysm14/orm-node/docs/connections.md +0 -137
- package/claude/references/sd-simplysm14/orm-node/docs/core.md +0 -131
- package/claude/references/sd-simplysm14/orm-node/docs/types.md +0 -173
- package/claude/references/sd-simplysm14/orm-node/usage.md +0 -143
- package/claude/references/sd-simplysm14/sd-cli/usage.md +0 -782
- package/claude/references/sd-simplysm14/service-client/docs/features.md +0 -217
- package/claude/references/sd-simplysm14/service-client/docs/main.md +0 -148
- package/claude/references/sd-simplysm14/service-client/docs/protocol.md +0 -53
- package/claude/references/sd-simplysm14/service-client/docs/transport.md +0 -131
- package/claude/references/sd-simplysm14/service-client/docs/types.md +0 -129
- package/claude/references/sd-simplysm14/service-client/usage.md +0 -202
- package/claude/references/sd-simplysm14/service-common/docs/app-structure.md +0 -175
- package/claude/references/sd-simplysm14/service-common/docs/events.md +0 -64
- package/claude/references/sd-simplysm14/service-common/docs/protocol.md +0 -331
- package/claude/references/sd-simplysm14/service-common/docs/service-types.md +0 -90
- package/claude/references/sd-simplysm14/service-common/docs/types.md +0 -19
- package/claude/references/sd-simplysm14/service-common/usage.md +0 -154
- package/claude/references/sd-simplysm14/service-server/docs/auth.md +0 -64
- package/claude/references/sd-simplysm14/service-server/docs/core.md +0 -174
- package/claude/references/sd-simplysm14/service-server/docs/legacy.md +0 -25
- package/claude/references/sd-simplysm14/service-server/docs/main.md +0 -88
- package/claude/references/sd-simplysm14/service-server/docs/protocol.md +0 -33
- package/claude/references/sd-simplysm14/service-server/docs/services.md +0 -94
- package/claude/references/sd-simplysm14/service-server/docs/transport-http.md +0 -93
- package/claude/references/sd-simplysm14/service-server/docs/transport-socket.md +0 -119
- package/claude/references/sd-simplysm14/service-server/docs/types.md +0 -36
- package/claude/references/sd-simplysm14/service-server/docs/utils.md +0 -22
- package/claude/references/sd-simplysm14/service-server/usage.md +0 -171
- package/claude/references/sd-simplysm14/storage/usage.md +0 -301
- package/claude/references/sd-simplysm14.md +0 -35
- package/claude/rules/sd-clarify.md +0 -23
- package/claude/sd-session-start.sh +0 -10
- /package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/cli.md +0 -0
|
@@ -38,7 +38,7 @@ npm install @simplysm/sd-claude
|
|
|
38
38
|
|
|
39
39
|
| API | Type | Description |
|
|
40
40
|
|-----|------|-------------|
|
|
41
|
-
| `sd-
|
|
41
|
+
| `sd-subagent-start.sh` | SubagentStart hook | subagent 시작 시 `CLAUDE.md` 내용을 출력하여 subagent가 프로젝트 지침을 참조하도록 안내 |
|
|
42
42
|
| `sd-check-write.py` | PreToolUse hook (Write) | 기존 파일에 Write 도구 사용 시 차단하고 Edit 도구 사용을 안내 |
|
|
43
43
|
| `sd-check-bash.py` | PreToolUse hook (Bash) | 금지된 명령어 차단 (git stash/checkout/restore/reset/clean, cd, npx tsc, npx eslint) |
|
|
44
44
|
| `sd-check-forbidden-files.py` | PreToolUse hook (Write/Edit) | `tsconfig.json`, `eslint.config.ts` 등 보호 파일 수정 차단 |
|
|
@@ -79,6 +79,6 @@ pnpm add -D @simplysm/sd-claude
|
|
|
79
79
|
# rules/sd-claude-rules.md
|
|
80
80
|
# skills/sd-commit/, sd-check/, ...
|
|
81
81
|
# references/sd-*.md
|
|
82
|
-
# sd-
|
|
82
|
+
# sd-subagent-start.sh, sd-check-write.py, ...
|
|
83
83
|
# settings.json (훅 자동 등록)
|
|
84
84
|
```
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
# CRITICAL:
|
|
1
|
+
# CRITICAL: 무단 진행·추측 금지
|
|
2
2
|
|
|
3
3
|
- 어떠한 경우에도 지침을 무시하고 건너뛰지 않는다. 혼자만의 판단으로 무단 진행 절대(NEVER) 금지
|
|
4
4
|
- 지침이 충돌등의 이유로 애매하면 사용자에게 질문한다.
|
|
5
|
-
- 근거없는 답변 금지. 답변에는 항상 그 근거가 포함되어야 함.
|
|
6
5
|
- 코드를 수정할 때, 왜 그 코드가 문제인지 근거를 먼저 확인하고 수정한다. "일단 바꿔보고 되면 넘어가자" 식의 추측성 시행착오를 절대(NEVER) 금지한다.
|
|
7
6
|
|
|
7
|
+
# CRITICAL: 사실·지침 날조 금지
|
|
8
|
+
|
|
9
|
+
**존재하지 않는 것을 지어내지 않는다(NEVER).**
|
|
10
|
+
|
|
11
|
+
- 인용하는 파일·함수·API·라이브러리 시그니처는 반드시 Read/Grep으로 **직접 확인한 것**만 쓴다. 기억·일반 지식·추측 금지.
|
|
12
|
+
- 사용자가 명시한 적 없는 지침/규칙을 "있는 것처럼" 만들어 따르지 않는다. 룰은 `.claude/rules/`, `CLAUDE.md`, 사용자 발화에만 존재한다. 본인이 추론한 베스트 프랙티스를 "규칙"으로 격상시키지 않는다.
|
|
13
|
+
- 불확실하면 "확인 필요" 또는 "추측"이라 명시하고, 가능하면 도구로 검증한다. 모르면 모른다고 말한다.
|
|
14
|
+
- 답변·코드·계획에 들어가는 모든 사실 주장은 **출처(파일경로:라인 / 도구 결과 / 사용자 발화)** 를 응답에 인라인으로 인용한다. 특히 조회로 얻은 존재·부재 단정은 조회 도구·대상·결과를 응답에 함께 표기한다 (예: "Grep `reverseBits` in `packages/core-common` → 결과 없음"). 출처를 댈 수 없는 주장은 하지 않는다.
|
|
15
|
+
|
|
8
16
|
# CRITICAL: 변경사항 되돌리기 금지
|
|
9
17
|
|
|
10
18
|
**git diff에 나타나는 변경사항을 임의로 되돌리지 않는다(NEVER).**
|
|
@@ -39,9 +47,16 @@
|
|
|
39
47
|
|
|
40
48
|
# 대화 규칙
|
|
41
49
|
|
|
42
|
-
- 사용자의 질문에 답변만 하라. 절대 임의로 다음단계(특히, 코드변경)로 넘어가지 않는다(NEVER). 답변만 하고 사용자의 명시적 요청을 기다린다.
|
|
50
|
+
- 사용자의 질문에 답변만 하라. 절대 지침 없이 임의로 다음단계(특히, 코드변경)로 넘어가지 않는다(NEVER). 답변만 하고 사용자의 명시적 요청을 기다린다.
|
|
43
51
|
- 사용자의 질문은 동의를 구하는것이 아니다. 무조건적 동의하려하지 말고, 비판적으로 사고하여 답변한다.
|
|
44
|
-
-
|
|
52
|
+
- 사용자 요청의 의도가 불명확할 때는 `/sd-inner-clarify` 스킬을 호출하여 명확화한다. 단순 정보 조회처럼 의도가 명확한 질문에는 위 "답변만 하라" 규칙을 따른다. (절대 추측하지 않는다.)
|
|
53
|
+
- **CRITICAL: 맥락에 맞는 언어로 말한다**. 지금 대화의 층위가 무엇인지 먼저 파악하고 그 층위의 용어로 말한다.
|
|
54
|
+
- 업무 기능·요구사항 논의 → 업무 용어 (사용자가 화면에서 뭘 하는지)
|
|
55
|
+
- DB 스키마 설계 → 테이블·컬럼명
|
|
56
|
+
- 코드 구현 → 함수·클래스명
|
|
57
|
+
- 층위를 섞지 않는다. 업무 결정을 하면서 DB 컬럼명부터 던지거나, 스키마 설계를 하면서 업무 용어만 쓰지 않는다.
|
|
58
|
+
- **한국 개발 현장 통용 용어 우선**: 한국 개발 현장에서 일반적으로 통용되는 용어를 우선 사용한다. 그런 용어가 없거나 불확실할 때는 한글 음차("시딩") 대신 영어 원문("seeding")을 그대로 쓰고, 처음 쓸 때 한 줄로 풀어 설명한다.
|
|
59
|
+
- 사용자가 "무슨 소린지 모르겠다"는 취지로 되물으면, 같은 말을 반복하지 말고 **한 층위 위**(구현→스키마→업무)로 올라가서 다시 설명한다.
|
|
45
60
|
|
|
46
61
|
# Playwright
|
|
47
62
|
|
|
@@ -55,14 +70,14 @@
|
|
|
55
70
|
- 테스트 작성 시 `.claude/references/sd-testing.md`를 읽고 따른다.
|
|
56
71
|
- 프론트엔드 UI 코드 작성·수정 시 `.claude/references/sd-frontend-design.md`를 읽고 따른다.
|
|
57
72
|
- 디버깅 시 `/sd-inner-debug` 스킬을 호출한다.
|
|
58
|
-
-
|
|
73
|
+
- **CRITICAL: 코딩·코드예제 출력 시, 반드시 Grep/Glob/Read로 코드베이스의 유사 코드를 먼저 검색·확인한 뒤 동일 패턴으로 작성한다.** "이미 알고 있다", "일반적인 패턴이다" 등의 이유로 검색을 생략하는 것은 위반이다.
|
|
59
74
|
- 코드를 수정할 경우 수정에 의한 사이드이펙트를 항상 고려한다. (예, html구조가 바뀌면 css의 selector도 바뀌어야함)
|
|
60
75
|
- 함수 작성 혹은 함수내 기능 추가시 단일 책임 원칙을 따른다. (함수가 이름에서 드러나지 않는 일을 몰래 해선 안됨)
|
|
61
76
|
- `src/`에는 프로덕션 코드만 둔다. 테스트에서만 사용하는 파일(타입 선언, 헬퍼 등)은 `tests/`에 위치시킨다.
|
|
62
77
|
- **barrel export 금지**: `src/` 루트의 `index.ts`를 제외하고, 하위 폴더에 re-export 전용 `index.ts`를 만들지 않는다. 패키지 루트 `index.ts`에서 개별 파일 경로를 직접 export한다.
|
|
63
78
|
- 다른 패키지의 타입등 re-export 금지.
|
|
64
79
|
- **dynamic import (`import()`) 사용 금지**: 조건부 peer dependency 로딩, 외부 ts 파일 읽기 등 정적 import가 불가능한 경우를 제외하고 `import()` 사용 금지. 정적 `import` 문을 사용한다.
|
|
65
|
-
- **CRITICAL: 구조화된 문법 처리 시 파서 사용 필수**: TypeScript/JavaScript, HTML, CSS, JSON, YAML 등 **문법 구조가 정의된 텍스트**를 분석·변환할 때는 반드시 해당 언어의 **공식 파서/AST**(예: TypeScript Compiler API, `@angular/compiler`, `postcss`, `parse5`, `JSON.parse` 등)를 사용한다. 정규식·문자열 치환으로 **우회 금지(NEVER)**. 정규식은 주석·문자열·중첩 구조·이스케이프 등 엣지 케이스에서 반드시
|
|
80
|
+
- **CRITICAL: 구조화된 문법 처리 시 파서 사용 필수**: TypeScript/JavaScript, HTML, CSS, JSON, YAML 등 **문법 구조가 정의된 텍스트**를 분석·변환할 때는 반드시 해당 언어의 **공식 파서/AST**(예: TypeScript Compiler API, `@angular/compiler`, `postcss`, `parse5`, `JSON.parse` 등)를 사용한다. 정규식·문자열 치환으로 **우회 금지(NEVER)**. 정규식은 주석·문자열·중첩 구조·이스케이프 등 엣지 케이스에서 반드시 깨진다. 파서 사용이 어렵거나 오버헤드가 크다고 판단되면 **사용자에게 먼저 질문**한다.
|
|
66
81
|
- **null/undefined 비교 규칙**: `===`/`!==` 사용이 기본이지만 **null/undefined 비교만 예외**이다. 일반 값 비교는 `===`/`!==`, null/undefined 검사는 `== null`/`!= null`을 사용한다. `=== null`, `!== null`, `=== undefined`, `!== undefined`는 lint 에러이다.
|
|
67
82
|
- `value === "hello"` ○ (일반 값 비교 → `===`)
|
|
68
83
|
- `value == null` ○ (null/undefined 검사 → `==`)
|
|
@@ -83,11 +98,11 @@
|
|
|
83
98
|
|
|
84
99
|
# @simplysm 패키지 참조
|
|
85
100
|
|
|
86
|
-
- `@simplysm/*` 패키지 사용 시, 해당
|
|
87
|
-
- v14:
|
|
101
|
+
- `@simplysm/*` 패키지 사용 시, 해당 패키지의 `README.md` 및 `docs/` 문서를 읽는다.
|
|
102
|
+
- v14: `node_modules/@simplysm/{패키지명}/README.md` (분량이 많은 항목은 `node_modules/@simplysm/{패키지명}/docs/*.md`)
|
|
88
103
|
- v12: `.claude/references/sd-simplysm12.md`
|
|
89
|
-
- 해당 문서에는
|
|
90
|
-
- 주의사항: 해당 패키지의 `CLAUDE.md
|
|
104
|
+
- 해당 문서에는 사용법 및 지침이 기록되어 있다.
|
|
105
|
+
- 주의사항: 해당 패키지의 `CLAUDE.md`는 모노레포 **내부 개발자용 컨텍스트**이므로 소비앱에서 이를 읽지 않는다. 소비앱은 `README.md`와 `docs/`만 참조한다.
|
|
91
106
|
- simplysm 패키지의 경우 context7은 구버전일 수 있으니 사용을 지양한다.
|
|
92
107
|
|
|
93
108
|
# 프로젝트 경계
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
# sd-options: 선택지 제시 규칙
|
|
2
2
|
|
|
3
|
-
사용자에게 선택지를 제시하는 **모든 상황**에서 아래 규칙을 따른다.
|
|
3
|
+
사용자에게 질문, 제안등 선택지를 제시하는 **모든 상황**에서 아래 규칙을 따른다.
|
|
4
4
|
|
|
5
5
|
- 각 선택지에 대해 **장단점/트레이드오프/10점 만점 점수**를 포함한다
|
|
6
|
-
- **"수행 안 함"**
|
|
7
|
-
- **결정 대상**을 먼저 명시한 뒤, 선택지 정보를 아래 **근거 제시 규칙**에 따라 출력하고, `---` 구분선을
|
|
6
|
+
- **"수행 안 함"** 선택지를 반드시 포함한다 — 수정/변경을 하지 않는 경우에도 동일하게 장단점과 점수를 매긴다
|
|
7
|
+
- **결정 대상**을 먼저 명시한 뒤, 선택지 정보를 아래 **근거 제시 규칙**에 따라 출력하고, `---` 구분선을 출력한다.
|
|
8
|
+
- **CRITICAL**: 선택지 출력 후에는 반드시 `AskUserQuestion` tool을 즉시 호출하여 사용자에게 선택을 요구한다
|
|
9
|
+
- 텍스트로 "진행할까요?", "어떤 걸로 할까요?", "선택해주세요" 등을 묻고 사용자 응답을 기다리는 것은 **위반**이다
|
|
8
10
|
|
|
9
11
|
## 결정 대상 명시 규칙
|
|
10
12
|
|
|
11
13
|
선택지를 나열하기 **전에**, 이 결정이 **어디의 무엇**에 대한 것인지 한 줄로 명시한다.
|
|
12
14
|
|
|
13
|
-
- 형식: `**결정 대상:** {파일경로:라인번호} — {대상 설명}`
|
|
14
|
-
-
|
|
15
|
+
- 형식: `**결정 대상:** {파일경로:라인번호} — {대상 설명}` (대상이 여러 라인이어도 대표 라인/범위를 반드시 명시)
|
|
16
|
+
- 예시 (단일 라인): `**결정 대상:** packages/angular/src/controls/input/sd-textfield.ts:45 — validate() 메서드의 에러 처리 방식`
|
|
17
|
+
- 예시 (복수 라인): `**결정 대상:** .claude/rules/sd-options.md:8,31 — CRITICAL 키워드 사용 방식`
|
|
18
|
+
- 예시 (범위): `**결정 대상:** .claude/skills/sd-use/SKILL.md:43-68 — 스킬 카탈로그 섹션`
|
|
15
19
|
|
|
16
20
|
## 근거 제시 규칙
|
|
17
21
|
|
|
@@ -27,11 +31,12 @@
|
|
|
27
31
|
## 복수 결정사항 처리
|
|
28
32
|
|
|
29
33
|
- **CRITICAL: 결정사항이 여러 개일 경우, 반드시 한 번에 하나의 결정사항만 제시하고, 사용자 선택 후 다음으로 넘어간다.**
|
|
34
|
+
- 선택지 제시 후 `AskUserQuestion` 호출로 **응답을 완전히 종료**한다. 다음 결정사항은 **새 응답**에서 제시한다 (같은 응답 내 연속 제시 금지)
|
|
30
35
|
- 이전 선택 결과에 따라 후속 결정사항이 변경·추가·삭제될 수 있으므로, 매 단계마다 남은 결정사항을 재평가한다
|
|
31
36
|
- 남은 결정사항이 몇 건인지 알려준다 (예: "1/3건 완료")
|
|
32
37
|
|
|
33
38
|
## 점수 기준
|
|
34
39
|
|
|
35
40
|
- 모든 점수는 **10점 만점**이다
|
|
36
|
-
- LLM이 맥락에 맞는 관점(축)을 3개 이상 선정하여 관점별 점수를 매기고,
|
|
41
|
+
- LLM이 맥락에 맞는 관점(축)을 3개 이상 선정하여 관점별 점수를 매기고, **축별 점수를 반드시 노출한 뒤 평균을 10점 만점으로 함께 표시**한다 (최종 점수만 쓰는 것 금지)
|
|
37
42
|
- **하나의 선택지를 명시적으로 추천** — 추천 사유를 한 줄로 요약
|
package/claude/settings.json
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"hooks": {
|
|
3
|
-
"SessionStart": [
|
|
4
|
-
{
|
|
5
|
-
"matcher": "startup|resume|clear|compact",
|
|
6
|
-
"hooks": [
|
|
7
|
-
{
|
|
8
|
-
"type": "command",
|
|
9
|
-
"command": "bash .claude/sd-session-start.sh"
|
|
10
|
-
}
|
|
11
|
-
]
|
|
12
|
-
}
|
|
13
|
-
],
|
|
14
3
|
"PreToolUse": [
|
|
15
4
|
{
|
|
16
5
|
"matcher": "Edit|Write",
|
|
@@ -45,7 +34,7 @@
|
|
|
45
34
|
"hooks": [
|
|
46
35
|
{
|
|
47
36
|
"type": "command",
|
|
48
|
-
"command": "bash .claude/sd-
|
|
37
|
+
"command": "bash .claude/sd-subagent-start.sh"
|
|
49
38
|
}
|
|
50
39
|
]
|
|
51
40
|
}
|
|
@@ -13,19 +13,28 @@ description: typecheck, lint, test를 실행하고 에러 발생시 사용자
|
|
|
13
13
|
|
|
14
14
|
#### 에러 처리 범위
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- sd-check
|
|
19
|
-
-
|
|
20
|
-
|
|
16
|
+
발견된 에러가 **수정 대상**인지 판단하는 기준:
|
|
17
|
+
|
|
18
|
+
- **sd-check 단독 실행 (이 대화에서 sd-check 호출 전 Claude의 코드 수정이 없음)**: 발견된 **모든 에러**가 수정 대상. "수정 대상 외"로 판단하여 스킵 금지(NEVER).
|
|
19
|
+
- **직전 대화 내 코드 수정이 있음**: 해당 수정과 **관련된 에러만** 수정 대상. 무관한 에러는 조용히 스킵하되, 사용자에게 **보고하지 않는다** (그냥 넘어간다).
|
|
20
|
+
|
|
21
|
+
판단 제외 — "직전 수정"에 해당하지 않는 것:
|
|
22
|
+
- git status의 미커밋 변경, 과거 커밋 변경
|
|
23
|
+
- sd-check 내부(typecheck/lint/test 단계)에서 발생한 수정
|
|
21
24
|
|
|
22
25
|
#### 에스컬레이션 규칙
|
|
23
26
|
|
|
24
|
-
**CRITICAL:
|
|
27
|
+
**CRITICAL: 아래 2가지 경우에만 사용자에게 보고/선택지 제시한다. 그 외 사유로는 절대(NEVER) 보고·질문·선택지 제시 금지.**
|
|
28
|
+
|
|
29
|
+
화이트리스트 (이 2가지가 전부):
|
|
30
|
+
1. **동일/유사 에러 2회 반복**: 1회차에 `/sd-inner-debug`로 근본 원인 분석 및 수정 시도 → 2회차 재발 시 중단하고 분석·시도 내역 보고.
|
|
31
|
+
2. **원인 특정 불가**: 추측으로 수정 시도 금지, 즉시 보고.
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
33
|
+
**금지 사항 (자주하는 환각)**:
|
|
34
|
+
- "본 작업 범위 밖이므로 보고", "수정 대상 외이므로 보고" 같은 규칙은 **존재하지 않는다**. 화이트리스트에 없는 사유로 보고/선택지 제시 금지.
|
|
35
|
+
- 수정 대상 판단은 위 "에러 처리 범위" 섹션을 그대로 따른다. 임의 해석 금지.
|
|
36
|
+
- 규칙을 인용할 때 기억에 의존하지 말고, 반드시 이 파일을 Read한 원문을 인용한다.
|
|
37
|
+
- 화이트리스트에 없는 사유로 `AskUserQuestion`/선택지 블록을 만들지 않는다.
|
|
29
38
|
|
|
30
39
|
### 출력 캡처 규칙
|
|
31
40
|
|
|
@@ -72,7 +81,7 @@ Bash 출력이 길면 잘리므로 **반드시 파일로 리다이렉트**한
|
|
|
72
81
|
탐지된 check 스크립트:
|
|
73
82
|
1. typecheck → pnpm run typecheck
|
|
74
83
|
2. lint → pnpm run lint
|
|
75
|
-
3. test → pnpm vitest run
|
|
84
|
+
3. test → pnpm vitest run --reporter=dot --silent=passed-only
|
|
76
85
|
```
|
|
77
86
|
|
|
78
87
|
탐지된 스크립트가 없으면 오류 메시지를 출력하고 종료한다.
|
|
@@ -97,6 +106,28 @@ typecheck 명령어를 실행한다. (`출력 캡처 규칙`에 따라 파일로
|
|
|
97
106
|
- 에러 발생 시: `에러 분석 및 수정`에 따라, 테스트 실패의 원인을 분석하고 코드를 수정한다.
|
|
98
107
|
- 코드 수정후, 테스트 변경이 누락되었을 수 있음. 의도파악을 위해서 history확인이 필요할 수 있다.
|
|
99
108
|
|
|
100
|
-
## Step 5:
|
|
109
|
+
## Step 5: .verify.md 재검증
|
|
110
|
+
|
|
111
|
+
`에러 처리 범위` 규칙에 따라 대상 `.verify.md`를 결정한다:
|
|
112
|
+
- sd-check 단독 실행: 모든 `.verify.md`
|
|
113
|
+
- 직전 수정 있음: 수정과 관련된 `.verify.md`만
|
|
114
|
+
|
|
115
|
+
각 `.verify.md`는 체크박스가 없는 검증 항목 명세이다. 항목을 순회하며 LLM이 매번 재수행한다 — 코드를 읽고, 명령을 실행하고, 설정을 확인하여 각 항목의 통과 여부를 판단한다. 판단 결과는 파일에 기록하지 않는다 (파일은 명세 그대로 유지).
|
|
116
|
+
|
|
117
|
+
- 문제 발견 시: test 실패와 동일하게 `에러 분석 및 수정` 규칙을 따른다.
|
|
118
|
+
|
|
119
|
+
## Step 6: .spec.md 정합성 확인
|
|
120
|
+
|
|
121
|
+
`에러 처리 범위` 규칙에 따라 대상 `.spec.md`를 결정한다 (Step 5와 동일).
|
|
122
|
+
|
|
123
|
+
`.spec.md`는 사용자 수동 검증 문서이다. 각 문서의 전제 조건·수행 절차·기대 결과를 읽고, 관련 코드를 읽어 **의미적 정합성**을 LLM이 추론한다:
|
|
124
|
+
- 절차에 등장하는 UI 요소·메서드·이벤트가 실제 코드에 존재하는가
|
|
125
|
+
- 기대 결과가 현재 코드 동작과 일치하는가
|
|
126
|
+
|
|
127
|
+
- 불일치 발견 시: 사용자에게 보고한다. **자동 수정 금지** — 코드가 맞는지 문서가 맞는지 LLM이 판단할 수 없으므로 사용자가 결정한다.
|
|
128
|
+
|
|
129
|
+
## Step 7: 반복 혹은 완료
|
|
130
|
+
|
|
131
|
+
typecheck, lint, test, `.verify.md` 재검증을 수행하는 동안 코드 수정이 있었으면 `typecheck`부터 다시 시작한다. 수정이 없었으면 완료.
|
|
101
132
|
|
|
102
|
-
|
|
133
|
+
(`.spec.md` 정합성 확인은 코드 수정을 유발하지 않으므로 반복 트리거가 아니다.)
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sd-claude-docs
|
|
3
|
-
description: 프로젝트 분석을 통해 CLAUDE.md와
|
|
4
|
-
|
|
3
|
+
description: 프로젝트 분석을 통해 CLAUDE.md(개발자용)와 README.md/docs(소비자용) 문서를 동시 생성하는 스킬. "init", "CLAUDE.md 생성", "README 생성", "LLM 문서 만들어줘", "패키지 문서 생성" 등을 요청할 때 사용한다.
|
|
4
|
+
effort: low
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# sd-claude-docs: CLAUDE.md +
|
|
7
|
+
# sd-claude-docs: CLAUDE.md + README.md/docs 통합 생성
|
|
8
8
|
|
|
9
|
-
프로젝트를 분석하여 CLAUDE.md(
|
|
9
|
+
프로젝트를 분석하여 CLAUDE.md(내부 개발 컨텍스트)와 README.md/docs/(소비자용 API 문서)를 한 번에 생성한다.
|
|
10
10
|
설정 파일, 스크립트, 소스 코드에서 검증 가능한 사실만 추출한다. 기존 문서가 있으면 섹션 단위로 병합한다.
|
|
11
11
|
|
|
12
|
-
- **라이브러리 프로젝트** (`private: true`가 아닌 패키지가 1개 이상): CLAUDE.md +
|
|
12
|
+
- **라이브러리 프로젝트** (`private: true`가 아닌 패키지가 1개 이상): CLAUDE.md + 각 패키지 내 `README.md`(+ 필요 시 `docs/`)
|
|
13
13
|
- **소비앱** (모든 패키지가 `private: true`): CLAUDE.md만 생성
|
|
14
14
|
|
|
15
|
+
CLAUDE.md는 모노레포 **내부 개발자(LLM 포함)** 용 컨텍스트이고, README.md + docs/는 **패키지 소비자** 용 API/사용 지침 문서다. 두 문서는 독립적으로 유지한다. 패키지 CLAUDE.md 최상단에는 README.md를 참조하도록 안내 문구를 삽입한다(Step 3에서 규정).
|
|
16
|
+
|
|
15
17
|
## 사용법
|
|
16
18
|
|
|
17
19
|
```
|
|
@@ -64,11 +66,12 @@ model: claude-sonnet-4-5
|
|
|
64
66
|
- **라이브러리 프로젝트**: `private: true`가 아닌 패키지가 1개 이상 존재
|
|
65
67
|
- **소비앱**: 모든 패키지가 `private: true`
|
|
66
68
|
|
|
67
|
-
라이브러리 프로젝트인 경우
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
라이브러리 프로젝트인 경우 소비자용 문서의 출력 경로는 **해당 패키지 루트**다:
|
|
70
|
+
- `README.md` → `{패키지 경로}/README.md`
|
|
71
|
+
- 분량이 많은 경우 `{패키지 경로}/docs/*.md`
|
|
72
|
+
- 단일 패키지 프로젝트면 루트가 곧 패키지 경로다 (`./README.md`, `./docs/`)
|
|
73
|
+
|
|
74
|
+
`private: true` 패키지는 README.md / docs/를 생성하지 않는다 (CLAUDE.md만).
|
|
72
75
|
|
|
73
76
|
## Step 2: 분기
|
|
74
77
|
|
|
@@ -82,7 +85,7 @@ root 문서는 생성·변경하지 않는다.
|
|
|
82
85
|
|
|
83
86
|
`workspaces` 필드가 없고 `pnpm-workspace.yaml`도 없으면 단일 패키지다.
|
|
84
87
|
패키지별 CLAUDE.md는 생성하지 않는다. 바로 4단계로 진행하여 root 문서를 생성한다.
|
|
85
|
-
라이브러리 프로젝트인 경우 `package-doc-gen.md`의 Step 2~4를 root에 직접 적용하여
|
|
88
|
+
라이브러리 프로젝트인 경우 `package-doc-gen.md`의 Step 2~4를 root에 직접 적용하여 루트의 `README.md` (+ 분량이 많으면 `docs/*.md`)를 생성한다.
|
|
86
89
|
|
|
87
90
|
### 전체 실행 — 모노레포
|
|
88
91
|
|
|
@@ -90,34 +93,33 @@ root 문서는 생성·변경하지 않는다.
|
|
|
90
93
|
|
|
91
94
|
## Step 3: 패키지별 문서 생성 (모노레포)
|
|
92
95
|
|
|
93
|
-
각 패키지에 대해 **Agent 도구로 subagent(
|
|
96
|
+
각 패키지에 대해 **Agent 도구로 subagent(effort: `low`)를 병렬 실행**한다.
|
|
94
97
|
하나의 메시지에서 모든 패키지의 Agent 호출을 동시에 보낸다.
|
|
95
98
|
|
|
96
99
|
### subagent 프롬프트
|
|
97
100
|
|
|
98
101
|
```
|
|
99
|
-
{패키지 경로}의 CLAUDE.md와
|
|
102
|
+
{패키지 경로}의 CLAUDE.md와 README.md/docs를 생성한다.
|
|
100
103
|
|
|
101
|
-
## CLAUDE.md 생성
|
|
104
|
+
## CLAUDE.md 생성 (`{패키지 경로}/CLAUDE.md`)
|
|
102
105
|
|
|
103
106
|
`.claude/skills/sd-claude-docs/references/package-claudemd.md`를 읽고 그 지침을 따른다.
|
|
104
107
|
|
|
105
108
|
루트 수준 설정 (이 내용과 동일한 정보는 패키지 CLAUDE.md에 반복하지 않는다):
|
|
106
109
|
{1단계에서 추출한 코딩 규칙 및 컴파일러 설정 목록}
|
|
107
110
|
|
|
108
|
-
##
|
|
111
|
+
## README.md / docs/ 생성 {`private: true` 패키지이면 이 섹션 전체 생략}
|
|
109
112
|
|
|
110
113
|
`.claude/skills/sd-claude-docs/references/package-doc-gen.md`를 읽고 그 지침을 따른다.
|
|
111
|
-
출력 경로:
|
|
112
|
-
{private: true인 경우} 이 패키지는 private이므로 usage 문서는 생성하지 않는다.
|
|
114
|
+
출력 경로: `{패키지 경로}/` (README.md는 항상, docs/는 분량 분기 조건에 해당될 때)
|
|
113
115
|
```
|
|
114
116
|
|
|
115
|
-
각 subagent는 소스 코드를 한 번 분석하여 CLAUDE.md(Key Patterns)와
|
|
117
|
+
각 subagent는 소스 코드를 한 번 분석하여 CLAUDE.md(Key Patterns)와 README.md/docs(API 문서) 모두에 활용한다.
|
|
116
118
|
|
|
117
119
|
### subagent 반환 정보
|
|
118
120
|
|
|
119
121
|
- CLAUDE.md 생성 여부
|
|
120
|
-
-
|
|
122
|
+
- README.md 생성 여부 + 문서 구조 (README 단독 / README + docs/)
|
|
121
123
|
- API 항목 수
|
|
122
124
|
- 생성된 파일 목록
|
|
123
125
|
|
|
@@ -194,55 +196,25 @@ UI: angular (Angular)
|
|
|
194
196
|
- `console.*` 금지, `Buffer` 금지 → `Uint8Array`
|
|
195
197
|
````
|
|
196
198
|
|
|
197
|
-
### sd-{name}{ver}.md (라이브러리 프로젝트만)
|
|
198
|
-
|
|
199
|
-
라이브러리 프로젝트인 경우 `.claude/references/sd-{name}{ver}.md` 인덱스 파일을 생성/갱신한다.
|
|
200
|
-
소비앱인 경우 이 단계를 건너뛴다.
|
|
201
|
-
|
|
202
|
-
#### 포함할 내용
|
|
203
|
-
|
|
204
|
-
- 패키지 목록 테이블 (`private: true`인 패키지는 제외)
|
|
205
|
-
- 각 패키지의 usage 문서 경로 링크
|
|
206
|
-
- 라이브러리 사용 시 주요 가이드 (기존 내용이 있으면 병합)
|
|
207
|
-
|
|
208
|
-
#### 참고 예시
|
|
209
|
-
|
|
210
|
-
```markdown
|
|
211
|
-
# sd-simplysm14: @simplysm v14 소비앱 가이드
|
|
212
|
-
|
|
213
|
-
{기존 가이드 내용 보존}
|
|
214
|
-
|
|
215
|
-
## 패키지별 상세 문서
|
|
216
|
-
|
|
217
|
-
| 패키지 | 문서 |
|
|
218
|
-
|--------|------|
|
|
219
|
-
| @simplysm/angular | [usage.md](./sd-simplysm14/angular/usage.md) |
|
|
220
|
-
| @simplysm/core-common | [usage.md](./sd-simplysm14/core-common/usage.md) |
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
#### 병합
|
|
224
|
-
|
|
225
|
-
기존 `sd-{name}{ver}.md`가 있으면 root CLAUDE.md와 동일한 병합 규칙을 적용한다.
|
|
226
|
-
|
|
227
199
|
## Step 5: 결과 보고
|
|
228
200
|
|
|
229
201
|
```markdown
|
|
230
202
|
## sd-claude-docs 결과
|
|
231
203
|
|
|
232
|
-
| 패키지 | CLAUDE.md |
|
|
233
|
-
|
|
204
|
+
| 패키지 | CLAUDE.md | README.md | 구조 | API 항목 수 |
|
|
205
|
+
|--------|-----------|-----------|------|-------------|
|
|
234
206
|
| root | 생성 | — | — | — |
|
|
235
|
-
|
|
|
236
|
-
| @simplysm/
|
|
237
|
-
| @simplysm/
|
|
238
|
-
| @simplysm/storage | 생성 | 생성 | usage 단독 | 8 |
|
|
207
|
+
| @simplysm/core-common | 갱신 | 갱신 | README 단독 | 35 |
|
|
208
|
+
| @simplysm/angular | 갱신 | 갱신 | README + docs/ | 126 |
|
|
209
|
+
| @simplysm/storage | 생성 | 생성 | README 단독 | 8 |
|
|
239
210
|
| @simplysm/internal | 생성 | — (private) | — | — |
|
|
240
211
|
|
|
241
212
|
### 생성된 파일 목록
|
|
242
213
|
- CLAUDE.md (root)
|
|
243
|
-
- .claude/references/sd-simplysm14.md
|
|
244
214
|
- packages/core-common/CLAUDE.md
|
|
245
|
-
-
|
|
246
|
-
-
|
|
215
|
+
- packages/core-common/README.md
|
|
216
|
+
- packages/angular/CLAUDE.md
|
|
217
|
+
- packages/angular/README.md
|
|
218
|
+
- packages/angular/docs/types.md
|
|
247
219
|
- ...
|
|
248
220
|
```
|
|
@@ -11,6 +11,16 @@
|
|
|
11
11
|
|
|
12
12
|
기존 파일이 없으면 병합을 건너뛴다.
|
|
13
13
|
|
|
14
|
+
## 최상단 안내 문구 (필수)
|
|
15
|
+
|
|
16
|
+
CLAUDE.md의 **제목(`# CLAUDE.md`) 바로 아래**, 모든 본문 섹션보다 앞에 아래 인용 블록을 삽입한다. 이미 존재하면 갱신하지 않고 그대로 둔다.
|
|
17
|
+
|
|
18
|
+
```markdown
|
|
19
|
+
> 이 패키지의 사용법 및 지침은 [README.md](./README.md) 및 [docs/](./docs/)를 참조한다.
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
예외: 해당 패키지가 `private: true`여서 README.md / docs/가 생성되지 않는 경우 이 문구를 삽입하지 않는다.
|
|
23
|
+
|
|
14
24
|
## 분석 대상
|
|
15
25
|
|
|
16
26
|
1. `package.json` — 이름, 설명, dependencies
|
|
@@ -46,6 +56,8 @@ CLAUDE.md는 반드시 대화언어로 작성한다. 모호한 표현("적절히
|
|
|
46
56
|
````markdown
|
|
47
57
|
# CLAUDE.md
|
|
48
58
|
|
|
59
|
+
> 이 패키지의 사용법 및 지침은 [README.md](./README.md) 및 [docs/](./docs/)를 참조한다.
|
|
60
|
+
|
|
49
61
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
50
62
|
|
|
51
63
|
## Package Overview
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# 패키지 문서 생성 프로세스
|
|
2
2
|
|
|
3
|
-
이 문서는 단일 패키지에 대한
|
|
4
|
-
subagent가 패키지
|
|
3
|
+
이 문서는 단일 패키지에 대한 소비자용 `README.md` 및 `docs/` 문서 생성 프로세스를 기술한다.
|
|
4
|
+
subagent가 패키지 경로를 전달받아 아래 순서대로 수행한다. 출력 경로는 항상 해당 **패키지 루트**(`{패키지 경로}/README.md`, `{패키지 경로}/docs/*.md`)이다.
|
|
5
5
|
|
|
6
6
|
## Step 2: 엔트리포인트 & Export 체인 추적
|
|
7
7
|
|
|
@@ -74,38 +74,40 @@ region 주석이 없으면, re-export되는 파일의 디렉토리 구조를 카
|
|
|
74
74
|
|
|
75
75
|
| 조건 | 문서 구조 |
|
|
76
76
|
|------|-----------|
|
|
77
|
-
| 카테고리 3개 이하 **그리고** API 항목 30개 이하 |
|
|
78
|
-
| 위 조건에 해당하지 않음 |
|
|
77
|
+
| 카테고리 3개 이하 **그리고** API 항목 30개 이하 | README.md 단독 |
|
|
78
|
+
| 위 조건에 해당하지 않음 | README.md (개요+목차) + docs/ (카테고리별 분할) |
|
|
79
79
|
|
|
80
80
|
## Step 4: 문서 생성
|
|
81
81
|
|
|
82
82
|
### 작성 원칙
|
|
83
83
|
|
|
84
|
+
- **기존 문서가 없으면** Step 2 분석 결과로 신규 작성한다. **있으면** `docs/` 하위 모든 파일(서브디렉토리 포함)을 읽어 분석 결과를 기준으로 정합성을 맞춘다.
|
|
84
85
|
- **대화언어로 작성**한다
|
|
85
86
|
- **소스에서 읽은 내용만** 문서화한다 — 시그니처는 직접 복사하고, 존재하지 않는 파라미터·반환 타입·동작을 만들어내지 않는다
|
|
86
|
-
- **기존 문서의 시그니처를 신뢰하지 않는다** — 기존 docs
|
|
87
|
+
- **기존 문서의 시그니처를 신뢰하지 않는다** — 기존 README.md/docs/**/*.md의 코드블록(시그니처·멤버 이름·타입·required 여부 등)을 그대로 재사용하지 않는다. 반드시 소스 파일을 Read하여 확인한 내용만 작성한다.
|
|
88
|
+
- **소스 코드와 무관한 내용(사용 가이드, 주의사항, 규칙 등)은 보존하는 것이 원칙이되, 현재 소스와 상충하면(없어진 API 언급, 옛 동작 기준 설명, 더 이상 유효하지 않은 규칙 등) 소스 기준으로 수정한다.**
|
|
87
89
|
- **모든 export를 빠짐없이 문서화한다** — Step 2에서 수집한 export 목록의 모든 항목이 문서에 포함되어야 한다. "덜 중요하다"는 이유로 생략하지 않는다
|
|
88
90
|
- **interface/type은 필드별 설명 테이블을 포함한다** — 시그니처만 나열하지 않고, 각 필드의 타입과 설명을 테이블로 작성한다. 소스에 필드가 있는 interface를 빈 `{}`로 표시하는 것은 금지한다 — 필드가 많더라도 모든 필드를 테이블로 나열한다
|
|
89
91
|
- **union type은 discriminant와 각 variant를 설명한다** — discriminated union인 경우, 어떤 필드로 분기되는지와 각 variant를 나열한다
|
|
90
92
|
|
|
91
|
-
### Step 4-1:
|
|
93
|
+
### Step 4-1: README.md 생성
|
|
92
94
|
|
|
93
|
-
출력 경로:
|
|
95
|
+
출력 경로: `{패키지 경로}/README.md`
|
|
94
96
|
|
|
95
97
|
```markdown
|
|
96
|
-
#
|
|
98
|
+
# {package-name}
|
|
97
99
|
|
|
98
100
|
{package.json의 description. 없으면 엔트리포인트의 export 구조에서 추론하여 한 줄 요약}
|
|
99
101
|
|
|
100
102
|
## Installation
|
|
101
103
|
|
|
102
104
|
\`\`\`bash
|
|
103
|
-
npm install
|
|
105
|
+
npm install {package-name}
|
|
104
106
|
\`\`\`
|
|
105
107
|
|
|
106
108
|
## API Overview
|
|
107
109
|
|
|
108
|
-
{
|
|
110
|
+
{README.md 단독인 경우: 카테고리별로 API 전체 나열 — 4-2 형식과 동일}
|
|
109
111
|
{docs/ 분할인 경우: 카테고리별 요약 테이블 + docs/ 링크}
|
|
110
112
|
|
|
111
113
|
### {Category Name}
|
|
@@ -138,7 +140,7 @@ npm install @simplysm/{package-name}
|
|
|
138
140
|
|
|
139
141
|
### Step 4-2: docs/*.md 생성 (분할 대상 패키지만)
|
|
140
142
|
|
|
141
|
-
카테고리별로
|
|
143
|
+
카테고리별로 `{패키지 경로}/docs/{category}.md`를 생성한다. 파일명은 카테고리를 영어 kebab-case로 변환한다.
|
|
142
144
|
|
|
143
145
|
```markdown
|
|
144
146
|
# {Category Name}
|
|
@@ -197,12 +199,13 @@ Step 2B에서 스타일 항목이 수집된 경우, `{출력 경로}/docs/stylin
|
|
|
197
199
|
|
|
198
200
|
### Step 4-4: 완전성 및 정확성 검증
|
|
199
201
|
|
|
200
|
-
문서
|
|
202
|
+
문서 작업 후, Step 2에서 수집한 export 목록과 `docs/` 하위 모든 파일(서브디렉토리 포함) 및 README.md를 대조한다.
|
|
201
203
|
|
|
202
204
|
#### 완전성 검증
|
|
203
205
|
|
|
204
|
-
1. export 목록의 각 항목이
|
|
206
|
+
1. export 목록의 각 항목이 README.md 또는 `docs/` 하위 어느 파일(서브디렉토리 포함)에 존재하는지 확인한다
|
|
205
207
|
2. 누락된 항목이 있으면 해당 API를 문서에 추가한다
|
|
208
|
+
3. 문서에 있는 심볼 참조 중 **현재 export에 없는 것**(제거·이름 변경된 API)은 소스 기준으로 수정하거나 제거한다
|
|
206
209
|
|
|
207
210
|
#### 정확성 검증
|
|
208
211
|
|
|
@@ -237,3 +240,13 @@ Step 2B에서 스타일 항목이 수집된 경우, `{출력 경로}/docs/stylin
|
|
|
237
240
|
→ 소스 기준으로 문서를 수정합니다.
|
|
238
241
|
```
|
|
239
242
|
|
|
243
|
+
### Step 4-5: package.json `files` 배열 동기화
|
|
244
|
+
|
|
245
|
+
생성된 `docs/`가 npm publish에 포함되도록 `{패키지 경로}/package.json`의 `files` 배열을 점검한다.
|
|
246
|
+
|
|
247
|
+
1. `package.json`에 `files` 필드가 없으면 이 단계를 건너뛴다 (npm이 기본으로 전체 파일을 포함).
|
|
248
|
+
2. `files` 필드가 있으면 아래 규칙으로 동기화한다:
|
|
249
|
+
- 이번 실행 후 `{패키지 경로}/docs/`가 존재하면, `files` 배열에 `"docs"`가 **없을 때 추가**한다.
|
|
250
|
+
- 이번 실행 후 `{패키지 경로}/docs/`가 존재하지 않으면(분량 축소로 단독 구조로 전환되었거나 Step 3 판단으로 `docs/`를 생성하지 않은 경우), `files` 배열에 `"docs"`가 **있을 때 제거**한다.
|
|
251
|
+
3. `README.md`는 npm이 `files` 선언과 무관하게 항상 포함하므로 `files`에 추가할 필요가 없다.
|
|
252
|
+
|
|
@@ -9,9 +9,11 @@ description: 버그·동작 이상의 근본 원인 분석 및 해결책을 제
|
|
|
9
9
|
|
|
10
10
|
`/sd-inner-debug` 스킬을 호출한다.
|
|
11
11
|
|
|
12
|
+
**CRITICAL: 이 단계에서는 분석과 방안 선택만 수행한다. 코드 수정은 절대(NEVER) 하지 않는다.** 코드 수정은 Step 3에서 `/sd-dev`를 통해서만 수행한다.
|
|
13
|
+
|
|
12
14
|
## Step 2: 문서 기록
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
Step 1의 분석과 선택 결과를 문서에 기록한다. **코드 수정 전에 반드시 이 단계를 먼저 완료한다.**
|
|
15
17
|
|
|
16
18
|
### 출력 경로
|
|
17
19
|
|
|
@@ -48,7 +50,7 @@ description: 버그·동작 이상의 근본 원인 분석 및 해결책을 제
|
|
|
48
50
|
- **선택 사유:** {사용자 코멘트 또는 선택 근거}
|
|
49
51
|
```
|
|
50
52
|
|
|
51
|
-
## Step 3:
|
|
53
|
+
## Step 3: 수정 개발
|
|
52
54
|
|
|
53
55
|
1. 대화에 출력파일(`debug.md`) 파일 경로를 표시한다.
|
|
54
|
-
2. `/sd-dev` 스킬을 호출하여 수정 개발을 시작한다.
|
|
56
|
+
2. `/sd-dev` 스킬을 호출하여 수정 개발을 시작한다. **코드 수정은 반드시 이 단계에서 `/sd-dev`를 통해서만 수행한다.**
|
|
@@ -5,7 +5,8 @@ description: 요구명세 → 구현계획 → TDD 개발 → 체크 → 리뷰
|
|
|
5
5
|
|
|
6
6
|
# sd-dev: 통합 개발 프로세스
|
|
7
7
|
|
|
8
|
-
sd-wbs → sd-plan → sd-tdd → sd-check → sd-review를 순차 진행하는
|
|
8
|
+
sd-wbs → sd-plan → sd-tdd → sd-check → sd-review를 순차 진행하는 오케스트레이터.
|
|
9
|
+
**CRITICAL**: Step간 진행은 사용자 확인없이 즉시 다음 Step으로 진행한다.
|
|
9
10
|
|
|
10
11
|
## 공통 규칙
|
|
11
12
|
|
|
@@ -30,7 +31,7 @@ sd-wbs → sd-plan → sd-tdd → sd-check → sd-review를 순차 진행하는
|
|
|
30
31
|
|
|
31
32
|
## Step 3: sd-plan
|
|
32
33
|
|
|
33
|
-
`/sd-plan` 스킬을 즉시 수행한다. 완료 후 즉시 Step 4로 진행한다.
|
|
34
|
+
`/sd-plan` 스킬을 즉시 수행한다. 완료 후 사용자 확인 없이 즉시 Step 4로 진행한다.
|
|
34
35
|
|
|
35
36
|
## Step 4: sd-tdd
|
|
36
37
|
|
|
@@ -42,7 +43,7 @@ sd-wbs → sd-plan → sd-tdd → sd-check → sd-review를 순차 진행하는
|
|
|
42
43
|
|
|
43
44
|
## Step 6: sd-review
|
|
44
45
|
|
|
45
|
-
`/sd-inner-review` 스킬을 호출하고, 발견사항에 대해 수정한다.
|
|
46
|
+
`/sd-inner-review` 스킬을 호출하고, **모든** 발견사항에 대해 수정한다.
|
|
46
47
|
|
|
47
48
|
- wbs/feature 문서를 읽고 잘 구현되었는지 함께 검토한다.
|
|
48
49
|
- 수정사항이 있는 경우, `/sd-check` 스킬을 재 수행한다.
|
|
@@ -68,12 +69,16 @@ sd-wbs → sd-plan → sd-tdd → sd-check → sd-review를 순차 진행하는
|
|
|
68
69
|
|
|
69
70
|
### 변경 파일
|
|
70
71
|
- {파일 경로 목록}
|
|
71
|
-
```
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
<!-- 아래 두 섹션 중 조건에 맞는 정확히 하나만 출력한다 -->
|
|
74
|
+
|
|
75
|
+
### 남은 Feature <!-- 미완료(`[ ]`) Feature가 1개 이상일 때만 출력 -->
|
|
76
|
+
- {번호} {제목} (의존성: {있으면 명시})
|
|
77
|
+
|
|
78
|
+
### 최종 리뷰 안내 <!-- 모든 Feature가 완료(`[x]`)일 때만 출력 -->
|
|
79
|
+
`/sd-review {wbs디렉토리경로}/*.md 가 잘 구현되었는지, 문제는 없는지 최종 심층 리뷰`
|
|
80
|
+
```
|
|
74
81
|
|
|
75
|
-
wbs.md
|
|
82
|
+
**MUST:** 완료 보고 출력 직전에 **반드시(MUST) wbs.md의 현재 상태를 다시 읽어** Feature 체크박스(`[x]`/`[ ]`)를 확인한 뒤, 위 두 섹션 중 조건에 맞는 정확히 하나만 출력한다.
|
|
76
83
|
|
|
77
|
-
|
|
78
|
-
(예: `/sd-review {wbs디렉토리경로}/*.md 가 잘 구현되었는지, 문제는 없는지 최종 심층 리뷰`)
|
|
79
|
-
- 그 외의 경우에는 남은 Feature목록 및 각 Feature의 의존성을 안내한다.
|
|
84
|
+
**NEVER:** 미완료(`[ ]`) Feature가 1개라도 남아 있으면 `/sd-review`를 어떤 형태로도(조건부·제안·예시 포함) 언급하지 않는다. "모든 Feature가 끝난 뒤 /sd-review를 권장" 같은 조건부 안내도 금지한다.
|