crumbs-spec 0.0.0-stage โ 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ko.md +397 -0
- package/README.md +398 -2
- package/dist/src/check.js +72 -0
- package/dist/src/check.js.map +1 -0
- package/dist/src/cli.js +195 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.js +151 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/dates.js +22 -0
- package/dist/src/dates.js.map +1 -0
- package/dist/src/graph.js +241 -0
- package/dist/src/graph.js.map +1 -0
- package/dist/src/headings.js +55 -0
- package/dist/src/headings.js.map +1 -0
- package/dist/src/init.js +114 -0
- package/dist/src/init.js.map +1 -0
- package/dist/src/log.js +65 -0
- package/dist/src/log.js.map +1 -0
- package/dist/src/markdown.js +323 -0
- package/dist/src/markdown.js.map +1 -0
- package/dist/src/messages.js +203 -0
- package/dist/src/messages.js.map +1 -0
- package/dist/src/model.js +4 -0
- package/dist/src/model.js.map +1 -0
- package/dist/src/report.js +14 -0
- package/dist/src/report.js.map +1 -0
- package/dist/src/rules/broken-anchor.js +23 -0
- package/dist/src/rules/broken-anchor.js.map +1 -0
- package/dist/src/rules/broken-link.js +21 -0
- package/dist/src/rules/broken-link.js.map +1 -0
- package/dist/src/rules/duplicate-policy.js +47 -0
- package/dist/src/rules/duplicate-policy.js.map +1 -0
- package/dist/src/rules/log-body.js +23 -0
- package/dist/src/rules/log-body.js.map +1 -0
- package/dist/src/rules/log-format.js +34 -0
- package/dist/src/rules/log-format.js.map +1 -0
- package/dist/src/rules/log-order.js +23 -0
- package/dist/src/rules/log-order.js.map +1 -0
- package/dist/src/rules/missing-backlink.js +42 -0
- package/dist/src/rules/missing-backlink.js.map +1 -0
- package/dist/src/rules/missing-code-path.js +16 -0
- package/dist/src/rules/missing-code-path.js.map +1 -0
- package/dist/src/rules/missing-flow.js +17 -0
- package/dist/src/rules/missing-flow.js.map +1 -0
- package/dist/src/rules/missing-section.js +31 -0
- package/dist/src/rules/missing-section.js.map +1 -0
- package/dist/src/rules/open-question.js +13 -0
- package/dist/src/rules/open-question.js.map +1 -0
- package/dist/src/rules/section-order.js +46 -0
- package/dist/src/rules/section-order.js.map +1 -0
- package/dist/src/rules/unreachable.js +27 -0
- package/dist/src/rules/unreachable.js.map +1 -0
- package/dist/src/rules/unterminated-comment.js +13 -0
- package/dist/src/rules/unterminated-comment.js.map +1 -0
- package/dist/src/skills.js +27 -0
- package/dist/src/skills.js.map +1 -0
- package/dist/src/templates/agents.js +54 -0
- package/dist/src/templates/agents.js.map +1 -0
- package/dist/src/templates/en.js +75 -0
- package/dist/src/templates/en.js.map +1 -0
- package/dist/src/templates/ko.js +75 -0
- package/dist/src/templates/ko.js.map +1 -0
- package/dist/src/templates/skills-en.js +260 -0
- package/dist/src/templates/skills-en.js.map +1 -0
- package/dist/src/templates/skills-ko.js +265 -0
- package/dist/src/templates/skills-ko.js.map +1 -0
- package/dist/src/version.js +7 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +50 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sienna
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
# crumbs-spec ๐
|
|
2
|
+
|
|
3
|
+
**ํ๊ตญ์ด** ยท [English](README.md)
|
|
4
|
+
|
|
5
|
+
[](https://github.com/Sienna94/crumbs-spec/actions/workflows/ci.yml) [](https://www.npmjs.com/package/crumbs-spec)
|
|
6
|
+
|
|
7
|
+
์์ด์ ํธ๊ฐ ๊ธธ์ ์์ง ์๊ฒ ๋ฌธ์๋ง๋ค ๋นต๋ถ์ค๋ฌ๊ธฐ(๋งํฌ)๋ฅผ ๋จ๊ธฐ๊ณ , ์ธ๋ฑ์ค์์ ์์ธ ๋ฌธ์๊น์ง ํ ๊ธธ๋ก ์ด์ด์ง๋ **์ด์ ์๋ ์คํ**์ ๋ง๋ค์ด์. ์ ์ฅ์๊ฐ *์ง๊ธ* ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์ฑ
์ ๋จ์ ๋ฌธ์๋ก ๋๊ณ , ๊ทธ ๋ฌธ์๋ค์ด ์ ์ด์ด์ ธ ์๋์ง ๋ช
๋ น ํ๋๋ก ๊ฒ์ฌํ๊ณ , ์์ด์ ํธ๊ฐ ๋ฌธ์๋ฅผ ์ฐ๊ณ ยท์ฐพ๊ณ ยท๋ฌป๊ณ ยท๋ฐ์ํ๋ ์ ์ฐจ๋ฅผ ์คํฌ๋ก ๊ณ ์ ํ ๋๊ตฌ์์.
|
|
8
|
+
|
|
9
|
+
## ์ ๋ง๋ค์๋์
|
|
10
|
+
|
|
11
|
+
์ค์ ์ฑ ์ ์ฅ์์์ ์์ญ ๊ฐ์ ์คํ ๋ฌธ์๋ฅผ ์์ด์ ํธ์ ํจ๊ป ์ด์ํ๋ค ๋ณด๋ ๊ฐ์ ์ผ์ด ์๊พธ ๋ฐ๋ณต๋์ด์.
|
|
12
|
+
|
|
13
|
+
1. ์คํ์ด ๋ณ๊ฒฝ ๋จ์(๊ธฐ๋ฅ๋ณ `spec.md`, ํฐ์ผ)๋ก๋ง ๋จ์์, ๋ช ๋ฌ ๋ค "์ง๊ธ ์ด ๊ท์น์ด ๋ญ์ง?"์ ๋ตํ ๋ฌธ์๊ฐ ์์์ด์.
|
|
14
|
+
2. ์ํค์ฒ๋ผ ์์ผ๋ ๊ฐ์ ๊ท์น์ด ์ฌ๋ฌ ๋ฌธ์์ ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ฒ ์ ํ๊ณ , ์ด๋ ์ชฝ์ด ๋ง๋์ง ์๋ฌด๋ ๋ชฐ๋์ด์. ๋์ค์ ๋ฒค์น๋งํฌ๋ฅผ ๋๋ ค ๋ณด๋ ์์ด์ ํธ๊ฐ ๋ฌธ์ ๊ฐ ๋ถ์ผ์น๋ฅผ ์
์ด๋ ์ฐพ์๋์ด์.
|
|
15
|
+
3. ์์ด์ ํธ๊ฐ ๋ฌธ์๋ฅผ ์ฝ์ ๋ ํด๋ ๊ตฌ์กฐ์ ๊ฒ์์ ๊ธฐ๋๋ค ๋ณด๋ ๋ค๋ฅธ ์์ญ์ผ๋ก ์๊ฑฐ๋ grep์ผ๋ก ๋จ์ด์ก์ด์. ์ง๋ฌธ ํ๋์ ๋ฌธ์ 8๊ฐ๋ฅผ ์ฝ๋ ์ผ๋ ์์๊ณ ์.
|
|
16
|
+
|
|
17
|
+
"๋ฌธ์๋ฅผ ๋ ์ ์ฐ์"๋ก๋ ํด๊ฒฐ์ด ์ ๋์ด์. **๊ตฌ์กฐ๋ฅผ ๊ธฐ๊ณ๊ฐ ๊ฐ์ ํ๋ ๋๊ตฌ**๊ฐ ํ์ํ์ด์. ์ ์ฑ
์ ์์ ์๋ฅผ ํ๋๋ก ์ ํ๊ณ , ๋งํฌ ๊ทธ๋ํ๋ฅผ ๊ฒ์ฌํ๊ณ , ๋ชจ๋ฅด๋ ๊ฒ์ ์ง๋ฌธ์ผ๋ก ๋จ๊ธฐ๊ฒ ํ๋ฉด ์์ด์ ํธ๋ ์ฌ๋๋ ๊ฐ์ ๊ธธ๋ก ๋ฌธ์์ ๋ฟ์์. ๊ทธ๋์ ๋นต๋ถ์ค๋ฌ๊ธฐ๋ฅผ ๋ฟ๋ฆฌ๊ธฐ ์์ํ์ด์.
|
|
18
|
+
|
|
19
|
+
## ๋ค๋ฅธ ๋๊ตฌ์ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์
|
|
20
|
+
|
|
21
|
+
Spec Kit์ ๊ตฌํ ์ ๊ณํ์, LLM Wiki๋ ์๋ฃ๋ฅผ ์๋ ์ํค๋ฅผ ์ ๋ค๋ค์. crumbs-spec์ ๊ทธ ์ฌ์ด์ ๋น์๋ฆฌ, **๊ตฌํ์ด ๋๋ ๋ค์๋ ๋จ์์ผ ํ๋ ํ์ฌ ์ํ**๋ฅผ ๋งก์์. ๋์ฒด๊ฐ ์๋๋ผ ๋ณด์ ๊ด๊ณ์์.
|
|
22
|
+
|
|
23
|
+
| | GitHub Spec Kit | OpenSpec | Karpathy LLM Wiki | **crumbs-spec** |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| ๋ฌธ์ ๋จ์ | ๋ณ๊ฒฝ(๊ธฐ๋ฅ) ํ๋: `spec.md`ยท`plan.md`ยท`tasks.md` | ํ์ฌ ์ํ ์คํ + ๋ณ๊ฒฝ ๋ธํ | ์ํฐํฐยท๊ฐ๋
ยท์๋ณธ ์์ฝ ํ์ด์ง | **์ฑ
์(์ฌ์ฉ์ ํ๋ฆ) ํ๋**. ์ ์ฑ
์ ๋ฌธ์ ํ๋๊ฐ ์์ |
|
|
26
|
+
| ์์ | ๊ตฌํ ์ | ๊ตฌํ ์ ยทํ | ์๋ฃ ๋ฐ์ ์์ | **๊ตฌํ ๋ค ํ์ฌ ๋์** |
|
|
27
|
+
| ๊ธฐ์กด ์ฝ๋ | "์ถ๋ก ํ์ง ์๋๋ค"๊ณ ์ค์ค๋ก ๋ฐํ | ์จ๋ณด๋ฉ์ ์์ผ๋ ์ฝ๋โ์คํ ์ด์์ ์์ | ์๋ณธ ์๋ฃ๊ฐ ๋์, ์ฝ๋ ์๋ | **crumbs-writer ์คํฌ์ด ์ฝ๋ยทํ
์คํธ์์ ์ด์์ ๋ง๋ค๊ณ , ๋ชจ๋ฅด๋ ๊ฒ์ `[ํ์ธ ํ์]` ์ง๋ฌธ์ผ๋ก ๋จ๊ฒจ์** |
|
|
28
|
+
| ํ์ | ํด๋์ ํ์ผ ์ด๋ฆ | ํด๋์ ํ์ผ ์ด๋ฆ | ์ธ๋ฑ์ค ์ฐ์ | **์ธ๋ฑ์ค โ ๊ฐ์ โ ์์ธ ๋งํฌ๋ง**. IDยทfront matter ์์ |
|
|
29
|
+
| ๊ธฐ๊ณ ๊ฒ์ฌ | specยทplanยทtasks ์ผ๊ด์ฑ | `openspec validate`(๊ตฌ์กฐ) ๊ฒ์ฌ์ ์์นด์ด๋ธ ์ ๋ธํ ๋ณํฉ | ๊ณ ์ ํ์ด์งยท๋๊ธด ๋งํฌ lint(LLM ํ๋จ ํฌํจ) | **๊ฒฐ์ ๋ก ์ 16๊ฐ ๊ตฌ์กฐ ๊ท์น**: ๋งํฌยท์ต์ปคยท๋๋ฌ ๊ฐ๋ฅยท์ญ๋งํฌยท์ ์ฑ
์ด๋ฆ ์ค๋ณตยท๊ทผ๊ฑฐ ๊ฒฝ๋กยท์ ์์ยทํ๋ฆ ๋์ยท๋ก๊ทธ ํ์ยท๋ซํ์ง ์์ ์ฃผ์ |
|
|
30
|
+
| ๊ตฌํ ํ ๋๊ธฐํ | ํ์ด ์ ์ง ๋ฐฉ์์ ๊ณ ๋ฆ | `archive`/`sync`๋ก ๋ณ๊ฒฝ๋ถ๋ง | ์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ํค์ ํ๋ฅ | **์์ด์ ํธ ๊ท์น("์์ฒญ ์์ด๋ ๊ฐ์ ๋ณ๊ฒฝ์์ ๋ฌธ์ ๊ฐฑ์ ")๊ณผ ๊ฒฐ์ ๋ก๊ทธ** |
|
|
31
|
+
| ์ฌ๋ ๊ฐ๋
์ฑ | ์ฐ๋ฌธ | ์ฐ๋ฌธ | ์ฐ๋ฌธ | **ํ๋ฆ ๋์(Mermaid)๊ณผ ๋ถ๊ธฐ ํ๋ฅผ ํ
ํ๋ฆฟ์ ํฌํจ** |
|
|
32
|
+
|
|
33
|
+
Kiro ์คํ๊ณผ BMAD๋ Spec Kit๊ณผ ๋น์ทํ๊ฒ ๊ธฐ๋ฅ ๋จ์์ด๊ณ ๊ตฌํ ์ ์ ์ฐ์ด๋ฏ๋ก ๋ฐ๋ก ์ฃ์ง ์์์ด์. ํ๊ตญ์ด ๊ธฐํ ๋ฌธ์๊ฐ ๋ค์ฏ ๊ฐ์ง๋ฅผ ๋ชจ๋ ๋น๊ตํด์.
|
|
34
|
+
|
|
35
|
+
LLM Wiki์์๋ ์๋ณธ/์ํค/์คํค๋ง ๋ถ๋ฆฌ, ์ธ๋ฑ์ค ์ฐ์ , ์ถ๊ฐ ์ ์ฉ ๋ก๊ทธ, ์ฌ๋์ด ๊ฐ๋
ํ๋ ingest๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์์ด์. ์ผ๋ถ๋ฌ ๋ค๋ฅด๊ฒ ํ ๊ฑด ์
์ด์์. ์ํฐํฐ ํ์ด์ง ๋์ ์ฑ
์ ๋จ์๋ก ์กฐ์งํ๊ณ (์ฌ๋ฌ ํ๋ฆ์ด ๋ถ๊ธฐ ์ถ์ผ๋ก ์ฐ๋ ๊ฐ๋
๋ง `concepts/`์ ๋ฌ์), ๋ฌธ์๋ ์์ด์ ํธ๊ฐ ์ ์งํ๋ ์ฌ๋์ด ์์ ํ๊ณ , lint๋ LLM ํ๋จ ์์ด ๊ฒฐ์ ๋ก ์ ์ผ๋ก๋ง ํด์. ๋ ์์ธํ ๋น๊ต๋ [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md) 1์ ์ ์์ด์.
|
|
36
|
+
|
|
37
|
+
## ์ค์ํ๊ฒ ์๊ฐํ ๊ฒ
|
|
38
|
+
|
|
39
|
+
- **ํ์ฌ ์ํ์ ๋จ์ผ ์ง์ค.** ๋ณ๊ฒฝ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ง ์์์. ๋ฌธ์๋ "๋ฌด์์ด ๋ฐ๋์๋"๊ฐ ์๋๋ผ "์ง๊ธ ์ด๋ป๊ฒ ๋์ํ๋"๋ฅผ ์ค๋ช
ํด์.
|
|
40
|
+
- **์ถ์ธก ๊ธ์ง.** ์ฝ๋ยทํ
์คํธยท์น์ธ๋ ์๋ฃ๋ก ํ์ธ๋์ง ์์ ๊ท์น์ "์ง๊ธ์ ์ด๋ ๊ฒ ๋์ํ๋ค" ์์ ๊ณผ `[ํ์ธ ํ์]` ์ง๋ฌธ์ผ๋ก๋ง ๋จ๊ฒจ์. `check`๋ ์ง๋ฌธ์ด ๋จ์ ๋ฌธ์๋ง๋ค `open-question` ๊ฒฝ๊ณ ๋ฅผ ํ๋์ฉ ๋ด์. ์ด๋ค ์์ ์ด ์ถ์ธก์ธ์ง๋ ์คํฌ ๊ท์น๊ณผ ๋ฆฌ๋ทฐ์ด์ ๋ชซ์ด๊ณ , `check`๋ ํ๋ณํ์ง ๋ชปํด์.
|
|
41
|
+
- **์ ์ฑ
ํ๋์ ์ฃผ์ธ ํ๋, ์ด๋ฆ ๋จ์๋ก ๊ฒ์ฌ.** `check`๋ ๊ฐ์ ์ ์ฑ
์ด๋ฆ์ด ๋ ๋ฌธ์์ ์๊ฑฐ๋ ํ ๋ฌธ์์ ๋ ๋ฒ ์์ผ๋ฉด ๊ฑฐ๋ถํด์. ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๊ฐ์ ๋ง์ ํ๋ ๋ ์ ์ฑ
์ ์ฐพ์ง ๋ชปํ๊ณ , ๊ทธ ์ด๋ฆ ๊ท์น์ writer ์คํฌ์ด ๋งก์์.
|
|
42
|
+
- **์ฌ๋ ์ฐ์ ์ ๋ณธ๋ฌธ.** ID, ์ํ ํ, ๋ฌธ๋ฒ ๊ฐ์ ๊ฐ ์์ด์. ํ์ ์ ๋ณด๋ ๋งํฌ์ ์ ๋ชฉ์๋ง ๋ฌ์.
|
|
43
|
+
- **๊ฒ์ฌ๋ ๊ฒฐ์ ๋ก ์ ์ผ๋ก, ํ๋จ์ ์ฌ๋๊ณผ ์คํฌ์ด.** `check`๋ ๊ตฌ์กฐ๋ง ๋ด์. ๋ฌธ์ฒดยท๋ด์ฉยท๋
ธํ ํ์ ์ ์คํฌ ์ง์นจ๊ณผ ์ฌ๋์ด ๋งก์์.
|
|
44
|
+
- **๊ฒฐ์ ์ ํ ๊ณณ์.** ์ง๋ฌธ์ด ๋ต์ ์ป์ผ๋ฉด ๋ก๊ทธ์ `decision` ํญ๋ชฉ์ ๋จ๊ธฐ๊ณ ๋ฌธ์๋ ๋ ์ง ๋งํฌ ํ๋๋ก ๊ทธ ๊ฒฐ์ ์ ๊ฐ๋ฆฌ์ผ์.
|
|
45
|
+
- **๋ ์ธ์ด.** `crumbs.json`์ `lang`์ด ์ ์ฅ์ ์ ์ฒด์ ํ
ํ๋ฆฟ, ์คํฌ, ๋ฉ์์ง, AGENTS ๋ธ๋ก ์ธ์ด๋ฅผ ์ ํด์. ๊ธฐ๋ณธ๊ฐ์ ์์ด(`en`)์ด๊ณ `ko`๋ฅผ ์ฐ๋ฉด ํ๊ตญ์ด๊ฐ ๋ผ์.
|
|
46
|
+
|
|
47
|
+
## ์ค์ ๋ก ์จ ๋ณด๋ (ํ ๋ฒ ์คํ, ์์ฒด ๋ณด๊ณ )
|
|
48
|
+
|
|
49
|
+
์ด ๊ฒฐ๊ณผ๋ ๋ฒค์น๋งํฌ๊ฐ ์๋๋ผ ์ผํ๋ก ์ฝ์ด ์ฃผ์ธ์. ์ง๋ฌธ 18๊ฐ๋ก ํ ๋ฒ ๋๋ฆฐ ๊ฒฐ๊ณผ์ด๊ณ ์์ฑ์๊ฐ ์ฑ์ ํ์ด์. ์ง๋ฌธ์ ๊ธฐ์กด ์คํ ์ฒด๊ณ์์ ๊ฐ์ ธ์๊ณ , ๋ ๋์์ ๊ท๋ชจ๋ ๋ฌ๋ผ์(๋ฌธ์ 38๊ฐ ๋ ์ฝ 127๊ฐ). ์๋ณธ ๋ฐ์ดํฐ๋ ๋น๊ณต๊ฐ ์ ์ฅ์์์ ๋์ ๊ณต๊ฐํ ์ ์์ด์. ๋ก๋๋งต์ ์์ ์ฑ๊ณผ ๋ฒค์น๋งํฌ ๋ฌ๋๊ฐ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋์ ํ๊ธฐ ์ํ ๊ฒ์ด์์.
|
|
50
|
+
|
|
51
|
+
์ค์ ์ฑ ์ ์ฅ์ ์ธ ์์ญ(์ฝ๋ ์ฝ 4๋ง ์ค)์ ๊ธฐ์กด ์คํ ๋ฌธ์๋ฅผ ์ ํ ๋ณด์ฌ ์ฃผ์ง ์๊ณ crumbs-writer ์คํฌ๋ก ๋ค์ ์ผ์ด์. ๊ทธ๋ค์ ๊ธฐ์กด ์คํ ์ฒด๊ณ์ crumbs ์ฒด๊ณ์ ๊ฐ์ ์ง๋ฌธ 18๊ฐ๋ฅผ ๋์ ธ ์์ด์ ํธ๊ฐ ๋ฌธ์๋ง ์ฝ๊ณ ๋ตํ๊ฒ ํ์ด์.
|
|
52
|
+
|
|
53
|
+
**์ ๋ก ๋ฒ ์ด์ค์์ ์ฐ๋ ๋ฐ ๋ ๋น์ฉ** (์์ด์ ํธ 1๊ฐ๊ฐ ๋๋ฉ์ธ ํ๋๋ฅผ ๋งก์, ๋ณ๋ ฌ 3๊ฐ)
|
|
54
|
+
|
|
55
|
+
| ๋๋ฉ์ธ | ์ฝ๋ ๋ฒ์ | ๋ง๋ ๋ฌธ์ | ์ ์ฑ
(ํ์ / ๋ฏธํด๊ฒฐ ์ง๋ฌธ) | ์์ด์ ํธ ํ ํฐ | ์์ฑ ์๊ฐ |
|
|
56
|
+
|---|---|---|---|---|---|
|
|
57
|
+
| ๊ฒฐ์ | ์ฝ 2๋ง ์ค | 19๊ฐ | 100 (5 / 95) | 57๋ง | 1์๊ฐ 7๋ถ |
|
|
58
|
+
| ๋ทฐ์ด | ์ฝ 2๋ง 3์ฒ ์ค | 40๊ฐ | 194 (29 / 165) | 85๋ง | 1์๊ฐ 7๋ถ |
|
|
59
|
+
| ์ธ์ฆ | ์ฝ 1๋ง ์ค | 35๊ฐ | 195 (64 / 131) | 79๋ง | 1์๊ฐ 13๋ถ |
|
|
60
|
+
|
|
61
|
+
์์ฑ ์๊ฐ์ ์์ด์ ํธ ์ ์ฌ์ ํ์์คํฌํ์์ 10๋ถ ๋๊ฒ ๋น์ด ์๋ ๋๊ธฐ ์๊ฐ์ ๋บ ์ค์ ์์
์๊ฐ์ด์์. ์ธ ๋๋ฉ์ธ์ ๋ณ๋ ฌ๋ก ๋๋ ค 1์๊ฐ 15๋ถ์ฏค์ ๋ชจ๋ ๋๋ฌ์ด์. ์์ฑ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ๊ฒํ ํ์ ๋ ์ง์ด๋ธ ์ ์ฑ
์ ์์๊ณ , ๊ธฐ์กด ์คํ๊ณผ ์ฝ๋๊ฐ ๋ฌ๋๋ 6๊ณณ์ ์ฝ๋๋๋ก ์ ์์ด์. ์ด ๊ฒํ ๋ ์์ฑ์๊ฐ ํ๊ณ ๋
๋ฆฝ์ ์ผ๋ก ํ์ง ์์์ด์. ๊ทธ ๋ค ์ฌ์ฉ์ ํ๋ฆ ๋จ์๋ก ๋ค์ ๋ฌถ์ด 38๊ฐ ๋ฌธ์๊ฐ ๋์ด์.
|
|
62
|
+
|
|
63
|
+
**๊ฐ์ ์ง๋ฌธ 18๊ฐ๋ก ๋น๊ตํ ํ์ ๋น์ฉ** (์์ด์ ํธ๋ ๋ฌธ์๋ง ์ฝ๊ณ ์ฝ๋๋ ๊ธ์ง)
|
|
64
|
+
|
|
65
|
+
์ ๋ต ์๋ crumbs๊ฐ ์ ์์ง๋ง(18๊ฐ ์ค 15๊ฐ ๋ 17๊ฐ), ์ฝ์ ํ์ผ๊ณผ ํ ํฐ์ ๋ ์ ์์ด์.
|
|
66
|
+
|
|
67
|
+
| | ๊ธฐ์กด ์คํ ์ฒด๊ณ | crumbs-spec |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| ์ ๋ต | 17 / 18 (๋ถ๋ถ 1) | 15 / 18 (๋ถ๋ถ 3) |
|
|
70
|
+
| ์ฝ์ ํ์ผ ์ ํฉ๊ณ | 70 (ํ๊ท 3.9, ์ต๋ 8) | 64 (ํ๊ท 3.6, ์ต๋ 6) |
|
|
71
|
+
| ๊ฒ์(grep)์ผ๋ก ๋จ์ด์ง ํ์ | 3 | 1 |
|
|
72
|
+
| ํ ํฐ ํฉ๊ณ | 232๋ง | 189๋ง (โ18%) |
|
|
73
|
+
|
|
74
|
+
๊ธฐ์กด ์ฒด๊ณ์ ๋ถ๋ถ ์ ๋ต์ ์์ ๋ฌธ์๋ฅผ ๋ชป ์ฐพ์ ๊ฒฝ์ฐ์๊ณ , crumbs์ ๋ถ๋ถ ์ ๋ต 3๊ฐ๋ ๋ชจ๋ ๋ฌธ์์ 3~5ํ์ผ๋ก ๋๋ฌํ๋๋ฐ writer๊ฐ ํ๋ฉด ์์นยท์ฑ๋ ๋ถ๊ธฐ ๊ฐ์ ์ธ๋ถ๋ฅผ ๋ฒ๋ฆฐ ๊ฒฝ์ฐ์์ด์. ๊ทธ ์์ธ์ ๋ํด ์คํฌ ๊ท์น("์กฐ๊ฑด์ด ๋ถ์ ๊ฐ์ ๋ฒ๋ฆฌ์ง ์๋๋ค")์ ์ถ๊ฐํ์ด์. ๋ฒค์น๋งํฌ๋ ๋ค์ ๋๋ฆฌ์ง ์์์ด์. ์ง๋ฌธ์ด ๊ธฐ์กด ์คํ์์ ๋์ ๊ธฐ์กด ์ฒด๊ณ์ ์ ๋ฆฌํ ํธํฅ์ด ์๋ค๋ ์ ์ ๊ฐ์ํด ์ฃผ์ธ์.
|
|
75
|
+
|
|
76
|
+
## ์ค์น์ ๋น ๋ฅธ ์์
|
|
77
|
+
|
|
78
|
+
Node.js 20 ์ด์์ด ํ์ํ๊ณ ์คํ ์์กด์ฑ์ ์์ด์.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npx crumbs-spec init --skills all # ๋ฌธ์ ๊ตฌ์กฐ + ์์ด์ ํธ ์คํฌ 4์ข
|
|
82
|
+
npx crumbs-spec init # ๋ฌธ์ ๊ตฌ์กฐ๋ง
|
|
83
|
+
npx crumbs-spec check # ๋งํฌ ๊ทธ๋ํ์ ๊ตฌ์กฐ ๊ฒ์ฌ
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
ํ๊ตญ์ด ์ ์ฅ์๋ `--lang ko`๋ฅผ ๋ถ์ฌ์.
|
|
87
|
+
|
|
88
|
+
`init`์ ๋ค์ ํ์ผ์ ๋ง๋ค๊ณ , ์ด๋ฏธ ์๋ ํ์ผ์ ์ ๋ ๋ฎ์ด์ฐ์ง ์์์. `--skills all`์ด๋ฉด SKILL.md ์ฌ๋ ๊ฐ๋ ํจ๊ป ์จ์. AGENTS.md์์๋ `<!-- crumbs:start -->`์ `<!-- crumbs:end -->` ์ฌ์ด์ ์๊ธฐ ๋ธ๋ก๋ง ๋ฐ๊ฟ์.
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
crumbs.json ์ค์
|
|
92
|
+
docs/specs/index.md ์ธ๋ฑ์ค(์
๊ตฌ)
|
|
93
|
+
docs/specs/log.md ์ถ๊ฐ ์ ์ฉ ๋ก๊ทธ
|
|
94
|
+
docs/specs/templates/overview.md ๊ฐ์ ํ
ํ๋ฆฟ
|
|
95
|
+
docs/specs/templates/detail.md ์์ธ ํ
ํ๋ฆฟ
|
|
96
|
+
docs/raw/README.md ์๋ณธ ์๋ฃ ๋๋ ํฐ๋ฆฌ(์ฝ๊ธฐ ์ ์ฉ)
|
|
97
|
+
AGENTS.md crumbs ๋ธ๋ก(์์ด์ ํธ ๊ท์น)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`crumbs.json`์ด ์ด๋ฏธ ์์ผ๋ฉด `init`์ ๊ทธ ์ค์ ์ ๊ทธ๋๋ก ๋๊ณ `--spec-dir`์ `--lang`์ ๋ฌด์ํด์(๊ทธ๋ ๋ค๊ณ ์๋ ค ์ค์). `init`์ ๋ง์ง๋ง ์ค์ ๋ค์์ ์คํํ ๋ช
๋ น์ด์์: `npx crumbs-spec check`.
|
|
101
|
+
|
|
102
|
+
npm์ [`crumbs-spec`](https://www.npmjs.com/package/crumbs-spec)์ผ๋ก ์ฌ๋ผ๊ฐ ์์ด์. ์ ์ฅ์๋ฅผ ํด๋ก ํด์ ์ฐ๋ ค๋ฉด `npm run build` ๋ค `node dist/src/cli.js <๋ช
๋ น>`์ผ๋ก ์คํํด์.
|
|
103
|
+
|
|
104
|
+
## ๊ธฐ์กด ํ๋ก์ ํธ์ ์ถ๊ฐํ๊ธฐ
|
|
105
|
+
|
|
106
|
+
์ด๋ฏธ ์ฝ๋์ ๋ฌธ์๊ฐ ์๋ ์ ์ฅ์์ ๋ฃ๋ ์์์์. ํ ๋ฒ์ ๋ค ์ฎ๊ธฐ์ง ๋ง๊ณ ๋๋ฉ์ธ ํ๋๋ถํฐ ์์ํด์.
|
|
107
|
+
|
|
108
|
+
1. **์ ์ฅ์ ๋ฃจํธ์์ `init`์ ์คํํด์.** ์คํ ๋ฃจํธ๊ฐ ๋ฐ๋ก ์์ผ๋ฉด `--spec-dir`๋ก ์ง์ ํด์(์: `docs/crumbs`). ๊ธฐ์กด ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ , `AGENTS.md`๊ฐ ์ด๋ฏธ ์์ผ๋ฉด `<!-- crumbs:start -->`์ `<!-- crumbs:end -->` ์ฌ์ด ๋ธ๋ก๋ง ๋ผ์ ๋ฃ์ด์.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npx crumbs-spec init --spec-dir docs/crumbs --skills claude
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
2. **์์ด์ ํธ๊ฐ ๊ท์น์ ์ฝ๊ฒ ํด์.** Claude Code๋ `CLAUDE.md`์ `@AGENTS.md` ํ ์ค์ด ์์ด์ผ crumbs ๋ธ๋ก์ ์ฝ์ด์. ์คํฌ์ `.claude/skills/`(Claude Code)์ `.agents/skills/`(Codex)์์ ์๋์ผ๋ก ์ฐพ์์.
|
|
115
|
+
|
|
116
|
+
3. **๊ธฐ์กด ๋ฌธ์๋ ์ฎ๊ธฐ์ง ์์์.** writer๋ ์ฝ๋์ ํ
์คํธ๋ง ์๋ณธ์ผ๋ก ์ผ๊ณ , ๊ธฐ์กด ์ํคยท์ค๊ณ ๋ฉ๋ชจยทREADME๋ ์ฌ์ฉ์๊ฐ ์๋ณธ ์๋ฃ๋ก ์ง๋ชฉํ์ง ์๋ ํ ์ฝ์ง ์์์. ์ง๊ธ ์ฝ๋์ ๋ง๋์ง ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ด์์. ๊ธฐ์กด ๋ฌธ์ ์ค ๊ทผ๊ฑฐ๋ก ์ธ ๊ฒ(๊ธฐํ์, ๊ณ์ฝ์, ์ ์ฑ
๊ฒฐ์ ๊ธฐ๋ก)์ `docs/raw/`์ ๋ณต์ฌํด ๋๊ณ `crumbs-ingest`๋ก ํ ๊ฑด์ฉ ๋ฐ์ํด์.
|
|
117
|
+
|
|
118
|
+
4. **์ฒซ ๋๋ฉ์ธ์ ์ฝ๋์์ ์จ์.** ๊ฐ์ฅ ์์ฃผ ์ง๋ฌธ๋ฐ๋ ์์ญ ํ๋๋ฅผ ๊ณ ๋ฅด๊ณ writer์ "๊ธฐ์กด ์ฝ๋ ๋ฌธ์ํ" ๋ชจ๋๋ก ๋งก๊ฒจ์. ๊ฒฐ๊ณผ๋ฌผ์ `[ํ์ธ ํ์]` ์ง๋ฌธ ๋ชฉ๋ก์ด ๊ทธ ์์ญ์์ ์ฌ๋์ด ๊ฒฐ์ ํด์ผ ํ ๊ฒ์ ๋ชฉ๋ก์ด ๋ผ์.
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
src/billing/ ์๋ ์ฝ๋๋ฅผ crumbs-writer์ "๊ธฐ์กด ์ฝ๋ ๋ฌธ์ํ" ๋ชจ๋๋ก ๋ฌธ์ํํด ์ค.
|
|
122
|
+
๋๋ฉ์ธ ๋๋ ํฐ๋ฆฌ๋ docs/crumbs/billing/์ด๋ค. ํ์ธํ์ง ๋ชปํ ์ ์ฑ
์ ์ง๋ฌธ์ผ๋ก ๋จ๊ธฐ๊ณ ๋๊น์ง ํด ์ค.
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
5. **`check`๋ฅผ CI์ ๊ฑธ์ด์.** ์ค๋ฅ(๋์ด์ง ๋งํฌยท์ต์ปค, ๋๋ฌ ๋ถ๊ฐ ๋ฌธ์, ๋น ์ง ์ญ๋งํฌ, ์๋ ์ฝ๋ ๊ฒฝ๋ก, ์ ์ฑ
์ด๋ฆ ์ค๋ณต)๋ง ์คํจ์ํค๊ณ ๊ฒฝ๊ณ ๋ ๋ฌด์ํด์. ์คํ ๋ฃจํธ ์์ Markdown ๊ฐ์ด๋ฐ ์์ง crumbs ๋ฌธ์๊ฐ ์๋ ๊ฒ์ `crumbs.json`์ `exclude`์ ๋ฃ์ด์. ํญ๋ชฉ์ ์คํ ๋ฃจํธ ๊ธฐ์ค ์๋ ๊ฒฝ๋ก์ด๊ณ , `/`๋ก ๋๋๋ฉด ๊ทธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ธํด์. ๊ธ๋กญ ํจํด์ ์์ด์. ํ์ ์ ์ด ํ๋๋ ์๋ ๋ฌธ์๋ `check`๊ฐ ์๋ ค ์ค์.
|
|
126
|
+
|
|
127
|
+
6. **์ฝ๋๋ฅผ ๋ฐ๊ฟ ๋ ๋ฌธ์๋ฅผ ๊ฐ์ด ๋ฐ๊ฟ์.** AGENTS ๋ธ๋ก์ด "์์ฒญ์ด ์์ด๋ ๊ฐ์ ๋ณ๊ฒฝ์์ ์์ ๋ฌธ์๋ฅผ ๊ฐฑ์ ํ๋ค"๋ฅผ ์์ด์ ํธ์๊ฒ ์๊ตฌํ๋๊น, PR๋ง๋ค `check`์ ๋ก๊ทธ ํญ๋ชฉ์ด ํจ๊ป ๋ค์ด์์. ๋๋ฉ์ธ์ด ํ๋์ฉ ๋์ด๋๋ฉด์ ์ธ๋ฑ์ค๊ฐ ์ฑ์์ ธ์.
|
|
128
|
+
|
|
129
|
+
๊ธฐ์กด ์คํ ์ฒด๊ณ๊ฐ ์๋ค๋ฉด ๋ ์ฒด๊ณ์ ๊ฐ์ ์ง๋ฌธ์ ๋์ ธ ๋น๊ตํด ๋ณด์ธ์. ์ฝ์ ํ์ผ ์์ ์ ๋ต๋ฅ ๋ก ์ด๋ ์ชฝ์ด ๋ ์ ์ฐพํ๋์ง ๋ฐ๋ก ๋ณด์ฌ์.
|
|
130
|
+
|
|
131
|
+
## ์คํ์ด ๋ง๋ค์ด์ง๋ ์์
|
|
132
|
+
|
|
133
|
+
writer ์คํฌ์ด "๊ธฐ์กด ์ฝ๋ ๋ฌธ์ํ" ๋ชจ๋๋ก ์ผํ ๋์ ์์์์. "๋ณ๊ฒฝ ๋ฐ์" ๋ชจ๋๋ 1~2๋จ๊ณ๊ฐ "๋ฐ๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ๊ทผ๊ฑฐ์ ์ ์ ์์ ๋ฌธ์ ์ฐพ๊ธฐ"๋ก ๋ฐ๋๊ณ ๋๋จธ์ง๋ ๊ฐ์์.
|
|
134
|
+
|
|
135
|
+
```mermaid
|
|
136
|
+
flowchart TD
|
|
137
|
+
A["์ธ๋ฑ์ค์ ํ
ํ๋ฆฟ ์ฝ๊ธฐ"] --> B["์ง์
์ ๋ถํฐ ์ฝ๋์ ํ
์คํธ ๋ฐ๋ผ ์ฝ๊ธฐ"]
|
|
138
|
+
B --> C["์ฑ
์ ๊ฒฝ๊ณ ์ ํ๊ธฐ ์ฌ์ฉ์ ํ๋ฆ ํ๋ = ๋ฌธ์ ํ๋"]
|
|
139
|
+
C --> D["ํ์ฌ ๋์ ์ฐ๊ธฐ ๋จ๊ณ๋ ### ์์ ๋ชฉ"]
|
|
140
|
+
D --> E{"ํ
์คํธ๊ฐ ํ์ ํ๋ ๊ท์น์ธ๊ฐ"}
|
|
141
|
+
E -->|์| F["์ ์ฑ
์ผ๋ก ์ ๊ธฐ"]
|
|
142
|
+
E -->|์๋์ค| G["์ง๊ธ ๋์ ์์ + ํ์ธ ํ์ ์ง๋ฌธ"]
|
|
143
|
+
F --> H["ํ๋ฆ ๋์๊ณผ ๋ถ๊ธฐ ํ"]
|
|
144
|
+
G --> H
|
|
145
|
+
H --> I["๊ทผ๊ฑฐ ๊ฒฝ๋ก์ ๊ด๋ จ ๋ฌธ์ ์๋ฐฉํฅ ๋งํฌ"]
|
|
146
|
+
I --> J["๊ฐ์ ๋ฌธ์ ๋ชฉ๋ก๊ณผ ์ธ๋ฑ์ค ๊ฐฑ์ "]
|
|
147
|
+
J --> K["crumbs check"]
|
|
148
|
+
K -->|์ค๋ฅ| I
|
|
149
|
+
K -->|ํต๊ณผ| L["log add ๊ฒฐ๊ณผ ์ด์ ๋ฌธ์"]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
๋ต์ด ์๊ธฐ๋ฉด `crumbs-interview`๊ฐ ๋ง๋ ์ง๋ฌธ์ ์ฌ๋์ด ๋ตํ๊ณ , writer๊ฐ ์ง๋ฌธ ์ ์ฑ
์ ํ์ ์ ์ฑ
์ผ๋ก ๋ฐ๊พธ๋ฉฐ `decision` ๋ก๊ทธ์ ๊ฒฐ์ ๋งํฌ๋ฅผ ๋จ๊ฒจ์. ์ ์๋ฃ๊ฐ ๋ค์ด์ค๋ฉด `crumbs-ingest`๊ฐ ์ํฅ ๋ฌธ์๋ฅผ ์ฐพ์ ํ์ธ๋ฐ์ ๋ค ๋ฐ์ํด์.
|
|
153
|
+
|
|
154
|
+
## ๋ฌธ์ ๋ชจ๋ธ
|
|
155
|
+
|
|
156
|
+
์ญํ ์ ๋ท์ด์์. ํ์์ ํญ์ ์ธ๋ฑ์ค์์ ์์ํด์.
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
docs/specs/index.md ์ธ๋ฑ์ค: ๋๋ฉ์ธ ๋ชฉ๋ก + ๋ก๊ทธ ๋งํฌ
|
|
160
|
+
docs/specs/<๋๋ฉ์ธ>/overview.md ๊ฐ์: ๋ฒ์, ํ๋ฆ๋, ๋ฌธ์ ๋ชฉ๋ก, ์ฉ์ด
|
|
161
|
+
docs/specs/<๋๋ฉ์ธ>/<์ฑ
์>.md ์์ธ: ์ฌ์ฉ์ ํ๋ฆ ํ๋
|
|
162
|
+
docs/specs/log.md ๋ก๊ทธ: ํ ์ผ์ ์๊ฐ์์ผ๋ก
|
|
163
|
+
docs/specs/concepts/ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ํจ๊ป ์ฐ๋ ๊ฐ๋
(์ ํ)
|
|
164
|
+
docs/raw/ ๊ณ์ฝ์ยท๊ธฐํ ๋ฉ๋ชจ ๊ฐ์ ๋ถ๋ณ ์๋ณธ
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
์์ธ ๋ฌธ์์ ์ ์ ๊ณ ์ ์ด์์.
|
|
168
|
+
|
|
169
|
+
| ์ | ๋ด์ฉ |
|
|
170
|
+
|---|---|
|
|
171
|
+
| ๋ชฉ์ | ์ด ๋ฌธ์๊ฐ ์์ ํ๋ ์ฑ
์ ํ๋์ ๋งก์ง ์๋ ๋ฒ์ |
|
|
172
|
+
| ํ์ฌ ๋์ | ์ฌ์ฉ์๊ฐ ๊ฒช๋ ๋๋ก, ํ์ฌํ์ผ๋ก. ๋จ๊ณ๊ฐ ์
์ด์์ด๋ฉด `###` ์์ ๋ชฉ |
|
|
173
|
+
| ํ๋ฆ | ๋ ๋จ๊ณ ์ด์์ด๋ฉด Mermaid ๋์, ๋น๊ต ์ถ์ด ๋ ์ด์์ด๋ฉด ํ |
|
|
174
|
+
| ์ ์ฑ
| `### ์ ์ฑ
์ด๋ฆ`(์ ์ฅ์ ์ ์ฒด์์ ์ ์ผ)๊ณผ ๊ท์น. ๋ฏธํ์ ์ด๋ฉด ์ง๊ธ ๋์ ์์ ๋ค์ `[ํ์ธ ํ์]` ์ง๋ฌธ |
|
|
175
|
+
| ๊ทผ๊ฑฐ | `/`๊ฐ ๋ค์ด๊ฐ ๋ฐฑํฑ ๊ฒฝ๋ก์ ์ค๋ช
. `check`๊ฐ ๊ฒฝ๋ก์ ์กด์ฌ๋ฅผ ํ์ธํด์ |
|
|
176
|
+
| ํ์ธ ํ์ ์ฌํญ | `- [ํ์ธ ํ์] [์ ์ฑ
์ด๋ฆ](#์ต์ปค) โ ์ง๋ฌธ` |
|
|
177
|
+
| ๊ด๋ จ ๋ฌธ์ | ๊ฐ์๋ก ๊ฐ๋ ๋งํฌ์ ์ด์ ๋ฌธ์. ์ญ๋งํฌ๋ ์ํธ์ฌ์ผ ํด์ |
|
|
178
|
+
|
|
179
|
+
์์(`docs/specs/shopping/์ฅ๋ฐ๊ตฌ๋.md`):
|
|
180
|
+
|
|
181
|
+
````markdown
|
|
182
|
+
# ์ฅ๋ฐ๊ตฌ๋
|
|
183
|
+
<!-- ../index.md๋ฅผ ๋จผ์ ์ฝ๋๋ค. ์ด ๋ฌธ์๋ฅผ ๋ฐ๊พผ ๋ค ../log.md์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค -->
|
|
184
|
+
|
|
185
|
+
## ๋ชฉ์
|
|
186
|
+
์ฌ์ฉ์๊ฐ ์ํ์ ๋ด๊ณ ์๋์ ๋ฐ๊พธ๊ณ ๋น์ธ ๋๊น์ง์ ํ๋ฆ์ ๋งก๋๋ค. ์ฟ ํฐ ์ ์ฉ์ [์ฟ ํฐ ํ ์ธ](์ฟ ํฐ-ํ ์ธ.md)์ด ๋งก๋๋ค.
|
|
187
|
+
|
|
188
|
+
## ํ์ฌ ๋์
|
|
189
|
+
- ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ํ์ ๋ค์ ๋ด์ผ๋ฉด ์ฑ์ ์๋์ ๋ํ๋ค.
|
|
190
|
+
- ์๋์ด 99๋ฅผ ๋์ผ๋ฉด ์ฑ์ "์ต๋ 99๊ฐ๊น์ง ๋ด์ ์ ์์ต๋๋ค." ์๋ด๋ฅผ ๋ณด์ด๊ณ ๋ด์ง ์๋๋ค.
|
|
191
|
+
|
|
192
|
+
## ํ๋ฆ
|
|
193
|
+
```mermaid
|
|
194
|
+
flowchart TD
|
|
195
|
+
A["์ํ ๋ด๊ธฐ"] --> B{"๊ฐ์ ์ํ์ด ์๋"}
|
|
196
|
+
B -->|์| C["์๋ ํฉ์ฐ"]
|
|
197
|
+
B -->|์๋์ค| D["์ ์ค ์ถ๊ฐ"]
|
|
198
|
+
C --> E{"99 ์ด๊ณผ"}
|
|
199
|
+
E -->|์| F["์๋ด ํ ๋ด์ง ์์"]
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## ์ ์ฑ
|
|
203
|
+
### ์๋ ์ํ
|
|
204
|
+
์ฅ๋ฐ๊ตฌ๋ ํ ์ค์ ์๋์ 99 ์ดํ๋ค.
|
|
205
|
+
|
|
206
|
+
### ์ต์ ์ฃผ๋ฌธ ๊ธ์ก
|
|
207
|
+
์ง๊ธ์ ํฉ๊ณ๊ฐ 10,000์ ๋ฏธ๋ง์ด๋ฉด ๊ฒฐ์ ๋ฒํผ์ ๋นํ์ฑํํ๋ค.
|
|
208
|
+
[ํ์ธ ํ์] 10,000์์ด๋ผ๋ ๊ธฐ์ค์ ๊ทผ๊ฑฐ๋ ๋ฌด์์ธ๊ฐ?
|
|
209
|
+
|
|
210
|
+
## ๊ทผ๊ฑฐ
|
|
211
|
+
- `src/cart/cart.ts:12-48` โ ๋ด๊ธฐ์ ์๋ ํฉ์ฐ
|
|
212
|
+
- `test/cart/cart.test.ts` โ ์๋ ์ํ
|
|
213
|
+
|
|
214
|
+
## ํ์ธ ํ์ ์ฌํญ
|
|
215
|
+
- [ํ์ธ ํ์] [์ต์ ์ฃผ๋ฌธ ๊ธ์ก](#์ต์-์ฃผ๋ฌธ-๊ธ์ก) โ 10,000์์ด๋ผ๋ ๊ธฐ์ค์ ๊ทผ๊ฑฐ๋ ๋ฌด์์ธ๊ฐ?
|
|
216
|
+
|
|
217
|
+
## ๊ด๋ จ ๋ฌธ์
|
|
218
|
+
- [์ผํ ๊ฐ์](overview.md)
|
|
219
|
+
- [์ฟ ํฐ ํ ์ธ](์ฟ ํฐ-ํ ์ธ.md)
|
|
220
|
+
````
|
|
221
|
+
|
|
222
|
+
๋ฌธ์ ๋ณธ๋ฌธ์ ๊ฐ๊ฒฐํ `-ํ๋ค`์ฒด๋ก ์จ์. ๊ฐ์์ `## ์ฉ์ด`๋ ๋ณ์นญ์ ์์ ์ ์ฑ
์ผ๋ก ์๋ ๋งํฌ ๋ชฉ๋ก์ด์์(`- ์ ์ก๊ถ(์ ์ก์ ) โ [์ ์ก๊ถ ์ด์ฉ ์ค ํ์ ](์ ์ก๊ถ.md#์ ์ก๊ถ-์ด์ฉ-์ค-ํ์ )`). ์ ์๋ง ์๋ ์ฉ์ด๋ ์ฌ๊ธฐ์ ๋๋๊ณ , ์ฌ๋ฌ ํ๋ฆ์ด ๋ถ๊ธฐ ์ถ์ผ๋ก ์ฐ๋ ๊ฐ๋
(์ฑ๋, ์ฌํ, ํ์ ์ํ)๋ง `concepts/`์ ์์ ๋ฌธ์๋ฅผ ๋ฌ์.
|
|
223
|
+
|
|
224
|
+
## ๋ช
๋ น
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
npx crumbs-spec init [--spec-dir <dir>] [--lang <en|ko>] [--skills <claude|codex|all>]
|
|
228
|
+
npx crumbs-spec check [--format text|json] [--config <path>]
|
|
229
|
+
npx crumbs-spec log add --kind <ingest|query|lint|drift|change|decision> "<์ ๋ชฉ>" [--body "<๋ณธ๋ฌธ>"]
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
๊ณตํต ์ต์
์ `--root <dir>`(์ ์ฅ์ ๋ฃจํธ, ๊ธฐ๋ณธ๊ฐ์ ํ์ฌ ๋๋ ํฐ๋ฆฌ), `--lang <en|ko>`(init์ด ์ธ ์ธ์ด, ์ค์ ์ ์ฝ๊ธฐ ์ ์ค๋ฅ์ ์ธ์ด, ๊ธฐ๋ณธ๊ฐ `en`), `-h`/`--help`, `-v`/`--version`์ด์์. ์ค์ ์ ์ ์ฅ์ ๋ฃจํธ์ `crumbs.json`์ ๋ฌ์(`specDir`, `index`, `overview`, `log`, `lang`, `headings`, `exclude`, `codeRoot`, `rawDir`).
|
|
233
|
+
|
|
234
|
+
`check`์ ์ถ๋ ฅ์ `ํ์ผ:์ค ์ฌ๊ฐ๋ ๊ท์น: ๋ฉ์์ง` ํ ์ค์ฉ์ด๊ณ ๋ง์ง๋ง ์ค์ด ์์ฝ์ด์์.
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
docs/specs/shopping/์ฅ๋ฐ๊ตฌ๋.md:34 error broken-anchor: ์ต์ปค๊ฐ ์์: ์ฟ ํฐ-ํ ์ธ.md#์ ์ฉ-์์
|
|
238
|
+
docs/specs/shopping/์ฅ๋ฐ๊ตฌ๋.md:20 warning open-question: ๋ฏธํด๊ฒฐ ์ง๋ฌธ 1๊ฐ
|
|
239
|
+
|
|
240
|
+
crumbs check: ๋ฌธ์ 4๊ฐ, ์ค๋ฅ 1๊ฐ, ๊ฒฝ๊ณ 1๊ฐ
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**์ง์ํ๋ Markdown.** ์ ๋ชฉ์ ATX(`#`๋ถํฐ `######`๊น์ง)๋ง ์ธ์ํ๊ณ setext ์ ๋ชฉ(๋ฐ์ค์)์ ์ธ์ํ์ง ์์์. ์ธ๋ผ์ธ ๋งํฌ์ ์ฐธ์กฐ ๋งํฌ(`[ํ
์คํธ][๋ผ๋ฒจ]`, `[๋ผ๋ฒจ][]`์ `[๋ผ๋ฒจ]: ๊ฒฝ๋ก` ์ ์)๋ฅผ ๊ฒ์ฌํด์. `[๋ผ๋ฒจ]`๋ง ์ด ์ถ์ฝ ์ฐธ์กฐ๋ ๋งํฌ๊ฐ ์๋์์. ์ ๋ชฉ ์ต์ปค๋ github-slugger ๋ฐฉ์์ด์์. ๊ณต๋ฐฑ๋ง๋ค `-`๊ฐ ๋๊ณ , `-`์ `_`๋ฅผ ๋บ ๋ฌธ์ฅ๋ถํธ๋ ์ง์ฐ๋ฉฐ, ์ฐ์๋ `-`๋ ํฉ์น์ง ์์์. ์๋ฅผ ๋ค์ด `### ์๋ & ํ๋`๋ `#์๋--ํ๋`๊ฐ ๋ผ์. ์คํ ๋ฃจํธ ์๋์ ์ฌ๋ณผ๋ฆญ ๋งํฌ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ ๋ฐ๋ผ๊ฐ์. ๊ทผ๊ฑฐ ๊ฒฝ๋ก์๋ `/`๊ฐ ์์ด์ผ ํ๋ฉฐ ์ ์ฅ์ ๋ฃจํธ์ ํ์ผ์ `./package.json`์ฒ๋ผ ์จ์. `:12`, `:12-48`, `:12:5`, `:12-48,60-70` ๊ฐ์ ์ค ํ๊ธฐ๋ฅผ ๋ฐ์์. `exclude` ํญ๋ชฉ์ ์คํ ๋ฃจํธ ๊ธฐ์ค ์๋ ๊ฒฝ๋ก์ด๊ณ , `/`๋ก ๋๋๋ฉด ๊ทธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ธํด์. JSON ์ถ๋ ฅ์ ๋ชจ๋ ํญ๋ชฉ์๋ `line`์ด ์์ด์(๋ ๋์ ์์น๊ฐ ์์ผ๋ฉด 1).
|
|
244
|
+
|
|
245
|
+
### ๊ฒ์ฌ ๊ท์น
|
|
246
|
+
|
|
247
|
+
| ๊ท์น | ์ฌ๊ฐ๋ | ์ก๋ ๊ฒ |
|
|
248
|
+
|---|---|---|
|
|
249
|
+
| `index-missing` | ์ค๋ฅ | ์ธ๋ฑ์ค ๋ฌธ์๊ฐ ์์ด์(๋ค๋ฅธ ๊ท์น์ ๋์ง ์์์) |
|
|
250
|
+
| `missing-title` | ์ค๋ฅ | ์ฒซ ์ ๋ชฉ์ด H1์ด ์๋์์ |
|
|
251
|
+
| `broken-link` | ์ค๋ฅ | ๋งํฌ ๋์ ํ์ผ์ด ์๊ฑฐ๋, ์ฒ ์(๋์๋ฌธ์ยท์ ๋์ฝ๋ ์ ๊ทํ)๊ฐ ๋์คํฌ์ ํ์ผ๊ณผ ๋ฌ๋ผ์ |
|
|
252
|
+
| `broken-anchor` | ์ค๋ฅ | ๋งํฌ๊ฐ ๊ฐ๋ฆฌํค๋ ์ ๋ชฉ(์ต์ปค)์ด ์์ด์ |
|
|
253
|
+
| `unreachable` | ์ค๋ฅ | ์ธ๋ฑ์ค์์ ๋งํฌ๋ก ๋ฟ์ ์ ์๋ ๋ฌธ์์์ |
|
|
254
|
+
| `missing-section` | ์ค๋ฅ | ์ญํ ๋ณ ํ์ ์ ์ด ์์ด์ |
|
|
255
|
+
| `missing-backlink` | ์ค๋ฅ | ๋ถ๋ชจ(๊ฐ์ยท์ธ๋ฑ์ค)๋ก ๋์๊ฐ๋ ๋งํฌ๊ฐ ์๊ฑฐ๋, ์์ธ AโB ๋งํฌ์ BโA๊ฐ ์์ด์ |
|
|
256
|
+
| `missing-code-path` | ์ค๋ฅ | ๊ทผ๊ฑฐ์ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์์ |
|
|
257
|
+
| `duplicate-policy` | ์ค๋ฅ | ๊ฐ์ ์ ์ฑ
์ด๋ฆ์ด ๋ ๋ฌธ์์ ์๊ฑฐ๋ ํ ๋ฌธ์์ ๋ ๋ฒ ์์ด์ |
|
|
258
|
+
| `log-format` | ์ค๋ฅ | ๋ก๊ทธ ํญ๋ชฉ์ด `## [YYYY-MM-DD] kind \| ์ ๋ชฉ` ํ์์ด ์๋๊ฑฐ๋, ๋ ์ง๊ฐ ํ๋ฃจ๋ฅผ ๋์ด ๋ฏธ๋์์ |
|
|
259
|
+
| `unterminated-comment` | ์ค๋ฅ | HTML ์ฃผ์์ด ์ด๋ฆฐ ๋ค ๋ซํ์ง ์์, ๊ทธ ๋ค์ ๋ฌธ์ ์ ์ฒด๊ฐ ๊ฐ๋ ค์ ธ์ |
|
|
260
|
+
| `open-question` | ๊ฒฝ๊ณ | ์ง๋ฌธ์ด ๋จ์ ๋ฌธ์๋ง๋ค ๊ฒฝ๊ณ ํ๋์์. ๊ฐ์๋ ๋ฏธํด๊ฒฐ ์ง๋ฌธ ์์์ |
|
|
261
|
+
| `log-order` | ๊ฒฝ๊ณ | ๋ก๊ทธ ๋ ์ง๊ฐ ์ญ์์ด์์ |
|
|
262
|
+
| `missing-flow` | ๊ฒฝ๊ณ | ํ์ฌ ๋์์ด 6๋จ๊ณ ์ด์์ธ๋ฐ ๋์๋ ํ๋ ์์ด์ |
|
|
263
|
+
| `section-order` | ๊ฒฝ๊ณ | ์ ์์๊ฐ ํ
ํ๋ฆฟ๊ณผ ๋ฌ๋ผ์ |
|
|
264
|
+
| `log-body` | ๊ฒฝ๊ณ | `decision` ํญ๋ชฉ์ ๋ฌธ์ ๋งํฌ๊ฐ ์์ด์ |
|
|
265
|
+
|
|
266
|
+
## ๋ก๊ทธ
|
|
267
|
+
|
|
268
|
+
๋ก๊ทธ๋ ํ ๊ณณ(`docs/specs/log.md`)์ ์๊ฐ์์ผ๋ก ๋ง๋ถ์ฌ์. ์ ๋ชฉ์ ์์
๋ช
์ด ์๋๋ผ **์ฌ์ฉ์ ๊ฒฐ๊ณผ ํ ๋ฌธ์ฅ**์ด๊ณ , ๋ณธ๋ฌธ์ ์ธ ์ค์ด์์.
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
npx crumbs-spec log add --kind change "์ฅ๋ฐ๊ตฌ๋ ์๋ ์ํ์ 99๋ก ์ฌ๋ฆผ" \
|
|
272
|
+
--body "๊ฒฐ๊ณผ: ํ ์ค์ 99๊ฐ๊น์ง ๋ด์ ์ ์๋ค. ์ด์ : ์์ฒญ SHOP-42. ๋ฌธ์: [์๋ ์ํ](shopping/์ฅ๋ฐ๊ตฌ๋.md#์๋-์ํ)"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
`log add`๋ ์ ๋ชฉ์ด๋ ๋ณธ๋ฌธ์ `<!--`๊ฐ ์์ผ๋ฉด ๊ฑฐ๋ถํด์.
|
|
276
|
+
|
|
277
|
+
`[ํ์ธ ํ์]` ์ง๋ฌธ์ด ๋ต์ ์ป์ผ๋ฉด `decision` ํญ๋ชฉ์ ๋จ๊ธฐ๊ณ , ํ์ ํ ์ ์ฑ
๋ณธ๋ฌธ ๋์ ๊ฒฐ์ ๋งํฌ ํ๋๋ฅผ ๋ฌ์. ๋ฌธ์ ์์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๋์ง ์๋ ๋์ ๊ฒฐ์ ์ ๋ก๊ทธ์ ์์ด๊ณ ๋ฌธ์๋ ๋งํฌ๋ก๋ง ๊ฐ๋ฆฌ์ผ์. ์ฌ๋ฌ๊ทธ๋ ๋๊ดํธยท`|`ยท์ผํยท์ฝ๋ก ์ ๋นผ๋ฏ๋ก, `|`๊ฐ ์๋ ์๋ฆฌ๋ `--`๊ฐ ๋ผ์.
|
|
278
|
+
|
|
279
|
+
```markdown
|
|
280
|
+
## [2026-11-02] decision | ์ต์ ์ฃผ๋ฌธ ๊ธ์ก: 10,000์์ ๋ฐฐ์ก๋น ์ ์ฑ
์์ ์จ ๊ฐ์ด๋ค
|
|
281
|
+
๊ฒฐ๊ณผ: ํฉ๊ณ 10,000์ ๋ฏธ๋ง์ด๋ฉด ๊ฒฐ์ ๋ฒํผ์ด ๋นํ์ฑ์ด๋ค. ์ด์ : 2026-11-02 ๊ธฐํ ํ์ธ. ๋ฌธ์: [์ต์ ์ฃผ๋ฌธ ๊ธ์ก](shopping/์ฅ๋ฐ๊ตฌ๋.md#์ต์-์ฃผ๋ฌธ-๊ธ์ก)
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
```markdown
|
|
285
|
+
### ์ต์ ์ฃผ๋ฌธ ๊ธ์ก
|
|
286
|
+
ํฉ๊ณ๊ฐ 10,000์ ๋ฏธ๋ง์ด๋ฉด ๊ฒฐ์ ๋ฒํผ์ ๋นํ์ฑํํ๋ค. (๊ฒฐ์ : [2026-11-02](../log.md#2026-11-02-decision--์ต์-์ฃผ๋ฌธ-๊ธ์ก-10000์์-๋ฐฐ์ก๋น-์ ์ฑ
์์-์จ-๊ฐ์ด๋ค))
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
kind๋ `ingest`(์๋ณธ ์๋ฃ ๋ฐ์), `query`(๋ต์ ์ฐพ์ ํ๋ฅ), `lint`, `drift`, `change`(๋ฌธ์ ๋ณ๊ฒฝ), `decision`(์ง๋ฌธ ํ์ )์ด์์.
|
|
290
|
+
|
|
291
|
+
## ์คํฌ
|
|
292
|
+
|
|
293
|
+
`init --skills`๋ ์์ด์ ํธ๊ฐ crumbs ๋ฌธ์๋ฅผ ๋ค๋ฃจ๋ ์ ์ฐจ๋ฅผ `.claude/skills/<์ด๋ฆ>/SKILL.md`(Claude Code)์ `.agents/skills/<์ด๋ฆ>/SKILL.md`(Codex)์ ์ค์นํด์. ๊ธฐ์กด `SKILL.md`๋ ๋ฎ์ด์ฐ์ง ์์ผ๋ ์ ๋ฒ์ ์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด ์ง์ฐ๊ณ ๋ค์ ์ค์นํด์. Claude Code๋ `CLAUDE.md`์ `@AGENTS.md`๊ฐ ์์ด์ผ crumbs ๋ธ๋ก์ ๊ท์น์ ์ฝ์ด์.
|
|
294
|
+
|
|
295
|
+
์์ฑ๋ SKILL.md๋ frontmatter ๋ฐ๋ก ๋ค์ ๊ทธ๊ฒ์ ๋ง๋ crumbs-spec ๋ฒ์ ์ ์ ์ ์ฃผ์ ํ ์ค์ ๋ฌ์. ์คํฌ๊ณผ ํ
ํ๋ฆฟ์ ํจํค์ง ๋ฒ์ ์ ๋ฐ๋ผ์. ๋ง์ด๋ ๋ฆด๋ฆฌ์ค๋ ๋ฌธ๊ตฌ๋ฅผ ๋ฐ๊ฟ ์ ์๊ณ ํจ์น ๋ฆด๋ฆฌ์ค๋ ๋ฐ๊พธ์ง ์์์. ์ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๋ ค๋ฉด ํ์ผ์ ์ง์ฐ๊ณ `init --skills`๋ฅผ ๋ค์ ์คํํด์.
|
|
296
|
+
|
|
297
|
+
| ์คํฌ | ํ๋ ์ผ |
|
|
298
|
+
|---|---|
|
|
299
|
+
| `crumbs-writer` | ๋ฌธ์๋ฅผ ์ฐ๊ฑฐ๋ ๊ฐฑ์ ํด์. "๋ณ๊ฒฝ ๋ฐ์"(๋ฐ๋ ์ฝ๋ โ ์์ ๋ฌธ์)๊ณผ "๊ธฐ์กด ์ฝ๋ ๋ฌธ์ํ"(์ฝ๋ยทํ
์คํธ๋ง์ผ๋ก ์ฒ์ ์ฐ๊ธฐ) ๋ ๋ชจ๋. ์ฑ
์ ๋จ์, ๋ฌธ์ฒด, ์ง๋ฌธ ํ์, ํ๋ฆ ๋์, ๊ฐ๋
ํ์ด์ง ๊ธฐ์ค์ ๋ด๊ณ ์์ด์ |
|
|
300
|
+
| `crumbs-finder` | ์ธ๋ฑ์ค โ ๊ฐ์ โ ์์ธ ์์ผ๋ก ๋ต์ ์ฐพ์ ์ถ์ฒ์ ํจ๊ป ๋ตํ๊ณ , ์ข์ ๋ต์ `query` ๋ก๊ทธ๋ก ํ๋ฅํด์ |
|
|
301
|
+
| `crumbs-interview` | ์์ฒญ์ด ๊ฑด๋๋ฆฌ๋ ์ ์ฑ
์ค ๋ฏธํ์ธ์ธ ๊ฒ์ ์ง๋ฌธ์ผ๋ก ๋ง๋ค๊ณ ๋ฉ์ถฐ์ |
|
|
302
|
+
| `crumbs-ingest` | `docs/raw/`์ ์ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ํฅ ๋ฌธ์๋ฅผ ์ฐพ์ ํ์ธ๋ฐ์ ๋ค ๋ฐ์ํ๊ณ `ingest` ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ์ |
|
|
303
|
+
|
|
304
|
+
## ์ฌ์ฉ ์์
|
|
305
|
+
|
|
306
|
+
### 1. ๊ธฐ์กด ์ฝ๋๋ฅผ ์ฒ์ ๋ฌธ์ํํด์
|
|
307
|
+
|
|
308
|
+
```
|
|
309
|
+
src/cart/ ์๋ ์ฝ๋๋ฅผ crumbs-writer์ "๊ธฐ์กด ์ฝ๋ ๋ฌธ์ํ" ๋ชจ๋๋ก ๋ฌธ์ํํด ์ค.
|
|
310
|
+
๋๋ฉ์ธ ๋๋ ํฐ๋ฆฌ๋ docs/specs/shopping/์ด๊ณ , ํ์ธํ์ง ๋ชปํ ์ ์ฑ
์ ์ง๋ฌธ์ผ๋ก ๋จ๊ธฐ๊ณ ๋๊น์ง ํด ์ค.
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
์์ด์ ํธ๋ ์ธ๋ฑ์ค์ ํ
ํ๋ฆฟ์ ์ฝ๊ณ , ์ง์
์ ๋ถํฐ ์ฝ๋์ ํ
์คํธ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ `shopping/overview.md`์ ์์ธ ๋ฌธ์๋ฅผ ๋ง๋ค์ด์. ํ
์คํธ๊ฐ ํ์ ํ๋ ๊ท์น์ ์ ์ฑ
์ผ๋ก, ์ฝ๋์๋ง ์๋ ๊ท์น์ "์ง๊ธ์ โฆ" ์์ ๊ณผ `[ํ์ธ ํ์]` ์ง๋ฌธ์ผ๋ก ์ ์ด์. ๋์ `check`๋ฅผ ๋๋ ค ์ค๋ฅ๋ฅผ ์์ ๊ณ ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ์.
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
crumbs check: ๋ฌธ์ 5๊ฐ, ์ค๋ฅ 0๊ฐ, ๊ฒฝ๊ณ 3๊ฐ
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
๊ฒฝ๊ณ 3๊ฐ๋ ์ง๋ฌธ์ด ๋จ์ ๋ฌธ์ 3๊ฐ์์. ๊ฐ ๋ฌธ์์ `ํ์ธ ํ์ ์ฌํญ` ์ ๋ง ํ์ด๋ ๋ฌด์์ ๊ฒฐ์ ํด์ผ ํ๋์ง ์ ์ ์์ด์.
|
|
320
|
+
|
|
321
|
+
### 2. ์ฝ๋ ๋ณ๊ฒฝ์ ๋ฌธ์์ ๋ฐ์ํด์
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
์ฅ๋ฐ๊ตฌ๋ ์๋ ์ํ์ 99์์ 199๋ก ์ฌ๋ ธ์ด. ๋ฌธ์๋ ๋ง์ถฐ ์ค.
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
writer๋ `grep -rl 'src/cart/cart.ts' docs/specs`๋ก ๊ทผ๊ฑฐ์ ๊ทธ ๊ฒฝ๋ก๋ฅผ ์ ์ ์์ ๋ฌธ์๋ฅผ ์ฐพ๊ณ , "ํ์ฌ ๋์"๊ณผ `### ์๋ ์ํ` ๋ณธ๋ฌธ์ ๊ณ ์น๊ณ , ํ๋ฆ ๋์์ ๊ฐ์ ๋ง์ถ๊ณ , ๋ก๊ทธ์ `change | ์ฅ๋ฐ๊ตฌ๋ ์๋ ์ํ์ 199๋ก ์ฌ๋ฆผ`์ ๋จ๊ฒจ์. ์์ ๋ฌธ์๊ฐ ๋๋ก ๋ณด์ด๋ฉด ๋ฉ์ถ๊ณ ์ด๋ ์ชฝ์ด ์์ ์์ธ์ง ๋ฌผ์ด์.
|
|
328
|
+
|
|
329
|
+
### 3. ๋ชจ๋ฅด๋ ์ ์ฑ
์ ๋ฌป๊ณ , ๋ต์ ๊ฒฐ์ ์ผ๋ก ๋จ๊ฒจ์
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
์ฟ ํฐ ์ค๋ณต ์ ์ฉ ๊ท์น์ ๋ฐ๊พธ๋ ค๊ณ ํด. ๋จผ์ ๋ญ ํ์ธํด์ผ ํ์ง?
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
interview๊ฐ ์์ฒญ์ด ๊ฑด๋๋ฆฌ๋ ์ ์ฑ
์ ๋์ดํ๊ณ , ์ฝ๋ยทํ
์คํธยท์๋ณธ์ผ๋ก ํ์ธ๋ ๊ฒ๊ณผ ๋ฏธํ์ธ์ธ ๊ฒ์ ๊ฐ๋ฅธ ๋ค ๋ฏธํ์ธ ์ ์ฑ
์ ์ง๋ฌธ์ผ๋ก ๋ด์. ๋ตํ์๋ฉด writer๊ฐ ์ ์ฑ
์ ํ์ ์์ ๋ก ๋ฐ๊พธ๊ณ `decision` ๋ก๊ทธ์ ๊ฒฐ์ ๋งํฌ๋ฅผ ๋จ๊ฒจ์.
|
|
336
|
+
|
|
337
|
+
### 4. ์๋ณธ ์๋ฃ๋ฅผ ๋ฐ์ํด์
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
docs/raw/coupon-policy-v3.pdf๋ฅผ ๋ฐ์ํด ์ค.
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
ingest๊ฐ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ํฅ์ ๋ฐ๋ ๋ฌธ์๋ฅผ ์ธ๋ฑ์คยท์ญ๋งํฌยท๊ทผ๊ฑฐ๋ก ์ฐพ์ "๋ฐ๊ฟ ๋ด์ฉ ๋ชฉ๋ก"์ ๋จผ์ ๋ณด์ฌ ์ค์. ํ์ธ์ ๋ฐ์ ๋ค์๋ง ์์ ๋ฌธ์๋ฅผ ๊ณ ์น๊ณ `ingest` ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ์. ์๋ ๋ณํฉ์ ํ์ง ์์์.
|
|
344
|
+
|
|
345
|
+
### 5. ๋ต์ ์ฐพ์์
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
์ฅ๋ฐ๊ตฌ๋์ ๋ช ๊ฐ๊น์ง ๋ด์ ์ ์์ด?
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
finder๋ ์ธ๋ฑ์ค โ ์ผํ ๊ฐ์ โ ์ฅ๋ฐ๊ตฌ๋ ๋ฌธ์ ์์ผ๋ก ๋ด๋ ค๊ฐ `### ์๋ ์ํ`์ ์ถ์ฒ๋ก ๋ตํด์. ์ฉ์ดยท๊ฐ๋
์ง๋ฌธ์ด๋ฉด `concepts/overview.md`์ ์ฉ์ด ์ ์ ๋จผ์ ๋ด์. ๋ฌธ์์ ๋ต์ด ์์ผ๋ฉด "๋ฌธ์์ ์์"๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ ๋ฌธ์๋ฅผ ๋งํด์.
|
|
352
|
+
|
|
353
|
+
### 6. CI์์ ๊ฒ์ฌํด์
|
|
354
|
+
|
|
355
|
+
์ค๋ฅ๊ฐ ์์ผ๋ฉด ์คํจํ๋ GitHub Actions ์์
์ ์์์์.
|
|
356
|
+
|
|
357
|
+
```yaml
|
|
358
|
+
jobs:
|
|
359
|
+
specs:
|
|
360
|
+
runs-on: ubuntu-latest
|
|
361
|
+
steps:
|
|
362
|
+
- uses: actions/checkout@v4
|
|
363
|
+
- uses: actions/setup-node@v4
|
|
364
|
+
with: { node-version: 20 }
|
|
365
|
+
- run: npx crumbs-spec check --format json > crumbs-report.json
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
์ข
๋ฃ ์ฝ๋ 1์ด๋ฉด ์ค๋ฅ๊ฐ ์์ด์. ๊ฒฝ๊ณ (`open-question`, `missing-flow` ๋ฑ)๋ ์คํจ์ํค์ง ์์์.
|
|
369
|
+
|
|
370
|
+
## ์ข
๋ฃ ์ฝ๋
|
|
371
|
+
|
|
372
|
+
| ์ฝ๋ | ์๋ฏธ |
|
|
373
|
+
|---|---|
|
|
374
|
+
| 0 | `check`: ์ค๋ฅ๊ฐ ์์ด์(๊ฒฝ๊ณ ๋ ํ์ฉ). `init`ยท`log add`: ์๋ฃ |
|
|
375
|
+
| 1 | `check`: ์ค๋ฅ๊ฐ ํ๋ ์ด์ ์์ด์ |
|
|
376
|
+
| 2 | ์ฌ์ฉ๋ฒ ์ค๋ฅ, ์ค์ ์ค๋ฅ, ์๊ธฐ์น ์์ I/O ์ค๋ฅ |
|
|
377
|
+
|
|
378
|
+
## ์ค๊ณ์์ ๋บ ๊ฒ
|
|
379
|
+
|
|
380
|
+
- ์๊ตฌ์ฌํญ ID, front matter, EARS ๊ฐ์ ๋ฌธ๋ฒ ๊ฐ์ . ํ์ ์ ๋ณด๋ ๋งํฌ์ ์ ๋ชฉ์๋ง ๋ฌ์.
|
|
381
|
+
- ๋ฌธ์ ์์ ๋ณ๊ฒฝ ์ด๋ ฅ ํ์ ๊ฒฐ์ ๋ง๋ค ๋ณ๋ ํ์ผ. ๊ฒฐ์ ์ ๋ก๊ทธ ํ ๊ณณ์ ์๊ณ ๋ฌธ์๋ ๋งํฌ๋ก ๊ฐ๋ฆฌ์ผ์.
|
|
382
|
+
- ์ ์๋ง ์๋ ์ฉ์ด ํ์ด์ง. ๊ฐ์์ ์ฉ์ด ์ ๋ก ์ถฉ๋ถํด์.
|
|
383
|
+
- `check`์ ๋ฌธ์ฒดยท๋ด์ฉ ํ์ . ๋ฌธ์ฒด๋ ์คํฌ ์ง์นจ๊ณผ [docs/lint/](docs/lint/README.md)์ markdownlint ์ค์ ์ํ์ด ๋งก์์.
|
|
384
|
+
|
|
385
|
+
## ํ
์คํธ์ ํธํ์ฑ
|
|
386
|
+
|
|
387
|
+
`npm test`๋ CI์์ Linux์ macOS ์์์ node:test ์ผ์ด์ค 80์ฌ ๊ฐ๋ฅผ ๋๋ ค์(`.github/workflows/ci.yml` ์ฐธ๊ณ ). ๋ณ๊ฒฝ ๋ด์ญ์ [CHANGELOG.md](CHANGELOG.md)์ ์์ด์. 1.0 ์ ์๋ ๋ง์ด๋ ๋ฒ์ ์์ ๊ฒ์ฌ ๊ท์น, ํ
ํ๋ฆฟ, ์คํฌ ๋ฌธ๊ตฌ๊ฐ ๋ฐ๋ ์ ์๊ณ , ํจ์น ๋ฒ์ ์ ๋ฒ๊ทธ๋ง ๊ณ ์ณ์.
|
|
388
|
+
|
|
389
|
+
## ๋ก๋๋งต
|
|
390
|
+
|
|
391
|
+
| ๋จ๊ณ | ๋ด์ฉ | ์ํ |
|
|
392
|
+
|---|---|---|
|
|
393
|
+
| 1 | `init`, `check`, ํ
ํ๋ฆฟ, AGENTS ๋ธ๋ก | ์๋ฃ |
|
|
394
|
+
| 2 | ์คํฌ 4์ข
, `log add`, ํ๋ฆ ์ , ์ฑ
์ ๋จ์ ๊ธฐ์ค, ์ฉ์ดยท๊ฐ๋
ํ์ด์ง, ๊ฒฐ์ ๋ก๊ทธ | ์๋ฃ |
|
|
395
|
+
| 3 | `crumbs reverse <path>` โ ์ฝ๋์์ ์ด์ ์์ฑ ๋ช
๋ น(์ง๊ธ์ writer ์คํฌ์ด ๋์ ํด์) | ์์ |
|
|
396
|
+
| 4 | `crumbs drift --base <ref>` โ diff๋ก ๊ทผ๊ฑฐ๊ฐ ๋ฐ๋ ๋ฌธ์๋ฅผ ์ฐพ์์ | ์์ |
|
|
397
|
+
| 5 | ์์ ์ฑ๊ณผ ํ์ ๋น์ฉ ๋ฒค์น๋งํฌ ๋ฌ๋ | ์์ |
|