sdd-tool 1.2.0 → 1.2.3
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/dist/cli/index.js +684 -3
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1856,8 +1856,8 @@ sdd start --workflow validate
|
|
|
1856
1856
|
|
|
1857
1857
|
\uBAA8\uB4E0 \uC791\uC5C5\uC774 \uC644\uB8CC\uB418\uBA74:
|
|
1858
1858
|
1. \`sdd validate\`\uB85C \uCD5C\uC885 \uAC80\uC99D
|
|
1859
|
-
2. PR \uC0DD\uC131 \uB610\uB294 \uBA38\uC9C0
|
|
1860
|
-
3.
|
|
1859
|
+
2. \uCEE4\uBC0B \uD6C4 PR \uC0DD\uC131 \uB610\uB294 \uBA38\uC9C0
|
|
1860
|
+
3. \`/sdd.status\`\uB85C \uC804\uCCB4 \uC9C4\uD589 \uC0C1\uD669 \uD655\uC778
|
|
1861
1861
|
`
|
|
1862
1862
|
},
|
|
1863
1863
|
{
|
|
@@ -1892,6 +1892,19 @@ sdd validate --strict
|
|
|
1892
1892
|
|
|
1893
1893
|
\uAC80\uC99D \uC2E4\uD328 \uC2DC \uD574\uB2F9 \uD30C\uC77C\uC744 \uC5F4\uC5B4 \uC624\uB958\uB97C \uC218\uC815\uD558\uC138\uC694.
|
|
1894
1894
|
\uAC01 \uC624\uB958 \uBA54\uC2DC\uC9C0\uC5D0\uB294 \uD574\uACB0 \uBC29\uBC95\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.
|
|
1895
|
+
|
|
1896
|
+
## \uB2E4\uC74C \uB2E8\uACC4
|
|
1897
|
+
|
|
1898
|
+
\uAC80\uC99D \uACB0\uACFC\uC5D0 \uB530\uB77C:
|
|
1899
|
+
|
|
1900
|
+
- **\uBAA8\uB450 \uD1B5\uACFC**: \uCEE4\uBC0B \uD6C4 PR \uC0DD\uC131 \uB610\uB294 \uBA38\uC9C0
|
|
1901
|
+
- **\uC624\uB958 \uBC1C\uC0DD**: \uC624\uB958 \uC218\uC815 \uD6C4 \`sdd validate\` \uC7AC\uC2E4\uD589
|
|
1902
|
+
- **\uACBD\uACE0\uB9CC \uBC1C\uC0DD**: \uACBD\uACE0 \uAC80\uD1A0 \uD6C4 \uC9C4\uD589 \uC5EC\uBD80 \uACB0\uC815
|
|
1903
|
+
|
|
1904
|
+
\uAC80\uC99D \uD1B5\uACFC \uD6C4 \uAD8C\uC7A5 \uC6CC\uD06C\uD50C\uB85C\uC6B0:
|
|
1905
|
+
1. \`git add .sdd/\` - \uC2A4\uD399 \uBCC0\uACBD \uC2A4\uD14C\uC774\uC9D5
|
|
1906
|
+
2. \`git commit -m "spec: <\uC124\uBA85>"\` - \uCEE4\uBC0B
|
|
1907
|
+
3. PR \uC0DD\uC131 \uBC0F \uB9AC\uBDF0 \uC694\uCCAD
|
|
1895
1908
|
`
|
|
1896
1909
|
},
|
|
1897
1910
|
{
|
|
@@ -3080,6 +3093,263 @@ sdd export user-auth --no-toc
|
|
|
3080
3093
|
\`\`\`
|
|
3081
3094
|
|
|
3082
3095
|
\uB0B4\uBCF4\uB0B8 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC744 \uD655\uC778\uD558\uACE0 \uD544\uC694\uC2DC \uCD94\uAC00 \uD615\uC2DD\uC73C\uB85C \uB0B4\uBCF4\uB0B4\uC138\uC694.
|
|
3096
|
+
`
|
|
3097
|
+
},
|
|
3098
|
+
// 도메인 & 역추출 커맨드들
|
|
3099
|
+
{
|
|
3100
|
+
name: "sdd.reverse",
|
|
3101
|
+
content: `\uB808\uAC70\uC2DC \uCF54\uB4DC\uBCA0\uC774\uC2A4\uC5D0\uC11C SDD \uC2A4\uD399\uC744 \uC5ED\uCD94\uCD9C\uD569\uB2C8\uB2E4.
|
|
3102
|
+
|
|
3103
|
+
## \uAC1C\uC694
|
|
3104
|
+
|
|
3105
|
+
\uAE30\uC874 \uCF54\uB4DC\uB97C \uBD84\uC11D\uD558\uC5EC SDD \uC2A4\uD399 \uCD08\uC548\uC744 \uC790\uB3D9 \uC0DD\uC131\uD569\uB2C8\uB2E4.
|
|
3106
|
+
\uB9AC\uBDF0\uC640 \uC2B9\uC778 \uACFC\uC815\uC744 \uD1B5\uD574 \uC815\uC2DD \uC2A4\uD399\uC73C\uB85C \uD655\uC815\uD569\uB2C8\uB2E4.
|
|
3107
|
+
|
|
3108
|
+
## \uD558\uC704 \uBA85\uB839\uC5B4
|
|
3109
|
+
|
|
3110
|
+
\`\`\`
|
|
3111
|
+
/sdd.reverse scan [path] # \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870 \uC2A4\uCE94
|
|
3112
|
+
/sdd.reverse extract [path] # \uCF54\uB4DC\uC5D0\uC11C \uC2A4\uD399 \uCD94\uCD9C
|
|
3113
|
+
/sdd.reverse review [spec-id] # \uCD94\uCD9C\uB41C \uC2A4\uD399 \uB9AC\uBDF0
|
|
3114
|
+
/sdd.reverse finalize [spec-id] # \uC2B9\uC778\uB41C \uC2A4\uD399 \uD655\uC815
|
|
3115
|
+
\`\`\`
|
|
3116
|
+
|
|
3117
|
+
## \uC6CC\uD06C\uD50C\uB85C\uC6B0
|
|
3118
|
+
|
|
3119
|
+
\`\`\`
|
|
3120
|
+
scan \u2192 extract \u2192 review \u2192 finalize
|
|
3121
|
+
\`\`\`
|
|
3122
|
+
|
|
3123
|
+
### 1. Scan (\uC2A4\uCE94)
|
|
3124
|
+
|
|
3125
|
+
\uD504\uB85C\uC81D\uD2B8\uB97C \uBD84\uC11D\uD558\uC5EC \uB514\uB809\uD1A0\uB9AC \uAD6C\uC870, \uC5B8\uC5B4 \uBD84\uD3EC, \uB3C4\uBA54\uC778\uC744 \uCD94\uC815\uD569\uB2C8\uB2E4.
|
|
3126
|
+
|
|
3127
|
+
\`\`\`bash
|
|
3128
|
+
sdd reverse scan
|
|
3129
|
+
sdd reverse scan src/
|
|
3130
|
+
\`\`\`
|
|
3131
|
+
|
|
3132
|
+
### 2. Extract (\uCD94\uCD9C)
|
|
3133
|
+
|
|
3134
|
+
\uC2A4\uCE94 \uACB0\uACFC\uB97C \uAE30\uBC18\uC73C\uB85C \uCF54\uB4DC\uC5D0\uC11C \uC2A4\uD399 \uCD08\uC548\uC744 \uCD94\uCD9C\uD569\uB2C8\uB2E4.
|
|
3135
|
+
|
|
3136
|
+
\`\`\`bash
|
|
3137
|
+
sdd reverse extract
|
|
3138
|
+
sdd reverse extract --domain auth
|
|
3139
|
+
sdd reverse extract --depth deep
|
|
3140
|
+
\`\`\`
|
|
3141
|
+
|
|
3142
|
+
**\uC635\uC158:**
|
|
3143
|
+
- \`--domain <name>\`: \uD2B9\uC815 \uB3C4\uBA54\uC778\uB9CC \uCD94\uCD9C
|
|
3144
|
+
- \`--depth <level>\`: \uBD84\uC11D \uAE4A\uC774 (shallow, medium, deep)
|
|
3145
|
+
- \`--min-confidence <n>\`: \uCD5C\uC18C \uC2E0\uB8B0\uB3C4 \uD544\uD130
|
|
3146
|
+
|
|
3147
|
+
### 3. Review (\uB9AC\uBDF0)
|
|
3148
|
+
|
|
3149
|
+
\uCD94\uCD9C\uB41C \uC2A4\uD399 \uCD08\uC548\uC744 \uB9AC\uBDF0\uD558\uACE0 \uC2B9\uC778/\uAC70\uBD80\uD569\uB2C8\uB2E4.
|
|
3150
|
+
|
|
3151
|
+
\`\`\`bash
|
|
3152
|
+
sdd reverse review # \uB9AC\uBDF0 \uB300\uAE30 \uBAA9\uB85D
|
|
3153
|
+
sdd reverse review auth/login # \uD2B9\uC815 \uC2A4\uD399 \uC0C1\uC138
|
|
3154
|
+
\`\`\`
|
|
3155
|
+
|
|
3156
|
+
### 4. Finalize (\uD655\uC815)
|
|
3157
|
+
|
|
3158
|
+
\uC2B9\uC778\uB41C \uC2A4\uD399\uC744 \uC815\uC2DD SDD \uC2A4\uD399\uC73C\uB85C \uBCC0\uD658\uD569\uB2C8\uB2E4.
|
|
3159
|
+
|
|
3160
|
+
\`\`\`bash
|
|
3161
|
+
sdd reverse finalize --all # \uBAA8\uB4E0 \uC2B9\uC778 \uC2A4\uD399 \uD655\uC815
|
|
3162
|
+
sdd reverse finalize auth/login # \uD2B9\uC815 \uC2A4\uD399 \uD655\uC815
|
|
3163
|
+
\`\`\`
|
|
3164
|
+
|
|
3165
|
+
## \uCD9C\uB825 \uD30C\uC77C
|
|
3166
|
+
|
|
3167
|
+
| \uD30C\uC77C | \uC124\uBA85 |
|
|
3168
|
+
|------|------|
|
|
3169
|
+
| \`.sdd/.reverse-meta.json\` | \uC2A4\uCE94 \uACB0\uACFC \uBA54\uD0C0\uB370\uC774\uD130 |
|
|
3170
|
+
| \`.sdd/.reverse-drafts/\` | \uC2A4\uD399 \uCD08\uC548 \uB514\uB809\uD1A0\uB9AC |
|
|
3171
|
+
| \`.sdd/specs/\` | \uD655\uC815\uB41C \uC2A4\uD399 \uB514\uB809\uD1A0\uB9AC |
|
|
3172
|
+
|
|
3173
|
+
## \uB2E4\uC74C \uB2E8\uACC4
|
|
3174
|
+
|
|
3175
|
+
- \uD655\uC815 \uD6C4: \`/sdd.validate\`\uB85C \uC2A4\uD399 \uAC80\uC99D
|
|
3176
|
+
- \uB3C4\uBA54\uC778 \uC815\uB9AC: \`/sdd.domain\`\uC73C\uB85C \uB3C4\uBA54\uC778 \uAD6C\uC870\uD654
|
|
3177
|
+
`
|
|
3178
|
+
},
|
|
3179
|
+
{
|
|
3180
|
+
name: "sdd.domain",
|
|
3181
|
+
content: `\uB3C4\uBA54\uC778\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4.
|
|
3182
|
+
|
|
3183
|
+
## \uAC1C\uC694
|
|
3184
|
+
|
|
3185
|
+
SDD \uD504\uB85C\uC81D\uD2B8\uC758 \uB3C4\uBA54\uC778\uC744 \uC0DD\uC131, \uC870\uD68C, \uC218\uC815, \uC0AD\uC81C\uD569\uB2C8\uB2E4.
|
|
3186
|
+
\uB300\uADDC\uBAA8 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uC2A4\uD399\uC744 \uB17C\uB9AC\uC801\uC73C\uB85C \uADF8\uB8F9\uD654\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
3187
|
+
|
|
3188
|
+
## \uD558\uC704 \uBA85\uB839\uC5B4
|
|
3189
|
+
|
|
3190
|
+
\`\`\`
|
|
3191
|
+
/sdd.domain create <name> # \uB3C4\uBA54\uC778 \uC0DD\uC131
|
|
3192
|
+
/sdd.domain list # \uB3C4\uBA54\uC778 \uBAA9\uB85D
|
|
3193
|
+
/sdd.domain show <name> # \uC0C1\uC138 \uC815\uBCF4
|
|
3194
|
+
/sdd.domain link <domain> <spec> # \uC2A4\uD399 \uC5F0\uACB0
|
|
3195
|
+
/sdd.domain graph # \uC758\uC874\uC131 \uADF8\uB798\uD504
|
|
3196
|
+
\`\`\`
|
|
3197
|
+
|
|
3198
|
+
### create
|
|
3199
|
+
|
|
3200
|
+
\uC0C8 \uB3C4\uBA54\uC778\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4.
|
|
3201
|
+
|
|
3202
|
+
\`\`\`bash
|
|
3203
|
+
sdd domain create auth
|
|
3204
|
+
sdd domain create payment --description "\uACB0\uC81C \uCC98\uB9AC"
|
|
3205
|
+
\`\`\`
|
|
3206
|
+
|
|
3207
|
+
### list
|
|
3208
|
+
|
|
3209
|
+
\uBAA8\uB4E0 \uB3C4\uBA54\uC778\uC744 \uC870\uD68C\uD569\uB2C8\uB2E4.
|
|
3210
|
+
|
|
3211
|
+
\`\`\`bash
|
|
3212
|
+
sdd domain list
|
|
3213
|
+
sdd domain list --tree # \uD2B8\uB9AC \uD615\uD0DC
|
|
3214
|
+
\`\`\`
|
|
3215
|
+
|
|
3216
|
+
### show
|
|
3217
|
+
|
|
3218
|
+
\uD2B9\uC815 \uB3C4\uBA54\uC778\uC758 \uC0C1\uC138 \uC815\uBCF4\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.
|
|
3219
|
+
|
|
3220
|
+
\`\`\`bash
|
|
3221
|
+
sdd domain show auth
|
|
3222
|
+
\`\`\`
|
|
3223
|
+
|
|
3224
|
+
### link / unlink
|
|
3225
|
+
|
|
3226
|
+
\uC2A4\uD399\uC744 \uB3C4\uBA54\uC778\uC5D0 \uC5F0\uACB0\uD558\uAC70\uB098 \uD574\uC81C\uD569\uB2C8\uB2E4.
|
|
3227
|
+
|
|
3228
|
+
\`\`\`bash
|
|
3229
|
+
sdd domain link auth user-login
|
|
3230
|
+
sdd domain unlink auth user-login
|
|
3231
|
+
\`\`\`
|
|
3232
|
+
|
|
3233
|
+
### depends
|
|
3234
|
+
|
|
3235
|
+
\uB3C4\uBA54\uC778 \uAC04 \uC758\uC874\uC131\uC744 \uC124\uC815\uD569\uB2C8\uB2E4.
|
|
3236
|
+
|
|
3237
|
+
\`\`\`bash
|
|
3238
|
+
sdd domain depends payment --on auth
|
|
3239
|
+
\`\`\`
|
|
3240
|
+
|
|
3241
|
+
### graph
|
|
3242
|
+
|
|
3243
|
+
\uB3C4\uBA54\uC778 \uC758\uC874\uC131 \uADF8\uB798\uD504\uB97C \uC2DC\uAC01\uD654\uD569\uB2C8\uB2E4.
|
|
3244
|
+
|
|
3245
|
+
\`\`\`bash
|
|
3246
|
+
sdd domain graph # Mermaid \uD615\uC2DD
|
|
3247
|
+
sdd domain graph --format dot # DOT \uD615\uC2DD
|
|
3248
|
+
\`\`\`
|
|
3249
|
+
|
|
3250
|
+
### validate
|
|
3251
|
+
|
|
3252
|
+
\uB3C4\uBA54\uC778 \uAD6C\uC870\uB97C \uAC80\uC99D\uD569\uB2C8\uB2E4.
|
|
3253
|
+
|
|
3254
|
+
\`\`\`bash
|
|
3255
|
+
sdd domain validate
|
|
3256
|
+
\`\`\`
|
|
3257
|
+
|
|
3258
|
+
\uAC80\uC99D \uD56D\uBAA9:
|
|
3259
|
+
- \uC21C\uD658 \uC758\uC874\uC131 \uAC10\uC9C0
|
|
3260
|
+
- \uACE0\uC544 \uC2A4\uD399 \uD655\uC778
|
|
3261
|
+
- \uC2A4\uD0A4\uB9C8 \uC720\uD6A8\uC131
|
|
3262
|
+
|
|
3263
|
+
## \uB2E4\uC74C \uB2E8\uACC4
|
|
3264
|
+
|
|
3265
|
+
- \uB3C4\uBA54\uC778 \uC0DD\uC131 \uD6C4: \`/sdd.context set <domain>\`\uC73C\uB85C \uC791\uC5C5 \uCEE8\uD14D\uC2A4\uD2B8 \uC124\uC815
|
|
3266
|
+
- \uC2A4\uD399 \uC5F0\uACB0 \uD6C4: \`/sdd.domain graph\`\uB85C \uAD6C\uC870 \uD655\uC778
|
|
3267
|
+
`
|
|
3268
|
+
},
|
|
3269
|
+
{
|
|
3270
|
+
name: "sdd.context",
|
|
3271
|
+
content: `\uC791\uC5C5 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uAD00\uB9AC\uD569\uB2C8\uB2E4.
|
|
3272
|
+
|
|
3273
|
+
## \uAC1C\uC694
|
|
3274
|
+
|
|
3275
|
+
\uD604\uC7AC \uC791\uC5C5 \uC911\uC778 \uB3C4\uBA54\uC778 \uBC94\uC704\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.
|
|
3276
|
+
\uB300\uADDC\uBAA8 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uAD00\uB828 \uC2A4\uD399\uB9CC \uC9D1\uC911\uD558\uC5EC \uC791\uC5C5\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
3277
|
+
|
|
3278
|
+
## \uD558\uC704 \uBA85\uB839\uC5B4
|
|
3279
|
+
|
|
3280
|
+
\`\`\`
|
|
3281
|
+
/sdd.context set <domain...> # \uCEE8\uD14D\uC2A4\uD2B8 \uC124\uC815
|
|
3282
|
+
/sdd.context show # \uD604\uC7AC \uCEE8\uD14D\uC2A4\uD2B8
|
|
3283
|
+
/sdd.context clear # \uCEE8\uD14D\uC2A4\uD2B8 \uD574\uC81C
|
|
3284
|
+
/sdd.context specs # \uCEE8\uD14D\uC2A4\uD2B8 \uB0B4 \uC2A4\uD399 \uBAA9\uB85D
|
|
3285
|
+
/sdd.context export # \uD504\uB86C\uD504\uD2B8 \uB0B4\uBCF4\uB0B4\uAE30
|
|
3286
|
+
\`\`\`
|
|
3287
|
+
|
|
3288
|
+
### set
|
|
3289
|
+
|
|
3290
|
+
\uC791\uC5C5 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.
|
|
3291
|
+
|
|
3292
|
+
\`\`\`bash
|
|
3293
|
+
sdd context set auth
|
|
3294
|
+
sdd context set auth payment order
|
|
3295
|
+
sdd context set auth --include-deps # \uC758\uC874 \uB3C4\uBA54\uC778 \uD3EC\uD568
|
|
3296
|
+
\`\`\`
|
|
3297
|
+
|
|
3298
|
+
### show
|
|
3299
|
+
|
|
3300
|
+
\uD604\uC7AC \uC124\uC815\uB41C \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.
|
|
3301
|
+
|
|
3302
|
+
\`\`\`bash
|
|
3303
|
+
sdd context show
|
|
3304
|
+
\`\`\`
|
|
3305
|
+
|
|
3306
|
+
### add / remove
|
|
3307
|
+
|
|
3308
|
+
\uCEE8\uD14D\uC2A4\uD2B8\uC5D0 \uB3C4\uBA54\uC778\uC744 \uCD94\uAC00\uD558\uAC70\uB098 \uC81C\uAC70\uD569\uB2C8\uB2E4.
|
|
3309
|
+
|
|
3310
|
+
\`\`\`bash
|
|
3311
|
+
sdd context add order
|
|
3312
|
+
sdd context remove payment
|
|
3313
|
+
\`\`\`
|
|
3314
|
+
|
|
3315
|
+
### clear
|
|
3316
|
+
|
|
3317
|
+
\uCEE8\uD14D\uC2A4\uD2B8\uB97C \uD574\uC81C\uD569\uB2C8\uB2E4.
|
|
3318
|
+
|
|
3319
|
+
\`\`\`bash
|
|
3320
|
+
sdd context clear
|
|
3321
|
+
\`\`\`
|
|
3322
|
+
|
|
3323
|
+
### specs
|
|
3324
|
+
|
|
3325
|
+
\uCEE8\uD14D\uC2A4\uD2B8 \uB0B4 \uC2A4\uD399 \uBAA9\uB85D\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.
|
|
3326
|
+
|
|
3327
|
+
\`\`\`bash
|
|
3328
|
+
sdd context specs
|
|
3329
|
+
\`\`\`
|
|
3330
|
+
|
|
3331
|
+
### export
|
|
3332
|
+
|
|
3333
|
+
\uCEE8\uD14D\uC2A4\uD2B8 \uAE30\uBC18 \uD504\uB86C\uD504\uD2B8\uB97C \uB0B4\uBCF4\uB0C5\uB2C8\uB2E4.
|
|
3334
|
+
|
|
3335
|
+
\`\`\`bash
|
|
3336
|
+
sdd context export
|
|
3337
|
+
sdd context export --format markdown
|
|
3338
|
+
\`\`\`
|
|
3339
|
+
|
|
3340
|
+
## \uCEE8\uD14D\uC2A4\uD2B8 \uD6A8\uACFC
|
|
3341
|
+
|
|
3342
|
+
\uCEE8\uD14D\uC2A4\uD2B8\uAC00 \uC124\uC815\uB418\uBA74:
|
|
3343
|
+
|
|
3344
|
+
1. **\uC2A4\uD399 \uC0DD\uC131**: \`/sdd.new\`\uC5D0\uC11C \uB3C4\uBA54\uC778 \uC790\uB3D9 \uAC10\uC9C0
|
|
3345
|
+
2. **\uAC80\uC99D**: \`/sdd.validate\`\uC5D0\uC11C \uD574\uB2F9 \uB3C4\uBA54\uC778\uB9CC \uAC80\uC99D
|
|
3346
|
+
3. **\uBAA9\uB85D**: \`/sdd.list\`\uC5D0\uC11C \uCEE8\uD14D\uC2A4\uD2B8 \uC2A4\uD399\uB9CC \uD45C\uC2DC
|
|
3347
|
+
4. **\uAD6C\uD604**: \uAD6C\uD604 \uC2DC \uAD00\uB828 \uC2A4\uD399 \uCC38\uC870
|
|
3348
|
+
|
|
3349
|
+
## \uB2E4\uC74C \uB2E8\uACC4
|
|
3350
|
+
|
|
3351
|
+
- \uCEE8\uD14D\uC2A4\uD2B8 \uC124\uC815 \uD6C4: \`/sdd.new\`\uB85C \uC2A4\uD399 \uC791\uC131
|
|
3352
|
+
- \uC791\uC5C5 \uC644\uB8CC \uD6C4: \`/sdd.context clear\`\uB85C \uD574\uC81C
|
|
3083
3353
|
`
|
|
3084
3354
|
}
|
|
3085
3355
|
];
|
|
@@ -3557,7 +3827,8 @@ function getInitDirectories(withDomains = false) {
|
|
|
3557
3827
|
".sdd/archive",
|
|
3558
3828
|
".sdd/templates",
|
|
3559
3829
|
".claude",
|
|
3560
|
-
".claude/commands"
|
|
3830
|
+
".claude/commands",
|
|
3831
|
+
".claude/skills"
|
|
3561
3832
|
];
|
|
3562
3833
|
if (withDomains) {
|
|
3563
3834
|
dirs.push(".sdd/domains");
|
|
@@ -3700,6 +3971,8 @@ async function executeInit(projectPath, options) {
|
|
|
3700
3971
|
createdFiles.push(...templateFiles);
|
|
3701
3972
|
const commandFiles = await createCommandFiles(projectPath);
|
|
3702
3973
|
createdFiles.push(...commandFiles);
|
|
3974
|
+
const skillFiles = await createSkillFiles(projectPath);
|
|
3975
|
+
createdFiles.push(...skillFiles);
|
|
3703
3976
|
return success({
|
|
3704
3977
|
sddPath,
|
|
3705
3978
|
claudePath,
|
|
@@ -3730,6 +4003,405 @@ async function createCommandFiles(projectPath) {
|
|
|
3730
4003
|
}
|
|
3731
4004
|
return files;
|
|
3732
4005
|
}
|
|
4006
|
+
async function createSkillFiles(projectPath) {
|
|
4007
|
+
const skillsPath = path4.join(projectPath, ".claude", "skills");
|
|
4008
|
+
const files = [];
|
|
4009
|
+
const skills = generateDevSkills();
|
|
4010
|
+
for (const skill of skills) {
|
|
4011
|
+
const skillDir = path4.join(skillsPath, skill.name);
|
|
4012
|
+
await ensureDir(skillDir);
|
|
4013
|
+
await writeFile(path4.join(skillDir, "SKILL.md"), skill.content);
|
|
4014
|
+
files.push(`.claude/skills/${skill.name}/SKILL.md`);
|
|
4015
|
+
}
|
|
4016
|
+
return files;
|
|
4017
|
+
}
|
|
4018
|
+
function generateDevSkills() {
|
|
4019
|
+
return [
|
|
4020
|
+
{
|
|
4021
|
+
name: "dev-implement",
|
|
4022
|
+
content: `---
|
|
4023
|
+
name: dev-implement
|
|
4024
|
+
description: .sdd/specs/\uC758 \uC2A4\uD399 \uBB38\uC11C\uB97C \uC77D\uACE0 TDD \uBC29\uC2DD\uC73C\uB85C TypeScript \uCF54\uB4DC\uB97C \uAD6C\uD604\uD569\uB2C8\uB2E4. GIVEN-WHEN-THEN \uC2DC\uB098\uB9AC\uC624\uB97C \uD14C\uC2A4\uD2B8\uB85C \uBCC0\uD658\uD558\uACE0 \uCF54\uB4DC\uB97C \uC791\uC131\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 "\uAD6C\uD604\uD574", "\uAC1C\uBC1C\uD574", "\uCF54\uB529\uD574", "implement" \uB4F1\uC744 \uC694\uCCAD\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
4025
|
+
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
|
|
4026
|
+
---
|
|
4027
|
+
|
|
4028
|
+
# \uC2A4\uD399 \uAE30\uBC18 TDD \uAD6C\uD604
|
|
4029
|
+
|
|
4030
|
+
## Instructions
|
|
4031
|
+
|
|
4032
|
+
### 1. \uC2A4\uD399 \uD30C\uC77C \uBD84\uC11D
|
|
4033
|
+
|
|
4034
|
+
\`.sdd/specs/<spec-path>.md\` \uD30C\uC77C\uC5D0\uC11C \uCD94\uCD9C:
|
|
4035
|
+
- **Requirement**: \uAD6C\uD604\uD574\uC57C \uD560 \uAE30\uB2A5
|
|
4036
|
+
- **Scenario**: GIVEN-WHEN-THEN \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4
|
|
4037
|
+
- **RFC 2119 \uD0A4\uC6CC\uB4DC**: SHALL(\uD544\uC218), SHOULD(\uAD8C\uC7A5), MAY(\uC120\uD0DD)
|
|
4038
|
+
|
|
4039
|
+
### 2. \uC758\uC874\uC131 \uD655\uC778
|
|
4040
|
+
|
|
4041
|
+
frontmatter\uC758 \`depends\` \uD544\uB4DC\uB97C \uD655\uC778\uD558\uACE0, \uC758\uC874 \uC2A4\uD399\uC774 \uBBF8\uAD6C\uD604\uC774\uBA74 \uACBD\uACE0\uD569\uB2C8\uB2E4.
|
|
4042
|
+
|
|
4043
|
+
### 3. TDD: \uD14C\uC2A4\uD2B8 \uBA3C\uC800 \uC791\uC131
|
|
4044
|
+
|
|
4045
|
+
\uC2A4\uD399\uC758 Scenario\uB97C \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4\uB85C \uBCC0\uD658:
|
|
4046
|
+
|
|
4047
|
+
\`\`\`markdown
|
|
4048
|
+
### Scenario: \uC720\uD6A8\uD55C \uC2A4\uD399 \uAC80\uC99D \uC131\uACF5
|
|
4049
|
+
- **GIVEN** \uC720\uD6A8\uD55C RFC 2119 \uD0A4\uC6CC\uB4DC\uAC00 \uD3EC\uD568\uB41C \uC2A4\uD399
|
|
4050
|
+
- **WHEN** validate \uBA85\uB839\uC744 \uC2E4\uD589\uD558\uBA74
|
|
4051
|
+
- **THEN** \uC131\uACF5 \uBA54\uC2DC\uC9C0\uAC00 \uCD9C\uB825\uB41C\uB2E4
|
|
4052
|
+
\`\`\`
|
|
4053
|
+
|
|
4054
|
+
\u2193 \uBCC0\uD658
|
|
4055
|
+
|
|
4056
|
+
\`\`\`typescript
|
|
4057
|
+
it('\uC720\uD6A8\uD55C \uC2A4\uD399\uC744 \uAC80\uC99D\uD558\uBA74 \uC131\uACF5\uD55C\uB2E4', () => {
|
|
4058
|
+
// GIVEN
|
|
4059
|
+
const spec = '\uC2DC\uC2A4\uD15C\uC740 X\uB97C \uD574\uC57C \uD55C\uB2E4(SHALL).';
|
|
4060
|
+
// WHEN
|
|
4061
|
+
const result = validateSpec(spec);
|
|
4062
|
+
// THEN
|
|
4063
|
+
expect(result.valid).toBe(true);
|
|
4064
|
+
});
|
|
4065
|
+
\`\`\`
|
|
4066
|
+
|
|
4067
|
+
### 4. \uAD6C\uD604 \uBC0F \uD14C\uC2A4\uD2B8 \uC2E4\uD589
|
|
4068
|
+
|
|
4069
|
+
\uD14C\uC2A4\uD2B8\uB97C \uD1B5\uACFC\uD558\uB3C4\uB85D \uAD6C\uD604\uD558\uACE0 \uD655\uC778:
|
|
4070
|
+
|
|
4071
|
+
\`\`\`bash
|
|
4072
|
+
pnpm vitest run src/<path>.test.ts
|
|
4073
|
+
\`\`\`
|
|
4074
|
+
|
|
4075
|
+
## Examples
|
|
4076
|
+
|
|
4077
|
+
**\uC0AC\uC6A9\uC790**: "user-auth \uC2A4\uD399 \uAD6C\uD604\uD574\uC918"
|
|
4078
|
+
|
|
4079
|
+
**\uC751\uB2F5**: \uC2A4\uD399\uC744 \uBD84\uC11D\uD558\uACE0 \uD14C\uC2A4\uD2B8\uBD80\uD130 \uC791\uC131\uD55C \uB4A4 \uAD6C\uD604\uC744 \uC9C4\uD589\uD569\uB2C8\uB2E4.
|
|
4080
|
+
|
|
4081
|
+
## RFC 2119 \uD0A4\uC6CC\uB4DC \uD574\uC11D
|
|
4082
|
+
|
|
4083
|
+
| \uD0A4\uC6CC\uB4DC | \uC758\uBBF8 | \uAD6C\uD604 \uC218\uC900 |
|
|
4084
|
+
|--------|------|----------|
|
|
4085
|
+
| SHALL / MUST | \uD544\uC218 | \uBC18\uB4DC\uC2DC \uAD6C\uD604 |
|
|
4086
|
+
| SHOULD | \uAD8C\uC7A5 | \uAC00\uB2A5\uD558\uBA74 \uAD6C\uD604 |
|
|
4087
|
+
| MAY | \uC120\uD0DD | \uD544\uC694\uC2DC \uAD6C\uD604 |
|
|
4088
|
+
`
|
|
4089
|
+
},
|
|
4090
|
+
{
|
|
4091
|
+
name: "dev-next",
|
|
4092
|
+
content: `---
|
|
4093
|
+
name: dev-next
|
|
4094
|
+
description: \uC758\uC874\uC131 \uADF8\uB798\uD504\uB97C \uBD84\uC11D\uD558\uC5EC \uB2E4\uC74C \uAD6C\uD604\uD560 \uC2A4\uD399\uC744 \uCD94\uCC9C\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 "\uB2E4\uC74C \uBB50 \uD574", "\uB2E4\uC74C \uC791\uC5C5", "\uBB50 \uAD6C\uD604\uD560\uAE4C", "next" \uB4F1\uC744 \uC694\uCCAD\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
4095
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
4096
|
+
---
|
|
4097
|
+
|
|
4098
|
+
# \uB2E4\uC74C \uAD6C\uD604 \uC2A4\uD399 \uCD94\uCC9C
|
|
4099
|
+
|
|
4100
|
+
## Instructions
|
|
4101
|
+
|
|
4102
|
+
### 1. \uC2A4\uD399 \uBAA9\uB85D \uC2A4\uCE94
|
|
4103
|
+
|
|
4104
|
+
\`.sdd/specs/\` \uB514\uB809\uD1A0\uB9AC\uC5D0\uC11C \uBAA8\uB4E0 \uC2A4\uD399 \uD30C\uC77C\uC744 \uCC3E\uC2B5\uB2C8\uB2E4.
|
|
4105
|
+
|
|
4106
|
+
### 2. \uC0C1\uD0DC \uBD84\uC11D
|
|
4107
|
+
|
|
4108
|
+
\uAC01 \uC2A4\uD399\uC758 frontmatter\uC5D0\uC11C \uC0C1\uD0DC \uD655\uC778:
|
|
4109
|
+
- \`status: draft\` - \uBBF8\uAD6C\uD604
|
|
4110
|
+
- \`status: implemented\` - \uAD6C\uD604 \uC644\uB8CC
|
|
4111
|
+
- \`status: review\` - \uB9AC\uBDF0 \uC911
|
|
4112
|
+
|
|
4113
|
+
### 3. \uC758\uC874\uC131 \uADF8\uB798\uD504 \uBD84\uC11D
|
|
4114
|
+
|
|
4115
|
+
\`depends\` \uD544\uB4DC\uB97C \uD655\uC778\uD558\uC5EC:
|
|
4116
|
+
- \uC758\uC874\uC131\uC774 \uC5C6\uB294 \uC2A4\uD399 \uC6B0\uC120
|
|
4117
|
+
- \uC758\uC874\uD558\uB294 \uC2A4\uD399\uC774 \uBAA8\uB450 \uAD6C\uD604\uB41C \uC2A4\uD399 \uCD94\uCC9C
|
|
4118
|
+
- \uC21C\uD658 \uC758\uC874\uC131 \uAC10\uC9C0 \uBC0F \uACBD\uACE0
|
|
4119
|
+
|
|
4120
|
+
### 4. \uCD94\uCC9C \uACB0\uACFC \uC81C\uC2DC
|
|
4121
|
+
|
|
4122
|
+
\uC6B0\uC120\uC21C\uC704\uC5D0 \uB530\uB77C \uC815\uB82C:
|
|
4123
|
+
1. \uC758\uC874\uC131 \uC5C6\uC74C + draft \uC0C1\uD0DC
|
|
4124
|
+
2. \uC758\uC874\uC131 \uD574\uACB0\uB428 + draft \uC0C1\uD0DC
|
|
4125
|
+
3. \uC758\uC874\uC131 \uBBF8\uD574\uACB0 (\uBE14\uB85C\uD0B9 \uC0C1\uD0DC)
|
|
4126
|
+
|
|
4127
|
+
## Examples
|
|
4128
|
+
|
|
4129
|
+
**\uC0AC\uC6A9\uC790**: "\uB2E4\uC74C \uBB50 \uAD6C\uD604\uD558\uBA74 \uB3FC?"
|
|
4130
|
+
|
|
4131
|
+
**\uC751\uB2F5**:
|
|
4132
|
+
\`\`\`
|
|
4133
|
+
## \uB2E4\uC74C \uAD6C\uD604 \uCD94\uCC9C
|
|
4134
|
+
|
|
4135
|
+
### 1\uC21C\uC704: core/validation (\uC758\uC874\uC131 \uC5C6\uC74C)
|
|
4136
|
+
- \uC0C1\uD0DC: draft
|
|
4137
|
+
- \uC124\uBA85: \uC785\uB825 \uAC80\uC99D \uC720\uD2F8\uB9AC\uD2F0
|
|
4138
|
+
|
|
4139
|
+
### 2\uC21C\uC704: auth/login (\uC758\uC874: core/validation)
|
|
4140
|
+
- \uC0C1\uD0DC: draft
|
|
4141
|
+
- \uC124\uBA85: \uC0AC\uC6A9\uC790 \uB85C\uADF8\uC778
|
|
4142
|
+
- \uBE14\uB85C\uCEE4: core/validation \uAD6C\uD604 \uD544\uC694
|
|
4143
|
+
|
|
4144
|
+
"core/validation \uAD6C\uD604\uD574\uC918" \uB77C\uACE0 \uC694\uCCAD\uD558\uC138\uC694.
|
|
4145
|
+
\`\`\`
|
|
4146
|
+
`
|
|
4147
|
+
},
|
|
4148
|
+
{
|
|
4149
|
+
name: "dev-review",
|
|
4150
|
+
content: `---
|
|
4151
|
+
name: dev-review
|
|
4152
|
+
description: \uAD6C\uD604\uB41C \uCF54\uB4DC\uAC00 \uC2A4\uD399\uC744 \uCDA9\uC871\uD558\uB294\uC9C0 \uAC80\uC99D\uD558\uACE0 \uCF54\uB4DC \uD488\uC9C8, \uD0C0\uC785 \uC548\uC804\uC131, \uC5D0\uB7EC \uCC98\uB9AC\uB97C \uAC80\uD1A0\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 "\uB9AC\uBDF0\uD574\uC918", "\uCF54\uB4DC \uAC80\uD1A0", "\uD488\uC9C8 \uD655\uC778", "review" \uB4F1\uC744 \uC694\uCCAD\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
4153
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
4154
|
+
---
|
|
4155
|
+
|
|
4156
|
+
# \uCF54\uB4DC \uB9AC\uBDF0
|
|
4157
|
+
|
|
4158
|
+
## Instructions
|
|
4159
|
+
|
|
4160
|
+
### 1. \uC2A4\uD399 \uB300\uC870 \uAC80\uC99D
|
|
4161
|
+
|
|
4162
|
+
\uAD6C\uD604\uB41C \uCF54\uB4DC\uAC00 \uC2A4\uD399\uC758 \uC694\uAD6C\uC0AC\uD56D\uC744 \uCDA9\uC871\uD558\uB294\uC9C0 \uD655\uC778:
|
|
4163
|
+
- \uBAA8\uB4E0 Scenario\uAC00 \uD14C\uC2A4\uD2B8\uB85C \uCEE4\uBC84\uB418\uB294\uC9C0
|
|
4164
|
+
- RFC 2119 \uD0A4\uC6CC\uB4DC(SHALL/MUST)\uAC00 \uBAA8\uB450 \uAD6C\uD604\uB418\uC5C8\uB294\uC9C0
|
|
4165
|
+
|
|
4166
|
+
### 2. \uCF54\uB4DC \uD488\uC9C8 \uAC80\uC0AC
|
|
4167
|
+
|
|
4168
|
+
- TypeScript \uD0C0\uC785 \uC548\uC804\uC131
|
|
4169
|
+
- \uC5D0\uB7EC \uCC98\uB9AC \uC644\uC804\uC131
|
|
4170
|
+
- \uCF54\uB4DC \uC911\uBCF5 \uC5EC\uBD80
|
|
4171
|
+
- \uB124\uC774\uBC0D \uCEE8\uBCA4\uC158
|
|
4172
|
+
|
|
4173
|
+
### 3. \uD14C\uC2A4\uD2B8 \uCEE4\uBC84\uB9AC\uC9C0 \uD655\uC778
|
|
4174
|
+
|
|
4175
|
+
\`\`\`bash
|
|
4176
|
+
pnpm vitest run --coverage
|
|
4177
|
+
\`\`\`
|
|
4178
|
+
|
|
4179
|
+
### 4. \uB9AC\uBDF0 \uACB0\uACFC \uC791\uC131
|
|
4180
|
+
|
|
4181
|
+
- \u2705 \uD1B5\uACFC \uD56D\uBAA9
|
|
4182
|
+
- \u26A0\uFE0F \uAC1C\uC120 \uAD8C\uC7A5 \uD56D\uBAA9
|
|
4183
|
+
- \u274C \uD544\uC218 \uC218\uC815 \uD56D\uBAA9
|
|
4184
|
+
|
|
4185
|
+
## Examples
|
|
4186
|
+
|
|
4187
|
+
**\uC0AC\uC6A9\uC790**: "auth/login \uCF54\uB4DC \uB9AC\uBDF0\uD574\uC918"
|
|
4188
|
+
|
|
4189
|
+
**\uC751\uB2F5**:
|
|
4190
|
+
\`\`\`
|
|
4191
|
+
## \uCF54\uB4DC \uB9AC\uBDF0: auth/login
|
|
4192
|
+
|
|
4193
|
+
### \uC2A4\uD399 \uCDA9\uC871\uB3C4: 4/5 (80%)
|
|
4194
|
+
- \u2705 REQ-01: \uC774\uBA54\uC77C \uB85C\uADF8\uC778
|
|
4195
|
+
- \u2705 REQ-02: \uBE44\uBC00\uBC88\uD638 \uAC80\uC99D
|
|
4196
|
+
- \u26A0\uFE0F REQ-03: \uB85C\uADF8\uC778 \uC2E4\uD328 \uD69F\uC218 \uC81C\uD55C (\uBBF8\uAD6C\uD604)
|
|
4197
|
+
|
|
4198
|
+
### \uCF54\uB4DC \uD488\uC9C8
|
|
4199
|
+
- \u2705 \uD0C0\uC785 \uC548\uC804\uC131
|
|
4200
|
+
- \u26A0\uFE0F \uC5D0\uB7EC \uBA54\uC2DC\uC9C0 i18n \uBBF8\uC801\uC6A9
|
|
4201
|
+
- \u2705 \uD14C\uC2A4\uD2B8 \uCEE4\uBC84\uB9AC\uC9C0 85%
|
|
4202
|
+
|
|
4203
|
+
### \uAD8C\uC7A5 \uC0AC\uD56D
|
|
4204
|
+
1. \uB85C\uADF8\uC778 \uC2E4\uD328 \uD69F\uC218 \uC81C\uD55C \uAE30\uB2A5 \uCD94\uAC00
|
|
4205
|
+
2. \uC5D0\uB7EC \uBA54\uC2DC\uC9C0 \uAD6D\uC81C\uD654 \uC801\uC6A9
|
|
4206
|
+
\`\`\`
|
|
4207
|
+
`
|
|
4208
|
+
},
|
|
4209
|
+
{
|
|
4210
|
+
name: "dev-scaffold",
|
|
4211
|
+
content: `---
|
|
4212
|
+
name: dev-scaffold
|
|
4213
|
+
description: SDD CLI\uC758 \uC0C8 \uBA85\uB839\uC5B4, \uBAA8\uB4C8, \uD30C\uC11C, \uAC80\uC99D\uAE30\uC758 TypeScript \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uCF54\uB4DC\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 "\uC0C8 \uBA85\uB839\uC5B4 \uB9CC\uB4E4\uC5B4", "\uBAA8\uB4C8 \uCD94\uAC00", "scaffold", "\uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8" \uB4F1\uC744 \uC694\uCCAD\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
4214
|
+
allowed-tools: Read, Write, Edit, Glob
|
|
4215
|
+
---
|
|
4216
|
+
|
|
4217
|
+
# \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uC0DD\uC131
|
|
4218
|
+
|
|
4219
|
+
## Instructions
|
|
4220
|
+
|
|
4221
|
+
### 1. \uC0DD\uC131 \uB300\uC0C1 \uD655\uC778
|
|
4222
|
+
|
|
4223
|
+
\uC0AC\uC6A9\uC790 \uC694\uCCAD\uC5D0\uC11C \uC0DD\uC131\uD560 \uD0C0\uC785 \uD30C\uC545:
|
|
4224
|
+
- **command**: CLI \uBA85\uB839\uC5B4
|
|
4225
|
+
- **module**: \uBE44\uC988\uB2C8\uC2A4 \uB85C\uC9C1 \uBAA8\uB4C8
|
|
4226
|
+
- **parser**: \uD30C\uC11C/\uBCC0\uD658\uAE30
|
|
4227
|
+
- **validator**: \uAC80\uC99D\uAE30
|
|
4228
|
+
|
|
4229
|
+
### 2. \uAE30\uC874 \uD328\uD134 \uBD84\uC11D
|
|
4230
|
+
|
|
4231
|
+
\uD504\uB85C\uC81D\uD2B8\uC758 \uAE30\uC874 \uCF54\uB4DC\uB97C \uBD84\uC11D\uD558\uC5EC \uD328\uD134 \uCD94\uCD9C:
|
|
4232
|
+
- \uB514\uB809\uD1A0\uB9AC \uAD6C\uC870
|
|
4233
|
+
- \uD30C\uC77C \uB124\uC774\uBC0D \uADDC\uCE59
|
|
4234
|
+
- \uC784\uD3EC\uD2B8 \uC2A4\uD0C0\uC77C
|
|
4235
|
+
- \uD0C0\uC785 \uC815\uC758 \uBC29\uC2DD
|
|
4236
|
+
|
|
4237
|
+
### 3. \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uC0DD\uC131
|
|
4238
|
+
|
|
4239
|
+
\uCD94\uCD9C\uB41C \uD328\uD134\uC744 \uB530\uB77C \uD30C\uC77C \uC0DD\uC131:
|
|
4240
|
+
- \uBA54\uC778 \uAD6C\uD604 \uD30C\uC77C (.ts)
|
|
4241
|
+
- \uD14C\uC2A4\uD2B8 \uD30C\uC77C (.test.ts)
|
|
4242
|
+
- \uD0C0\uC785 \uC815\uC758 (\uD544\uC694\uC2DC)
|
|
4243
|
+
- \uC778\uB371\uC2A4 \uC775\uC2A4\uD3EC\uD2B8 \uC5C5\uB370\uC774\uD2B8
|
|
4244
|
+
|
|
4245
|
+
## Examples
|
|
4246
|
+
|
|
4247
|
+
**\uC0AC\uC6A9\uC790**: "export \uBA85\uB839\uC5B4 scaffold \uC0DD\uC131\uD574\uC918"
|
|
4248
|
+
|
|
4249
|
+
**\uC751\uB2F5**:
|
|
4250
|
+
\`\`\`
|
|
4251
|
+
## Scaffold: export \uBA85\uB839\uC5B4
|
|
4252
|
+
|
|
4253
|
+
\uC0DD\uC131 \uD30C\uC77C:
|
|
4254
|
+
- src/cli/commands/export.ts
|
|
4255
|
+
- src/cli/commands/export.test.ts
|
|
4256
|
+
|
|
4257
|
+
\uAE30\uC874 \uD328\uD134 \uCC38\uC870:
|
|
4258
|
+
- src/cli/commands/validate.ts
|
|
4259
|
+
|
|
4260
|
+
[\uD30C\uC77C \uC0DD\uC131 \uC9C4\uD589...]
|
|
4261
|
+
\`\`\`
|
|
4262
|
+
`
|
|
4263
|
+
},
|
|
4264
|
+
{
|
|
4265
|
+
name: "dev-status",
|
|
4266
|
+
content: `---
|
|
4267
|
+
name: dev-status
|
|
4268
|
+
description: SDD CLI \uAD6C\uD604 \uC9C4\uD589 \uC0C1\uD669\uC744 \uBD84\uC11D\uD558\uACE0 Phase\uBCC4 \uC2A4\uD399 \uD604\uD669, \uAD6C\uD604 \uC644\uB8CC\uC728, \uD14C\uC2A4\uD2B8 \uD1B5\uACFC\uC728\uC744 \uBCF4\uACE0\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 "\uD604\uD669", "\uC9C4\uD589 \uC0C1\uD669", "\uC5BC\uB9C8\uB098 \uB410\uC5B4", "status" \uB4F1\uC744 \uC694\uCCAD\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
4269
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
4270
|
+
---
|
|
4271
|
+
|
|
4272
|
+
# \uAD6C\uD604 \uC9C4\uD589 \uC0C1\uD669
|
|
4273
|
+
|
|
4274
|
+
## Instructions
|
|
4275
|
+
|
|
4276
|
+
### 1. \uC2A4\uD399 \uD604\uD669 \uC218\uC9D1
|
|
4277
|
+
|
|
4278
|
+
\`.sdd/specs/\` \uB514\uB809\uD1A0\uB9AC \uC2A4\uCE94:
|
|
4279
|
+
- \uC804\uCCB4 \uC2A4\uD399 \uC218
|
|
4280
|
+
- Phase\uBCC4 \uBD84\uB958
|
|
4281
|
+
- \uC0C1\uD0DC\uBCC4 \uBD84\uB958 (draft, implemented, review)
|
|
4282
|
+
|
|
4283
|
+
### 2. \uAD6C\uD604 \uC644\uB8CC\uC728 \uACC4\uC0B0
|
|
4284
|
+
|
|
4285
|
+
\`\`\`
|
|
4286
|
+
\uC644\uB8CC\uC728 = (implemented \uC2A4\uD399 \uC218) / (\uC804\uCCB4 \uC2A4\uD399 \uC218) \xD7 100
|
|
4287
|
+
\`\`\`
|
|
4288
|
+
|
|
4289
|
+
### 3. \uD14C\uC2A4\uD2B8 \uC0C1\uD0DC \uD655\uC778
|
|
4290
|
+
|
|
4291
|
+
\`\`\`bash
|
|
4292
|
+
pnpm vitest run --reporter=json
|
|
4293
|
+
\`\`\`
|
|
4294
|
+
|
|
4295
|
+
### 4. \uB9AC\uD3EC\uD2B8 \uC0DD\uC131
|
|
4296
|
+
|
|
4297
|
+
## Examples
|
|
4298
|
+
|
|
4299
|
+
**\uC0AC\uC6A9\uC790**: "\uD604\uC7AC \uC9C4\uD589 \uC0C1\uD669 \uC54C\uB824\uC918"
|
|
4300
|
+
|
|
4301
|
+
**\uC751\uB2F5**:
|
|
4302
|
+
\`\`\`
|
|
4303
|
+
## SDD \uAD6C\uD604 \uD604\uD669
|
|
4304
|
+
|
|
4305
|
+
### \uC804\uCCB4 \uC9C4\uD589\uB960: 65% (13/20 \uC2A4\uD399)
|
|
4306
|
+
|
|
4307
|
+
### Phase\uBCC4 \uD604\uD669
|
|
4308
|
+
|
|
4309
|
+
| Phase | \uC804\uCCB4 | \uC644\uB8CC | \uC9C4\uD589\uB960 |
|
|
4310
|
+
|-------|------|------|--------|
|
|
4311
|
+
| Phase 1 | 8 | 8 | 100% |
|
|
4312
|
+
| Phase 2 | 7 | 5 | 71% |
|
|
4313
|
+
| Phase 3 | 5 | 0 | 0% |
|
|
4314
|
+
|
|
4315
|
+
### \uD14C\uC2A4\uD2B8 \uD604\uD669
|
|
4316
|
+
- \uC804\uCCB4: 45\uAC1C
|
|
4317
|
+
- \uD1B5\uACFC: 42\uAC1C (93%)
|
|
4318
|
+
- \uC2E4\uD328: 3\uAC1C
|
|
4319
|
+
|
|
4320
|
+
### \uB2E4\uC74C \uC791\uC5C5 \uCD94\uCC9C
|
|
4321
|
+
\u2192 Phase 2\uC758 \uB0A8\uC740 2\uAC1C \uC2A4\uD399 \uC644\uB8CC
|
|
4322
|
+
\`\`\`
|
|
4323
|
+
`
|
|
4324
|
+
},
|
|
4325
|
+
{
|
|
4326
|
+
name: "dev-test",
|
|
4327
|
+
content: `---
|
|
4328
|
+
name: dev-test
|
|
4329
|
+
description: Vitest\uB97C \uC0AC\uC6A9\uD558\uC5EC \uD14C\uC2A4\uD2B8\uB97C \uC791\uC131\uD558\uAC70\uB098 \uC2E4\uD589\uD569\uB2C8\uB2E4. \uB300\uC0C1 \uD30C\uC77C\uC744 \uBD84\uC11D\uD558\uC5EC \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4\uB97C \uC0DD\uC131\uD558\uACE0 \uCEE4\uBC84\uB9AC\uC9C0\uB97C \uD655\uC778\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 "\uD14C\uC2A4\uD2B8 \uC791\uC131", "\uD14C\uC2A4\uD2B8 \uC2E4\uD589", "\uCEE4\uBC84\uB9AC\uC9C0", "vitest" \uB4F1\uC744 \uC694\uCCAD\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.
|
|
4330
|
+
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
|
|
4331
|
+
---
|
|
4332
|
+
|
|
4333
|
+
# \uD14C\uC2A4\uD2B8 \uC791\uC131 \uBC0F \uC2E4\uD589
|
|
4334
|
+
|
|
4335
|
+
## Instructions
|
|
4336
|
+
|
|
4337
|
+
### 1. \uD14C\uC2A4\uD2B8 \uB300\uC0C1 \uBD84\uC11D
|
|
4338
|
+
|
|
4339
|
+
\uB300\uC0C1 \uD30C\uC77C\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD560 \uD568\uC218/\uD074\uB798\uC2A4 \uC2DD\uBCC4:
|
|
4340
|
+
- export\uB41C \uD568\uC218/\uD074\uB798\uC2A4
|
|
4341
|
+
- \uC8FC\uC694 \uB85C\uC9C1 \uD750\uB984
|
|
4342
|
+
- \uC5E3\uC9C0 \uCF00\uC774\uC2A4
|
|
4343
|
+
|
|
4344
|
+
### 2. \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4 \uC0DD\uC131
|
|
4345
|
+
|
|
4346
|
+
\uC2A4\uD399\uC758 Scenario\uB97C \uCC38\uC870\uD558\uC5EC \uD14C\uC2A4\uD2B8 \uC791\uC131:
|
|
4347
|
+
- describe: \uD14C\uC2A4\uD2B8 \uADF8\uB8F9
|
|
4348
|
+
- it: \uAC1C\uBCC4 \uD14C\uC2A4\uD2B8 \uCF00\uC774\uC2A4
|
|
4349
|
+
- GIVEN-WHEN-THEN \uAD6C\uC870
|
|
4350
|
+
|
|
4351
|
+
### 3. \uD14C\uC2A4\uD2B8 \uC2E4\uD589
|
|
4352
|
+
|
|
4353
|
+
\`\`\`bash
|
|
4354
|
+
# \uC804\uCCB4 \uD14C\uC2A4\uD2B8
|
|
4355
|
+
pnpm vitest run
|
|
4356
|
+
|
|
4357
|
+
# \uD2B9\uC815 \uD30C\uC77C
|
|
4358
|
+
pnpm vitest run src/path/to/file.test.ts
|
|
4359
|
+
|
|
4360
|
+
# \uAC10\uC2DC \uBAA8\uB4DC
|
|
4361
|
+
pnpm vitest
|
|
4362
|
+
|
|
4363
|
+
# \uCEE4\uBC84\uB9AC\uC9C0
|
|
4364
|
+
pnpm vitest run --coverage
|
|
4365
|
+
\`\`\`
|
|
4366
|
+
|
|
4367
|
+
### 4. \uACB0\uACFC \uBD84\uC11D
|
|
4368
|
+
|
|
4369
|
+
- \uD1B5\uACFC/\uC2E4\uD328 \uD604\uD669
|
|
4370
|
+
- \uCEE4\uBC84\uB9AC\uC9C0 \uBD80\uC871 \uC601\uC5ED
|
|
4371
|
+
- \uAC1C\uC120 \uC81C\uC548
|
|
4372
|
+
|
|
4373
|
+
## Examples
|
|
4374
|
+
|
|
4375
|
+
**\uC0AC\uC6A9\uC790**: "validation.ts \uD14C\uC2A4\uD2B8 \uC791\uC131\uD574\uC918"
|
|
4376
|
+
|
|
4377
|
+
**\uC751\uB2F5**:
|
|
4378
|
+
\`\`\`
|
|
4379
|
+
## \uD14C\uC2A4\uD2B8 \uBD84\uC11D: src/core/validation.ts
|
|
4380
|
+
|
|
4381
|
+
### \uBC1C\uACAC\uB41C \uD568\uC218
|
|
4382
|
+
- validateLength(value, min, max)
|
|
4383
|
+
- validateRequired(obj, fields)
|
|
4384
|
+
|
|
4385
|
+
### \uC0DD\uC131\uD560 \uD14C\uC2A4\uD2B8
|
|
4386
|
+
|
|
4387
|
+
\`\`\`typescript
|
|
4388
|
+
describe('validateLength', () => {
|
|
4389
|
+
it('\uBC94\uC704 \uB0B4 \uBB38\uC790\uC5F4\uC740 \uC720\uD6A8\uD558\uB2E4', () => {
|
|
4390
|
+
expect(validateLength('hello', 1, 10).valid).toBe(true);
|
|
4391
|
+
});
|
|
4392
|
+
|
|
4393
|
+
it('\uCD5C\uC18C \uAE38\uC774 \uBBF8\uB2EC \uC2DC \uC2E4\uD328\uD55C\uB2E4', () => {
|
|
4394
|
+
expect(validateLength('hi', 5, 10).valid).toBe(false);
|
|
4395
|
+
});
|
|
4396
|
+
});
|
|
4397
|
+
\`\`\`
|
|
4398
|
+
|
|
4399
|
+
\uD14C\uC2A4\uD2B8 \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?
|
|
4400
|
+
\`\`\`
|
|
4401
|
+
`
|
|
4402
|
+
}
|
|
4403
|
+
];
|
|
4404
|
+
}
|
|
3733
4405
|
function generateProposalTemplate() {
|
|
3734
4406
|
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
3735
4407
|
return `---
|
|
@@ -4105,6 +4777,7 @@ async function runInit(options) {
|
|
|
4105
4777
|
listItem("templates/", 1);
|
|
4106
4778
|
listItem(".claude/");
|
|
4107
4779
|
listItem("commands/", 1);
|
|
4780
|
+
listItem("skills/", 1);
|
|
4108
4781
|
newline();
|
|
4109
4782
|
info("Claude \uC2AC\uB798\uC2DC \uCEE4\uB9E8\uB4DC:");
|
|
4110
4783
|
listItem("/sdd.start - \uC6CC\uD06C\uD50C\uB85C\uC6B0 \uC2DC\uC791 (\uD1B5\uD569 \uC9C4\uC785\uC810)");
|
|
@@ -4116,6 +4789,14 @@ async function runInit(options) {
|
|
|
4116
4789
|
listItem("/sdd.validate - \uC2A4\uD399 \uAC80\uC99D");
|
|
4117
4790
|
listItem("/sdd.status - \uC0C1\uD0DC \uD655\uC778");
|
|
4118
4791
|
listItem("/sdd.change - \uBCC0\uACBD \uC81C\uC548");
|
|
4792
|
+
newline();
|
|
4793
|
+
info("Claude \uAC1C\uBC1C \uC2A4\uD0AC (\uC790\uB3D9 \uC0AC\uC6A9):");
|
|
4794
|
+
listItem("dev-implement - \uC2A4\uD399 \uAE30\uBC18 TDD \uAD6C\uD604");
|
|
4795
|
+
listItem("dev-next - \uB2E4\uC74C \uAD6C\uD604 \uC2A4\uD399 \uCD94\uCC9C");
|
|
4796
|
+
listItem("dev-review - \uCF54\uB4DC \uB9AC\uBDF0");
|
|
4797
|
+
listItem("dev-scaffold - \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uC0DD\uC131");
|
|
4798
|
+
listItem("dev-status - \uAD6C\uD604 \uC9C4\uD589 \uC0C1\uD669");
|
|
4799
|
+
listItem("dev-test - \uD14C\uC2A4\uD2B8 \uC791\uC131/\uC2E4\uD589");
|
|
4119
4800
|
if (!options.skipGitSetup) {
|
|
4120
4801
|
await promptGitSetup(cwd, options.autoApprove || false);
|
|
4121
4802
|
}
|