crumbs-spec 0.0.0-stage โ†’ 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +366 -0
  3. package/README.md +367 -2
  4. package/dist/src/check.js +70 -0
  5. package/dist/src/check.js.map +1 -0
  6. package/dist/src/cli.js +193 -0
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/config.js +136 -0
  9. package/dist/src/config.js.map +1 -0
  10. package/dist/src/dates.js +15 -0
  11. package/dist/src/dates.js.map +1 -0
  12. package/dist/src/graph.js +179 -0
  13. package/dist/src/graph.js.map +1 -0
  14. package/dist/src/headings.js +55 -0
  15. package/dist/src/headings.js.map +1 -0
  16. package/dist/src/init.js +98 -0
  17. package/dist/src/init.js.map +1 -0
  18. package/dist/src/log.js +65 -0
  19. package/dist/src/log.js.map +1 -0
  20. package/dist/src/markdown.js +193 -0
  21. package/dist/src/markdown.js.map +1 -0
  22. package/dist/src/messages.js +178 -0
  23. package/dist/src/messages.js.map +1 -0
  24. package/dist/src/model.js +5 -0
  25. package/dist/src/model.js.map +1 -0
  26. package/dist/src/report.js +14 -0
  27. package/dist/src/report.js.map +1 -0
  28. package/dist/src/rules/broken-anchor.js +23 -0
  29. package/dist/src/rules/broken-anchor.js.map +1 -0
  30. package/dist/src/rules/broken-link.js +18 -0
  31. package/dist/src/rules/broken-link.js.map +1 -0
  32. package/dist/src/rules/duplicate-policy.js +38 -0
  33. package/dist/src/rules/duplicate-policy.js.map +1 -0
  34. package/dist/src/rules/log-body.js +23 -0
  35. package/dist/src/rules/log-body.js.map +1 -0
  36. package/dist/src/rules/log-format.js +28 -0
  37. package/dist/src/rules/log-format.js.map +1 -0
  38. package/dist/src/rules/log-order.js +23 -0
  39. package/dist/src/rules/log-order.js.map +1 -0
  40. package/dist/src/rules/missing-backlink.js +39 -0
  41. package/dist/src/rules/missing-backlink.js.map +1 -0
  42. package/dist/src/rules/missing-code-path.js +16 -0
  43. package/dist/src/rules/missing-code-path.js.map +1 -0
  44. package/dist/src/rules/missing-flow.js +17 -0
  45. package/dist/src/rules/missing-flow.js.map +1 -0
  46. package/dist/src/rules/missing-section.js +19 -0
  47. package/dist/src/rules/missing-section.js.map +1 -0
  48. package/dist/src/rules/open-question.js +13 -0
  49. package/dist/src/rules/open-question.js.map +1 -0
  50. package/dist/src/rules/section-order.js +46 -0
  51. package/dist/src/rules/section-order.js.map +1 -0
  52. package/dist/src/rules/unreachable.js +27 -0
  53. package/dist/src/rules/unreachable.js.map +1 -0
  54. package/dist/src/skills.js +16 -0
  55. package/dist/src/skills.js.map +1 -0
  56. package/dist/src/templates/agents.js +54 -0
  57. package/dist/src/templates/agents.js.map +1 -0
  58. package/dist/src/templates/en.js +75 -0
  59. package/dist/src/templates/en.js.map +1 -0
  60. package/dist/src/templates/ko.js +75 -0
  61. package/dist/src/templates/ko.js.map +1 -0
  62. package/dist/src/templates/skills-en.js +259 -0
  63. package/dist/src/templates/skills-en.js.map +1 -0
  64. package/dist/src/templates/skills-ko.js +264 -0
  65. package/dist/src/templates/skills-ko.js.map +1 -0
  66. package/package.json +49 -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,366 @@
1
+ # crumbs-spec ๐Ÿž
2
+
3
+ **ํ•œ๊ตญ์–ด** ยท [English](README.md)
4
+
5
+ ์—์ด์ „ํŠธ๊ฐ€ ๊ธธ์„ ์žƒ์ง€ ์•Š๊ฒŒ ๋ฌธ์„œ๋งˆ๋‹ค ๋นต๋ถ€์Šค๋Ÿฌ๊ธฐ(๋งํฌ)๋ฅผ ๋‚จ๊ธฐ๊ณ , ์ธ๋ฑ์Šค์—์„œ ์ƒ์„ธ ๋ฌธ์„œ๊นŒ์ง€ ํ•œ ๊ธธ๋กœ ์ด์–ด์ง€๋Š” **์‚ด์•„ ์žˆ๋Š” ์ŠคํŽ™**์„ ๋งŒ๋“ค์–ด์š”. ์ €์žฅ์†Œ๊ฐ€ *์ง€๊ธˆ* ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์ฑ…์ž„ ๋‹จ์œ„ ๋ฌธ์„œ๋กœ ๋‘๊ณ , ๊ทธ ๋ฌธ์„œ๋“ค์ด ์ž˜ ์ด์–ด์ ธ ์žˆ๋Š”์ง€ ๋ช…๋ น ํ•˜๋‚˜๋กœ ๊ฒ€์‚ฌํ•˜๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์“ฐ๊ณ ยท์ฐพ๊ณ ยท๋ฌป๊ณ ยท๋ฐ˜์˜ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์Šคํ‚ฌ๋กœ ๊ณ ์ •ํ•œ ๋„๊ตฌ์˜ˆ์š”.
6
+
7
+ ## ์™œ ๋งŒ๋“ค์—ˆ๋‚˜์š”
8
+
9
+ ์‹ค์ œ ์•ฑ ์ €์žฅ์†Œ์—์„œ ์ˆ˜์‹ญ ๊ฐœ์˜ ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ์—์ด์ „ํŠธ์™€ ํ•จ๊ป˜ ์šด์˜ํ•˜๋‹ค ๋ณด๋‹ˆ ๊ฐ™์€ ์ผ์ด ์ž๊พธ ๋ฐ˜๋ณต๋์–ด์š”.
10
+
11
+ 1. ์ŠคํŽ™์ด ๋ณ€๊ฒฝ ๋‹จ์œ„(๊ธฐ๋Šฅ๋ณ„ `spec.md`, ํ‹ฐ์ผ“)๋กœ๋งŒ ๋‚จ์•„์„œ, ๋ช‡ ๋‹ฌ ๋’ค "์ง€๊ธˆ ์ด ๊ทœ์น™์ด ๋ญ์ง€?"์— ๋‹ตํ•  ๋ฌธ์„œ๊ฐ€ ์—†์—ˆ์–ด์š”.
12
+ 2. ์œ„ํ‚ค์ฒ˜๋Ÿผ ์Œ“์œผ๋‹ˆ ๊ฐ™์€ ๊ทœ์น™์ด ์—ฌ๋Ÿฌ ๋ฌธ์„œ์— ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ฒŒ ์ ํ˜”๊ณ , ์–ด๋А ์ชฝ์ด ๋งž๋Š”์ง€ ์•„๋ฌด๋„ ๋ชฐ๋ž์–ด์š”. ๋‚˜์ค‘์— ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋Œ๋ ค ๋ณด๋‹ˆ ์—์ด์ „ํŠธ๊ฐ€ ๋ฌธ์„œ ๊ฐ„ ๋ถˆ์ผ์น˜๋ฅผ ์…‹์ด๋‚˜ ์ฐพ์•„๋ƒˆ์–ด์š”.
13
+ 3. ์—์ด์ „ํŠธ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ฝ์„ ๋•Œ ํด๋” ๊ตฌ์กฐ์™€ ๊ฒ€์ƒ‰์— ๊ธฐ๋Œ€๋‹ค ๋ณด๋‹ˆ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์ƒˆ๊ฑฐ๋‚˜ grep์œผ๋กœ ๋–จ์–ด์กŒ์–ด์š”. ์งˆ๋ฌธ ํ•˜๋‚˜์— ๋ฌธ์„œ 8๊ฐœ๋ฅผ ์ฝ๋Š” ์ผ๋„ ์žˆ์—ˆ๊ณ ์š”.
14
+
15
+ "๋ฌธ์„œ๋ฅผ ๋” ์ž˜ ์“ฐ์ž"๋กœ๋Š” ํ•ด๊ฒฐ์ด ์•ˆ ๋์–ด์š”. **๊ตฌ์กฐ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ๊ฐ•์ œํ•˜๋Š” ๋„๊ตฌ**๊ฐ€ ํ•„์š”ํ–ˆ์–ด์š”. ์ •์ฑ…์˜ ์†Œ์œ ์ž๋ฅผ ํ•˜๋‚˜๋กœ ์ •ํ•˜๊ณ , ๋งํฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ , ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ ์งˆ๋ฌธ์œผ๋กœ ๋‚จ๊ธฐ๊ฒŒ ํ•˜๋ฉด ์—์ด์ „ํŠธ๋„ ์‚ฌ๋žŒ๋„ ๊ฐ™์€ ๊ธธ๋กœ ๋ฌธ์„œ์— ๋‹ฟ์•„์š”. ๊ทธ๋ž˜์„œ ๋นต๋ถ€์Šค๋Ÿฌ๊ธฐ๋ฅผ ๋ฟŒ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ์–ด์š”.
16
+
17
+ ## ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”
18
+
19
+ Spec Kit์€ ๊ตฌํ˜„ ์ „ ๊ณ„ํš์„, LLM Wiki๋Š” ์ž๋ฃŒ๋ฅผ ์Œ“๋Š” ์œ„ํ‚ค๋ฅผ ์ž˜ ๋‹ค๋ค„์š”. crumbs-spec์€ ๊ทธ ์‚ฌ์ด์˜ ๋นˆ์ž๋ฆฌ, **๊ตฌํ˜„์ด ๋๋‚œ ๋’ค์—๋„ ๋‚จ์•„์•ผ ํ•˜๋Š” ํ˜„์žฌ ์ƒํƒœ**๋ฅผ ๋งก์•„์š”. ๋Œ€์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ณด์™„ ๊ด€๊ณ„์˜ˆ์š”.
20
+
21
+ | | GitHub Spec Kit | OpenSpec | Karpathy LLM Wiki | **crumbs-spec** |
22
+ |---|---|---|---|---|
23
+ | ๋ฌธ์„œ ๋‹จ์œ„ | ๋ณ€๊ฒฝ(๊ธฐ๋Šฅ) ํ•˜๋‚˜: `spec.md`ยท`plan.md`ยท`tasks.md` | ํ˜„์žฌ ์ƒํƒœ ์ŠคํŽ™ + ๋ณ€๊ฒฝ ๋ธํƒ€ | ์—”ํ‹ฐํ‹ฐยท๊ฐœ๋…ยท์›๋ณธ ์š”์•ฝ ํŽ˜์ด์ง€ | **์ฑ…์ž„(์‚ฌ์šฉ์ž ํ๋ฆ„) ํ•˜๋‚˜**. ์ •์ฑ…์€ ๋ฌธ์„œ ํ•˜๋‚˜๊ฐ€ ์†Œ์œ  |
24
+ | ์‹œ์  | ๊ตฌํ˜„ ์ „ | ๊ตฌํ˜„ ์ „ยทํ›„ | ์ž๋ฃŒ ๋ฐ˜์˜ ์‹œ์  | **๊ตฌํ˜„ ๋’ค ํ˜„์žฌ ๋™์ž‘** |
25
+ | ๊ธฐ์กด ์ฝ”๋“œ | "์ถ”๋ก ํ•˜์ง€ ์•Š๋Š”๋‹ค"๊ณ  ์Šค์Šค๋กœ ๋ฐํž˜ | ์˜จ๋ณด๋”ฉ์€ ์žˆ์œผ๋‚˜ ์ฝ”๋“œโ†’์ŠคํŽ™ ์ดˆ์•ˆ์€ ์—†์Œ | ์›๋ณธ ์ž๋ฃŒ๊ฐ€ ๋Œ€์ƒ, ์ฝ”๋“œ ์•„๋‹˜ | **์ฝ”๋“œยทํ…Œ์ŠคํŠธ์—์„œ ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ณ  ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ `[ํ™•์ธ ํ•„์š”]` ์งˆ๋ฌธ์œผ๋กœ** |
26
+ | ํƒ์ƒ‰ | ํด๋”์™€ ํŒŒ์ผ ์ด๋ฆ„ | ํด๋”์™€ ํŒŒ์ผ ์ด๋ฆ„ | ์ธ๋ฑ์Šค ์šฐ์„  | **์ธ๋ฑ์Šค โ†’ ๊ฐœ์š” โ†’ ์ƒ์„ธ ๋งํฌ๋งŒ**. IDยทfront matter ์—†์Œ |
27
+ | ๊ธฐ๊ณ„ ๊ฒ€์‚ฌ | specยทplanยทtasks ์ผ๊ด€์„ฑ | ๋ธํƒ€ ๋ณ‘ํ•ฉ | ๊ณ ์•„ ํŽ˜์ด์ง€ยท๋Š๊ธด ๋งํฌ lint(LLM ํŒ๋‹จ ํฌํ•จ) | **๊ฒฐ์ •๋ก ์  15๊ฐœ ๊ทœ์น™**: ๋งํฌยท์•ต์ปคยท๋„๋‹ฌ ๊ฐ€๋Šฅยท์—ญ๋งํฌยท์ •์ฑ… ์ค‘๋ณตยท๊ทผ๊ฑฐ ๊ฒฝ๋กœ ์‹ค์กดยท์ ˆ ์ˆœ์„œยทํ๋ฆ„ ๋„์‹ยท๋กœ๊ทธ ํ˜•์‹ |
28
+ | ๊ตฌํ˜„ ํ›„ ๋™๊ธฐํ™” | ํŒ€์ด ์œ ์ง€ ๋ฐฉ์‹์„ ๊ณ ๋ฆ„ | `archive`/`sync`๋กœ ๋ณ€๊ฒฝ๋ถ„๋งŒ | ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ‚ค์— ํ™˜๋ฅ˜ | **์—์ด์ „ํŠธ ๊ทœ์น™("์š”์ฒญ ์—†์–ด๋„ ๊ฐ™์€ ๋ณ€๊ฒฝ์—์„œ ๋ฌธ์„œ ๊ฐฑ์‹ ") + ๊ฒฐ์ • ๋กœ๊ทธ + ์˜ˆ์ •๋œ `drift`** |
29
+ | ์‚ฌ๋žŒ ๊ฐ€๋…์„ฑ | ์‚ฐ๋ฌธ | ์‚ฐ๋ฌธ | ์‚ฐ๋ฌธ | **ํ๋ฆ„ ๋„์‹(Mermaid)๊ณผ ๋ถ„๊ธฐ ํ‘œ๋ฅผ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ** |
30
+ | ์ธก์ • | ์—†์Œ | ์—†์Œ | ์—†์Œ | **๊ฐ™์€ ์งˆ๋ฌธ์œผ๋กœ ๋‘ ๋ฌธ์„œ ์ฒด๊ณ„์˜ ํƒ์ƒ‰ ๋น„์šฉ ๋น„๊ต** |
31
+
32
+ LLM Wiki์—์„œ๋Š” ์›๋ณธ/์œ„ํ‚ค/์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ, ์ธ๋ฑ์Šค ์šฐ์„ , ์ถ”๊ฐ€ ์ „์šฉ ๋กœ๊ทธ, ์‚ฌ๋žŒ์ด ๊ฐ๋…ํ•˜๋Š” ingest๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”์–ด์š”. ์ผ๋ถ€๋Ÿฌ ๋‹ค๋ฅด๊ฒŒ ํ•œ ๊ฑด ์…‹์ด์—์š”. ์—”ํ‹ฐํ‹ฐ ํŽ˜์ด์ง€ ๋Œ€์‹  ์ฑ…์ž„ ๋‹จ์œ„๋กœ ์กฐ์งํ•˜๊ณ (์—ฌ๋Ÿฌ ํ๋ฆ„์ด ๋ถ„๊ธฐ ์ถ•์œผ๋กœ ์“ฐ๋Š” ๊ฐœ๋…๋งŒ `concepts/`์— ๋‘ฌ์š”), ๋ฌธ์„œ๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์œ ์ง€ํ•˜๋˜ ์‚ฌ๋žŒ์ด ์†Œ์œ ํ•˜๊ณ , lint๋Š” LLM ํŒ๋‹จ ์—†์ด ๊ฒฐ์ •๋ก ์ ์œผ๋กœ๋งŒ ํ•ด์š”. ๋” ์ž์„ธํ•œ ๋น„๊ต๋Š” [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md) 1์ ˆ์— ์žˆ์–ด์š”.
33
+
34
+ ## ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ ๊ฒƒ
35
+
36
+ - **ํ˜„์žฌ ์ƒํƒœ์˜ ๋‹จ์ผ ์ง„์‹ค.** ๋ณ€๊ฒฝ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„์š”. ๋ฌธ์„œ๋Š” "๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋‚˜"๊ฐ€ ์•„๋‹ˆ๋ผ "์ง€๊ธˆ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜"๋ฅผ ์„ค๋ช…ํ•ด์š”.
37
+ - **์ถ”์ธก ๊ธˆ์ง€.** ์ฝ”๋“œยทํ…Œ์ŠคํŠธยท์Šน์ธ๋œ ์ž๋ฃŒ๋กœ ํ™•์ธ๋˜์ง€ ์•Š์€ ๊ทœ์น™์€ "์ง€๊ธˆ์€ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•œ๋‹ค" ์„œ์ˆ ๊ณผ `[ํ™•์ธ ํ•„์š”]` ์งˆ๋ฌธ์œผ๋กœ๋งŒ ๋‚จ๊ฒจ์š”. ์งˆ๋ฌธ ์ˆ˜๋Š” `check`๊ฐ€ ์„ธ์–ด ์ค˜์š”.
38
+ - **์‚ฌ๋žŒ ์šฐ์„ ์˜ ๋ณธ๋ฌธ.** ID, ์ƒํƒœ ํ‘œ, ๋ฌธ๋ฒ• ๊ฐ•์ œ๊ฐ€ ์—†์–ด์š”. ํƒ์ƒ‰ ์ •๋ณด๋Š” ๋งํฌ์™€ ์ œ๋ชฉ์—๋งŒ ๋‘ฌ์š”.
39
+ - **๊ฒ€์‚ฌ๋Š” ๊ฒฐ์ •๋ก ์ ์œผ๋กœ, ํŒ๋‹จ์€ ์‚ฌ๋žŒ๊ณผ ์Šคํ‚ฌ์ด.** `check`๋Š” ๊ตฌ์กฐ๋งŒ ๋ด์š”. ๋ฌธ์ฒดยท๋‚ด์šฉยท๋…ธํ›„ ํŒ์ •์€ ์Šคํ‚ฌ ์ง€์นจ๊ณผ ์‚ฌ๋žŒ์ด ๋งก์•„์š”.
40
+ - **๊ฒฐ์ •์€ ํ•œ ๊ณณ์—.** ์งˆ๋ฌธ์ด ๋‹ต์„ ์–ป์œผ๋ฉด ๋กœ๊ทธ์— `decision` ํ•ญ๋ชฉ์„ ๋‚จ๊ธฐ๊ณ  ๋ฌธ์„œ๋Š” ๋‚ ์งœ ๋งํฌ ํ•˜๋‚˜๋กœ ๊ทธ ๊ฒฐ์ •์„ ๊ฐ€๋ฆฌ์ผœ์š”.
41
+ - **๋‘ ์–ธ์–ด.** `crumbs.json`์˜ `lang`์ด ์ €์žฅ์†Œ ์ „์ฒด์˜ ํ…œํ”Œ๋ฆฟ, ์Šคํ‚ฌ, ๋ฉ”์‹œ์ง€, AGENTS ๋ธ”๋ก ์–ธ์–ด๋ฅผ ์ •ํ•ด์š”. ๊ธฐ๋ณธ๊ฐ’์€ ์˜์–ด(`en`)์ด๊ณ  `ko`๋ฅผ ์“ฐ๋ฉด ํ•œ๊ตญ์–ด๊ฐ€ ๋ผ์š”.
42
+
43
+ ## ์‹ค์ œ๋กœ ์จ ๋ณด๋‹ˆ
44
+
45
+ ์‹ค์ œ ์•ฑ ์ €์žฅ์†Œ ์„ธ ์˜์—ญ(์ฝ”๋“œ ์•ฝ 4๋งŒ ์ค„)์„ ๊ธฐ์กด ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ์ „ํ˜€ ๋ณด์—ฌ ์ฃผ์ง€ ์•Š๊ณ  crumbs-writer ์Šคํ‚ฌ๋กœ ๋‹ค์‹œ ์ผ์–ด์š”. ๊ทธ๋‹ค์Œ ๊ธฐ์กด ์ŠคํŽ™ ์ฒด๊ณ„์™€ crumbs ์ฒด๊ณ„์— ๊ฐ™์€ ์งˆ๋ฌธ 18๊ฐœ๋ฅผ ๋˜์ ธ ์—์ด์ „ํŠธ๊ฐ€ ๋ฌธ์„œ๋งŒ ์ฝ๊ณ  ๋‹ตํ•˜๊ฒŒ ํ–ˆ์–ด์š”.
46
+
47
+ **์ œ๋กœ ๋ฒ ์ด์Šค์—์„œ ์“ฐ๋Š” ๋ฐ ๋“  ๋น„์šฉ** (์—์ด์ „ํŠธ 1๊ฐœ๊ฐ€ ๋„๋ฉ”์ธ ํ•˜๋‚˜๋ฅผ ๋งก์Œ, ๋ณ‘๋ ฌ 3๊ฐœ)
48
+
49
+ | ๋„๋ฉ”์ธ | ์ฝ”๋“œ ๋ฒ”์œ„ | ๋งŒ๋“  ๋ฌธ์„œ | ์ •์ฑ… | ํ…Œ์ŠคํŠธ๋กœ ํ™•์ • / ์งˆ๋ฌธ | ์—์ด์ „ํŠธ ํ† ํฐ | ์ž‘์„ฑ ์‹œ๊ฐ„ |
50
+ |---|---|---|---|---|---|---|
51
+ | ๊ฒฐ์ œ | ์•ฝ 2๋งŒ ์ค„ | 19๊ฐœ | 100 | 5 / 95 | 57๋งŒ | 1์‹œ๊ฐ„ 7๋ถ„ |
52
+ | ๋ทฐ์–ด | ์•ฝ 2๋งŒ 3์ฒœ ์ค„ | 40๊ฐœ | 194 | 29 / 165 | 85๋งŒ | 1์‹œ๊ฐ„ 7๋ถ„ |
53
+ | ์ธ์ฆ | ์•ฝ 1๋งŒ ์ค„ | 35๊ฐœ | 195 | 64 / 131 | 79๋งŒ | 1์‹œ๊ฐ„ 13๋ถ„ |
54
+
55
+ ์ž‘์„ฑ ์‹œ๊ฐ„์€ ์—์ด์ „ํŠธ ์ „์‚ฌ์˜ ํƒ€์ž„์Šคํƒฌํ”„์—์„œ 10๋ถ„ ๋„˜๊ฒŒ ๋น„์–ด ์žˆ๋˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋บ€ ์‹ค์ œ ์ž‘์—… ์‹œ๊ฐ„์ด์—์š”. ์„ธ ๋„๋ฉ”์ธ์„ ๋ณ‘๋ ฌ๋กœ ๋Œ๋ ค 1์‹œ๊ฐ„ 15๋ถ„์ฏค์— ๋ชจ๋‘ ๋๋‚ฌ์–ด์š”. ์ง€์–ด๋‚ธ ์ •์ฑ…์€ 0๊ฐœ์˜€๊ณ , ๊ธฐ์กด ์ŠคํŽ™ ๋ฌธ์„œ์™€ ์ฝ”๋“œ๊ฐ€ ๋‹ฌ๋ž๋˜ 6๊ณณ์„ ๋ชจ๋‘ ์ฝ”๋“œ๋Œ€๋กœ ์ ์—ˆ์–ด์š”. ๊ทธ ๋’ค ์‚ฌ์šฉ์ž ํ๋ฆ„ ๋‹จ์œ„๋กœ ๋‹ค์‹œ ๋ฌถ์–ด 38๊ฐœ ๋ฌธ์„œ๊ฐ€ ๋์–ด์š”.
56
+
57
+ **๊ฐ™์€ ์งˆ๋ฌธ 18๊ฐœ๋กœ ๋น„๊ตํ•œ ํƒ์ƒ‰ ๋น„์šฉ** (์—์ด์ „ํŠธ๋Š” ๋ฌธ์„œ๋งŒ ์ฝ๊ณ  ์ฝ”๋“œ๋Š” ๊ธˆ์ง€)
58
+
59
+ | | ๊ธฐ์กด ์ŠคํŽ™ ์ฒด๊ณ„ | crumbs-spec |
60
+ |---|---|---|
61
+ | ์ •๋‹ต | 17 / 18 (๋ถ€๋ถ„ 1) | 15 / 18 (๋ถ€๋ถ„ 3) |
62
+ | ์ฝ์€ ํŒŒ์ผ ์ˆ˜ ํ•ฉ๊ณ„ | 70 (ํ‰๊ท  3.9, ์ตœ๋Œ€ 8) | 64 (ํ‰๊ท  3.6, ์ตœ๋Œ€ 6) |
63
+ | ๊ฒ€์ƒ‰(grep)์œผ๋กœ ๋–จ์–ด์ง„ ํšŸ์ˆ˜ | 3 | 1 |
64
+ | ํ† ํฐ ํ•ฉ๊ณ„ | 232๋งŒ | 189๋งŒ (โˆ’18%) |
65
+
66
+ ๊ธฐ์กด ์ฒด๊ณ„์˜ ๋ถ€๋ถ„ ์ •๋‹ต์€ ์†Œ์œ  ๋ฌธ์„œ๋ฅผ ๋ชป ์ฐพ์€ ๊ฒฝ์šฐ์˜€๊ณ , crumbs์˜ ๋ถ€๋ถ„ ์ •๋‹ต 3๊ฐœ๋Š” ๋ชจ๋‘ ๋ฌธ์„œ์—” 3~5ํŒŒ์ผ๋กœ ๋„๋‹ฌํ–ˆ๋Š”๋ฐ writer๊ฐ€ ํ™”๋ฉด ์ˆ˜์น˜ยท์ฑ„๋„ ๋ถ„๊ธฐ ๊ฐ™์€ ์„ธ๋ถ€๋ฅผ ๋ฒ„๋ฆฐ ๊ฒฝ์šฐ์˜€์–ด์š”. ๊ทธ ์›์ธ์€ ์Šคํ‚ฌ ๊ทœ์น™("์กฐ๊ฑด์ด ๋ถ™์€ ๊ฐ’์€ ๋ฒ„๋ฆฌ์ง€ ์•Š๋Š”๋‹ค")์œผ๋กœ ๊ณ ์ณค์–ด์š”. ์งˆ๋ฌธ์ด ๊ธฐ์กด ์ŠคํŽ™์—์„œ ๋‚˜์™€ ๊ธฐ์กด ์ฒด๊ณ„์— ์œ ๋ฆฌํ•œ ํŽธํ–ฅ์ด ์žˆ๋‹ค๋Š” ์ ์€ ๊ฐ์•ˆํ•ด ์ฃผ์„ธ์š”.
67
+
68
+ ## ์„ค์น˜์™€ ๋น ๋ฅธ ์‹œ์ž‘
69
+
70
+ Node.js 20 ์ด์ƒ์ด ํ•„์š”ํ•˜๊ณ  ์‹คํ–‰ ์˜์กด์„ฑ์€ ์—†์–ด์š”.
71
+
72
+ ```bash
73
+ npx crumbs-spec init --skills all # ๋ฌธ์„œ ๊ตฌ์กฐ + ์—์ด์ „ํŠธ ์Šคํ‚ฌ 4์ข…
74
+ npx crumbs-spec init # ๋ฌธ์„œ ๊ตฌ์กฐ๋งŒ
75
+ npx crumbs-spec check # ๋งํฌ ๊ทธ๋ž˜ํ”„์™€ ๊ตฌ์กฐ ๊ฒ€์‚ฌ
76
+ ```
77
+
78
+ ํ•œ๊ตญ์–ด ์ €์žฅ์†Œ๋Š” `--lang ko`๋ฅผ ๋ถ™์—ฌ์š”.
79
+
80
+ `init`์€ ๋‹ค์Œ ์ผ๊ณฑ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ์ด๋ฏธ ์žˆ๋Š” ํŒŒ์ผ์€ ์ ˆ๋Œ€ ๋ฎ์–ด์“ฐ์ง€ ์•Š์•„์š”.
81
+
82
+ ```
83
+ crumbs.json ์„ค์ •
84
+ docs/specs/index.md ์ธ๋ฑ์Šค(์ž…๊ตฌ)
85
+ docs/specs/log.md ์ถ”๊ฐ€ ์ „์šฉ ๋กœ๊ทธ
86
+ docs/specs/templates/overview.md ๊ฐœ์š” ํ…œํ”Œ๋ฆฟ
87
+ docs/specs/templates/detail.md ์ƒ์„ธ ํ…œํ”Œ๋ฆฟ
88
+ docs/raw/README.md ์›๋ณธ ์ž๋ฃŒ ๋””๋ ‰ํ„ฐ๋ฆฌ(์ฝ๊ธฐ ์ „์šฉ)
89
+ AGENTS.md crumbs ๋ธ”๋ก(์—์ด์ „ํŠธ ๊ทœ์น™)
90
+ ```
91
+
92
+ npm์— ๊ณต๊ฐœํ•˜๊ธฐ ์ „์—๋Š” ์ €์žฅ์†Œ์—์„œ `npm run build` ๋’ค `node dist/src/cli.js <๋ช…๋ น>`์œผ๋กœ ์‹คํ–‰ํ•ด์š”.
93
+
94
+ ## ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
95
+
96
+ ์ด๋ฏธ ์ฝ”๋“œ์™€ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” ์ €์žฅ์†Œ์— ๋„ฃ๋Š” ์ˆœ์„œ์˜ˆ์š”. ํ•œ ๋ฒˆ์— ๋‹ค ์˜ฎ๊ธฐ์ง€ ๋ง๊ณ  ๋„๋ฉ”์ธ ํ•˜๋‚˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์š”.
97
+
98
+ 1. **์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ `init`์„ ์‹คํ–‰ํ•ด์š”.** ์ŠคํŽ™ ๋ฃจํŠธ๊ฐ€ ๋”ฐ๋กœ ์žˆ์œผ๋ฉด `--spec-dir`๋กœ ์ง€์ •ํ•ด์š”(์˜ˆ: `docs/crumbs`). ๊ธฐ์กด ํŒŒ์ผ์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , `AGENTS.md`๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด `<!-- crumbs:start -->`์™€ `<!-- crumbs:end -->` ์‚ฌ์ด ๋ธ”๋ก๋งŒ ๋ผ์›Œ ๋„ฃ์–ด์š”.
99
+
100
+ ```bash
101
+ npx crumbs-spec init --spec-dir docs/crumbs --skills claude
102
+ ```
103
+
104
+ 2. **์—์ด์ „ํŠธ๊ฐ€ ๊ทœ์น™์„ ์ฝ๊ฒŒ ํ•ด์š”.** Claude Code๋Š” `CLAUDE.md`์— `@AGENTS.md` ํ•œ ์ค„์ด ์žˆ์–ด์•ผ crumbs ๋ธ”๋ก์„ ์ฝ์–ด์š”. ์Šคํ‚ฌ์€ `.claude/skills/`(Claude Code)์™€ `.agents/skills/`(Codex)์—์„œ ์ž๋™์œผ๋กœ ์ฐพ์•„์š”.
105
+
106
+ 3. **๊ธฐ์กด ๋ฌธ์„œ๋Š” ์˜ฎ๊ธฐ์ง€ ์•Š์•„์š”.** writer๋Š” ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ๋งŒ ์›๋ณธ์œผ๋กœ ์‚ผ๊ณ , ๊ธฐ์กด ์œ„ํ‚คยท์„ค๊ณ„ ๋ฉ”๋ชจยทREADME๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›๋ณธ ์ž๋ฃŒ๋กœ ์ง€๋ชฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์ฝ์ง€ ์•Š์•„์š”. ์ง€๊ธˆ ์ฝ”๋“œ์™€ ๋งž๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ๊ธฐ์กด ๋ฌธ์„œ ์ค‘ ๊ทผ๊ฑฐ๋กœ ์“ธ ๊ฒƒ(๊ธฐํš์„œ, ๊ณ„์•ฝ์„œ, ์ •์ฑ… ๊ฒฐ์ • ๊ธฐ๋ก)์€ `docs/raw/`์— ๋ณต์‚ฌํ•ด ๋‘๊ณ  `crumbs-ingest`๋กœ ํ•œ ๊ฑด์”ฉ ๋ฐ˜์˜ํ•ด์š”.
107
+
108
+ 4. **์ฒซ ๋„๋ฉ”์ธ์„ ์ฝ”๋“œ์—์„œ ์จ์š”.** ๊ฐ€์žฅ ์ž์ฃผ ์งˆ๋ฌธ๋ฐ›๋Š” ์˜์—ญ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๊ณ  writer์˜ "๊ธฐ์กด ์ฝ”๋“œ ๋ฌธ์„œํ™”" ๋ชจ๋“œ๋กœ ๋งก๊ฒจ์š”. ๊ฒฐ๊ณผ๋ฌผ์˜ `[ํ™•์ธ ํ•„์š”]` ์งˆ๋ฌธ ๋ชฉ๋ก์ด ๊ทธ ์˜์—ญ์—์„œ ์‚ฌ๋žŒ์ด ๊ฒฐ์ •ํ•ด์•ผ ํ•  ๊ฒƒ์˜ ๋ชฉ๋ก์ด ๋ผ์š”.
109
+
110
+ ```
111
+ src/billing/ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ crumbs-writer์˜ "๊ธฐ์กด ์ฝ”๋“œ ๋ฌธ์„œํ™”" ๋ชจ๋“œ๋กœ ๋ฌธ์„œํ™”ํ•ด ์ค˜.
112
+ ๋„๋ฉ”์ธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” docs/crumbs/billing/์ด๋‹ค. ํ™•์ธํ•˜์ง€ ๋ชปํ•œ ์ •์ฑ…์€ ์งˆ๋ฌธ์œผ๋กœ ๋‚จ๊ธฐ๊ณ  ๋๊นŒ์ง€ ํ•ด ์ค˜.
113
+ ```
114
+
115
+ 5. **`check`๋ฅผ CI์— ๊ฑธ์–ด์š”.** ์˜ค๋ฅ˜(๋Š์–ด์ง„ ๋งํฌยท์•ต์ปค, ๋„๋‹ฌ ๋ถˆ๊ฐ€ ๋ฌธ์„œ, ๋น ์ง„ ์—ญ๋งํฌ, ์—†๋Š” ์ฝ”๋“œ ๊ฒฝ๋กœ, ์ •์ฑ… ์ด๋ฆ„ ์ค‘๋ณต)๋งŒ ์‹คํŒจ์‹œํ‚ค๊ณ  ๊ฒฝ๊ณ ๋Š” ๋‘ฌ์š”. ์•„์ง crumbs๋กœ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ŠคํŽ™ ๋ฃจํŠธ ์•ˆ์— ์žˆ์œผ๋ฉด `crumbs.json`์˜ `exclude`์— ๋„ฃ์–ด์š”.
116
+
117
+ 6. **์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ ๋ฌธ์„œ๋ฅผ ๊ฐ™์ด ๋ฐ”๊ฟ”์š”.** AGENTS ๋ธ”๋ก์ด "์š”์ฒญ์ด ์—†์–ด๋„ ๊ฐ™์€ ๋ณ€๊ฒฝ์—์„œ ์†Œ์œ  ๋ฌธ์„œ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค"๋ฅผ ์—์ด์ „ํŠธ์—๊ฒŒ ์š”๊ตฌํ•˜๋‹ˆ๊นŒ, PR๋งˆ๋‹ค `check`์™€ ๋กœ๊ทธ ํ•ญ๋ชฉ์ด ํ•จ๊ป˜ ๋“ค์–ด์™€์š”. ๋„๋ฉ”์ธ์ด ํ•˜๋‚˜์”ฉ ๋Š˜์–ด๋‚˜๋ฉด์„œ ์ธ๋ฑ์Šค๊ฐ€ ์ฑ„์›Œ์ ธ์š”.
118
+
119
+ ๊ธฐ์กด ์ŠคํŽ™ ์ฒด๊ณ„๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‘ ์ฒด๊ณ„์— ๊ฐ™์€ ์งˆ๋ฌธ์„ ๋˜์ ธ ๋น„๊ตํ•ด ๋ณด์„ธ์š”. ์ฝ์€ ํŒŒ์ผ ์ˆ˜์™€ ์ •๋‹ต๋ฅ ๋กœ ์–ด๋А ์ชฝ์ด ๋” ์ž˜ ์ฐพํžˆ๋Š”์ง€ ๋ฐ”๋กœ ๋ณด์—ฌ์š”(5๋‹จ๊ณ„ ๋ฒค์น˜๋งˆํฌ ๋Ÿฌ๋„ˆ๊ฐ€ ์ด๊ฑธ ์ž๋™ํ™”ํ•  ์˜ˆ์ •์ด์—์š”).
120
+
121
+ ## ์ŠคํŽ™์ด ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆœ์„œ
122
+
123
+ writer ์Šคํ‚ฌ์ด "๊ธฐ์กด ์ฝ”๋“œ ๋ฌธ์„œํ™”" ๋ชจ๋“œ๋กœ ์ผํ•  ๋•Œ์˜ ์ˆœ์„œ์˜ˆ์š”. "๋ณ€๊ฒฝ ๋ฐ˜์˜" ๋ชจ๋“œ๋Š” 1~2๋‹จ๊ณ„๊ฐ€ "๋ฐ”๋€ ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ๊ทผ๊ฑฐ์— ์ ์€ ์†Œ์œ  ๋ฌธ์„œ ์ฐพ๊ธฐ"๋กœ ๋ฐ”๋€Œ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฐ™์•„์š”.
124
+
125
+ ```mermaid
126
+ flowchart TD
127
+ A["์ธ๋ฑ์Šค์™€ ํ…œํ”Œ๋ฆฟ ์ฝ๊ธฐ"] --> B["์ง„์ž…์ ๋ถ€ํ„ฐ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ ๋”ฐ๋ผ ์ฝ๊ธฐ"]
128
+ B --> C["์ฑ…์ž„ ๊ฒฝ๊ณ„ ์ •ํ•˜๊ธฐ ์‚ฌ์šฉ์ž ํ๋ฆ„ ํ•˜๋‚˜ = ๋ฌธ์„œ ํ•˜๋‚˜"]
129
+ C --> D["ํ˜„์žฌ ๋™์ž‘ ์“ฐ๊ธฐ ๋‹จ๊ณ„๋Š” ### ์†Œ์ œ๋ชฉ"]
130
+ D --> E{"ํ…Œ์ŠคํŠธ๊ฐ€ ํ™•์ •ํ•˜๋Š” ๊ทœ์น™์ธ๊ฐ€"}
131
+ E -->|์˜ˆ| F["์ •์ฑ…์œผ๋กœ ์ ๊ธฐ"]
132
+ E -->|์•„๋‹ˆ์˜ค| G["์ง€๊ธˆ ๋™์ž‘ ์„œ์ˆ  + ํ™•์ธ ํ•„์š” ์งˆ๋ฌธ"]
133
+ F --> H["ํ๋ฆ„ ๋„์‹๊ณผ ๋ถ„๊ธฐ ํ‘œ"]
134
+ G --> H
135
+ H --> I["๊ทผ๊ฑฐ ๊ฒฝ๋กœ์™€ ๊ด€๋ จ ๋ฌธ์„œ ์–‘๋ฐฉํ–ฅ ๋งํฌ"]
136
+ I --> J["๊ฐœ์š” ๋ฌธ์„œ ๋ชฉ๋ก๊ณผ ์ธ๋ฑ์Šค ๊ฐฑ์‹ "]
137
+ J --> K["crumbs check"]
138
+ K -->|์˜ค๋ฅ˜| I
139
+ K -->|ํ†ต๊ณผ| L["log add ๊ฒฐ๊ณผ ์ด์œ  ๋ฌธ์„œ"]
140
+ ```
141
+
142
+ ๋‹ต์ด ์ƒ๊ธฐ๋ฉด `crumbs-interview`๊ฐ€ ๋งŒ๋“  ์งˆ๋ฌธ์— ์‚ฌ๋žŒ์ด ๋‹ตํ•˜๊ณ , writer๊ฐ€ ์งˆ๋ฌธ ์ •์ฑ…์„ ํ™•์ • ์ •์ฑ…์œผ๋กœ ๋ฐ”๊พธ๋ฉฐ `decision` ๋กœ๊ทธ์™€ ๊ฒฐ์ • ๋งํฌ๋ฅผ ๋‚จ๊ฒจ์š”. ์ƒˆ ์ž๋ฃŒ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด `crumbs-ingest`๊ฐ€ ์˜ํ–ฅ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„ ํ™•์ธ๋ฐ›์€ ๋’ค ๋ฐ˜์˜ํ•ด์š”.
143
+
144
+ ## ๋ฌธ์„œ ๋ชจ๋ธ
145
+
146
+ ์—ญํ• ์€ ๋„ท์ด์—์š”. ํƒ์ƒ‰์€ ํ•ญ์ƒ ์ธ๋ฑ์Šค์—์„œ ์‹œ์ž‘ํ•ด์š”.
147
+
148
+ ```
149
+ docs/specs/index.md ์ธ๋ฑ์Šค: ๋„๋ฉ”์ธ ๋ชฉ๋ก + ๋กœ๊ทธ ๋งํฌ
150
+ docs/specs/<๋„๋ฉ”์ธ>/overview.md ๊ฐœ์š”: ๋ฒ”์œ„, ํ๋ฆ„๋„, ๋ฌธ์„œ ๋ชฉ๋ก, ์šฉ์–ด
151
+ docs/specs/<๋„๋ฉ”์ธ>/<์ฑ…์ž„>.md ์ƒ์„ธ: ์‚ฌ์šฉ์ž ํ๋ฆ„ ํ•˜๋‚˜
152
+ docs/specs/log.md ๋กœ๊ทธ: ํ•œ ์ผ์„ ์‹œ๊ฐ„์ˆœ์œผ๋กœ
153
+ docs/specs/concepts/ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ํ•จ๊ป˜ ์“ฐ๋Š” ๊ฐœ๋…(์„ ํƒ)
154
+ docs/raw/ ๊ณ„์•ฝ์„œยท๊ธฐํš ๋ฉ”๋ชจ ๊ฐ™์€ ๋ถˆ๋ณ€ ์›๋ณธ
155
+ ```
156
+
157
+ ์ƒ์„ธ ๋ฌธ์„œ์˜ ์ ˆ์€ ๊ณ ์ •์ด์—์š”.
158
+
159
+ | ์ ˆ | ๋‚ด์šฉ |
160
+ |---|---|
161
+ | ๋ชฉ์  | ์ด ๋ฌธ์„œ๊ฐ€ ์†Œ์œ ํ•˜๋Š” ์ฑ…์ž„ ํ•˜๋‚˜์™€ ๋งก์ง€ ์•Š๋Š” ๋ฒ”์œ„ |
162
+ | ํ˜„์žฌ ๋™์ž‘ | ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒช๋Š” ๋Œ€๋กœ, ํ˜„์žฌํ˜•์œผ๋กœ. ๋‹จ๊ณ„๊ฐ€ ์…‹ ์ด์ƒ์ด๋ฉด `###` ์†Œ์ œ๋ชฉ |
163
+ | ํ๋ฆ„ | ๋‘ ๋‹จ๊ณ„ ์ด์ƒ์ด๋ฉด Mermaid ๋„์‹, ๋น„๊ต ์ถ•์ด ๋‘˜ ์ด์ƒ์ด๋ฉด ํ‘œ |
164
+ | ์ •์ฑ… | `### ์ •์ฑ… ์ด๋ฆ„`(์ €์žฅ์†Œ ์ „์ฒด์—์„œ ์œ ์ผ)๊ณผ ๊ทœ์น™. ๋ฏธํ™•์ •์ด๋ฉด ์ง€๊ธˆ ๋™์ž‘ ์„œ์ˆ  ๋’ค์— `[ํ™•์ธ ํ•„์š”]` ์งˆ๋ฌธ |
165
+ | ๊ทผ๊ฑฐ | ๋ฐฑํ‹ฑ ์ฝ”๋“œ ๊ฒฝ๋กœ์™€ ์„ค๋ช…. `check`๊ฐ€ ๊ฒฝ๋กœ์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ•ด์š” |
166
+ | ํ™•์ธ ํ•„์š” ์‚ฌํ•ญ | `- [ํ™•์ธ ํ•„์š”] [์ •์ฑ… ์ด๋ฆ„](#์•ต์ปค) โ€” ์งˆ๋ฌธ` |
167
+ | ๊ด€๋ จ ๋ฌธ์„œ | ๊ฐœ์š”๋กœ ๊ฐ€๋Š” ๋งํฌ์™€ ์ด์›ƒ ๋ฌธ์„œ. ์—ญ๋งํฌ๋Š” ์ƒํ˜ธ์—ฌ์•ผ ํ•ด์š” |
168
+
169
+ ์˜ˆ์‹œ(`docs/specs/shopping/์žฅ๋ฐ”๊ตฌ๋‹ˆ.md`):
170
+
171
+ ````markdown
172
+ # ์žฅ๋ฐ”๊ตฌ๋‹ˆ
173
+ <!-- ../index.md๋ฅผ ๋จผ์ € ์ฝ๋Š”๋‹ค. ์ด ๋ฌธ์„œ๋ฅผ ๋ฐ”๊พผ ๋’ค ../log.md์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค -->
174
+
175
+ ## ๋ชฉ์ 
176
+ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ์„ ๋‹ด๊ณ  ์ˆ˜๋Ÿ‰์„ ๋ฐ”๊พธ๊ณ  ๋น„์šธ ๋•Œ๊นŒ์ง€์˜ ํ๋ฆ„์„ ๋งก๋Š”๋‹ค. ์ฟ ํฐ ์ ์šฉ์€ [์ฟ ํฐ ํ• ์ธ](์ฟ ํฐ-ํ• ์ธ.md)์ด ๋งก๋Š”๋‹ค.
177
+
178
+ ## ํ˜„์žฌ ๋™์ž‘
179
+ - ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ์ƒํ’ˆ์„ ๋‹ค์‹œ ๋‹ด์œผ๋ฉด ์•ฑ์€ ์ˆ˜๋Ÿ‰์„ ๋”ํ•œ๋‹ค.
180
+ - ์ˆ˜๋Ÿ‰์ด 99๋ฅผ ๋„˜์œผ๋ฉด ์•ฑ์€ "์ตœ๋Œ€ 99๊ฐœ๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." ์•ˆ๋‚ด๋ฅผ ๋ณด์ด๊ณ  ๋‹ด์ง€ ์•Š๋Š”๋‹ค.
181
+
182
+ ## ํ๋ฆ„
183
+ ```mermaid
184
+ flowchart TD
185
+ A["์ƒํ’ˆ ๋‹ด๊ธฐ"] --> B{"๊ฐ™์€ ์ƒํ’ˆ์ด ์žˆ๋‚˜"}
186
+ B -->|์˜ˆ| C["์ˆ˜๋Ÿ‰ ํ•ฉ์‚ฐ"]
187
+ B -->|์•„๋‹ˆ์˜ค| D["์ƒˆ ์ค„ ์ถ”๊ฐ€"]
188
+ C --> E{"99 ์ดˆ๊ณผ"}
189
+ E -->|์˜ˆ| F["์•ˆ๋‚ด ํ›„ ๋‹ด์ง€ ์•Š์Œ"]
190
+ ```
191
+
192
+ ## ์ •์ฑ…
193
+ ### ์ˆ˜๋Ÿ‰ ์ƒํ•œ
194
+ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํ•œ ์ค„์˜ ์ˆ˜๋Ÿ‰์€ 99 ์ดํ•˜๋‹ค.
195
+
196
+ ### ์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก
197
+ ์ง€๊ธˆ์€ ํ•ฉ๊ณ„๊ฐ€ 10,000์› ๋ฏธ๋งŒ์ด๋ฉด ๊ฒฐ์ œ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค.
198
+ [ํ™•์ธ ํ•„์š”] 10,000์›์ด๋ผ๋Š” ๊ธฐ์ค€์˜ ๊ทผ๊ฑฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
199
+
200
+ ## ๊ทผ๊ฑฐ
201
+ - `src/cart/cart.ts:12-48` โ€” ๋‹ด๊ธฐ์™€ ์ˆ˜๋Ÿ‰ ํ•ฉ์‚ฐ
202
+ - `test/cart/cart.test.ts` โ€” ์ˆ˜๋Ÿ‰ ์ƒํ•œ
203
+
204
+ ## ํ™•์ธ ํ•„์š” ์‚ฌํ•ญ
205
+ - [ํ™•์ธ ํ•„์š”] [์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก](#์ตœ์†Œ-์ฃผ๋ฌธ-๊ธˆ์•ก) โ€” 10,000์›์ด๋ผ๋Š” ๊ธฐ์ค€์˜ ๊ทผ๊ฑฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
206
+
207
+ ## ๊ด€๋ จ ๋ฌธ์„œ
208
+ - [์‡ผํ•‘ ๊ฐœ์š”](overview.md)
209
+ - [์ฟ ํฐ ํ• ์ธ](์ฟ ํฐ-ํ• ์ธ.md)
210
+ ````
211
+
212
+ ๋ฌธ์„œ ๋ณธ๋ฌธ์€ ๊ฐ„๊ฒฐํ•œ `-ํ•œ๋‹ค`์ฒด๋กœ ์จ์š”. ๊ฐœ์š”์˜ `## ์šฉ์–ด`๋Š” ๋ณ„์นญ์„ ์†Œ์œ  ์ •์ฑ…์œผ๋กœ ์ž‡๋Š” ๋งํฌ ๋ชฉ๋ก์ด์—์š”(`- ์ •์•ก๊ถŒ(์ •์•ก์ œ) โ€” [์ •์•ก๊ถŒ ์ด์šฉ ์ค‘ ํŒ์ •](์ •์•ก๊ถŒ.md#์ •์•ก๊ถŒ-์ด์šฉ-์ค‘-ํŒ์ •)`). ์ •์˜๋งŒ ์žˆ๋Š” ์šฉ์–ด๋Š” ์—ฌ๊ธฐ์„œ ๋๋‚˜๊ณ , ์—ฌ๋Ÿฌ ํ๋ฆ„์ด ๋ถ„๊ธฐ ์ถ•์œผ๋กœ ์“ฐ๋Š” ๊ฐœ๋…(์ฑ„๋„, ์žฌํ™”, ํšŒ์› ์ƒํƒœ)๋งŒ `concepts/`์— ์†Œ์œ  ๋ฌธ์„œ๋ฅผ ๋‘ฌ์š”.
213
+
214
+ ## ๋ช…๋ น
215
+
216
+ ```bash
217
+ npx crumbs-spec init [--spec-dir <dir>] [--lang <en|ko>] [--skills <claude|codex|all>]
218
+ npx crumbs-spec check [--format text|json] [--config <path>]
219
+ npx crumbs-spec log add --kind <ingest|query|lint|drift|change|decision> "<์ œ๋ชฉ>" [--body "<๋ณธ๋ฌธ>"]
220
+ ```
221
+
222
+ ๊ณตํ†ต ์˜ต์…˜์€ `--root <dir>`(์ €์žฅ์†Œ ๋ฃจํŠธ, ๊ธฐ๋ณธ๊ฐ’์€ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ), `--lang <en|ko>`(init์ด ์“ธ ์–ธ์–ด, ์„ค์ •์„ ์ฝ๊ธฐ ์ „ ์˜ค๋ฅ˜์˜ ์–ธ์–ด, ๊ธฐ๋ณธ๊ฐ’ `en`), `-h`/`--help`, `-v`/`--version`์ด์—์š”. ์„ค์ •์€ ์ €์žฅ์†Œ ๋ฃจํŠธ์˜ `crumbs.json`์— ๋‘ฌ์š”(`specDir`, `index`, `overview`, `log`, `lang`, `headings`, `exclude`, `codeRoot`, `rawDir`).
223
+
224
+ `check`์˜ ์ถœ๋ ฅ์€ `ํŒŒ์ผ:์ค„ ์‹ฌ๊ฐ๋„ ๊ทœ์น™: ๋ฉ”์‹œ์ง€` ํ•œ ์ค„์”ฉ์ด๊ณ  ๋งˆ์ง€๋ง‰ ์ค„์ด ์š”์•ฝ์ด์—์š”.
225
+
226
+ ```
227
+ docs/specs/shopping/์žฅ๋ฐ”๊ตฌ๋‹ˆ.md:34 error broken-anchor: ์•ต์ปค๊ฐ€ ์—†์Œ: ์ฟ ํฐ-ํ• ์ธ.md#์ ์šฉ-์ˆœ์„œ
228
+ docs/specs/shopping/์žฅ๋ฐ”๊ตฌ๋‹ˆ.md:20 warning open-question: ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ ํ‘œ์‹œ 2๊ฐœ
229
+
230
+ crumbs check: ๋ฌธ์„œ 4๊ฐœ, ์˜ค๋ฅ˜ 1๊ฐœ, ๊ฒฝ๊ณ  1๊ฐœ
231
+ ```
232
+
233
+ ### ๊ฒ€์‚ฌ ๊ทœ์น™
234
+
235
+ | ๊ทœ์น™ | ์‹ฌ๊ฐ๋„ | ์žก๋Š” ๊ฒƒ |
236
+ |---|---|---|
237
+ | `index-missing` | ์˜ค๋ฅ˜ | ์ธ๋ฑ์Šค ๋ฌธ์„œ๊ฐ€ ์—†์–ด์š”(๋‹ค๋ฅธ ๊ทœ์น™์€ ๋Œ์ง€ ์•Š์•„์š”) |
238
+ | `missing-title` | ์˜ค๋ฅ˜ | ์ฒซ ์ œ๋ชฉ์ด H1์ด ์•„๋‹ˆ์—์š” |
239
+ | `broken-link` / `broken-anchor` | ์˜ค๋ฅ˜ | ๋งํฌ ๋Œ€์ƒ ํŒŒ์ผยท์ œ๋ชฉ์ด ์—†์–ด์š” |
240
+ | `unreachable` | ์˜ค๋ฅ˜ | ์ธ๋ฑ์Šค์—์„œ ๋งํฌ๋กœ ๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ๋ฌธ์„œ์˜ˆ์š” |
241
+ | `missing-section` | ์˜ค๋ฅ˜ | ์—ญํ• ๋ณ„ ํ•„์ˆ˜ ์ ˆ์ด ์—†์–ด์š” |
242
+ | `missing-backlink` | ์˜ค๋ฅ˜ | ๋ถ€๋ชจ(๊ฐœ์š”ยท์ธ๋ฑ์Šค)๋กœ ๋Œ์•„๊ฐ€๋Š” ๋งํฌ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์ƒ์„ธ Aโ†’B ๋งํฌ์— Bโ†’A๊ฐ€ ์—†์–ด์š” |
243
+ | `missing-code-path` | ์˜ค๋ฅ˜ | ๊ทผ๊ฑฐ์˜ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„์š” |
244
+ | `duplicate-policy` | ์˜ค๋ฅ˜ | ๊ฐ™์€ ์ •์ฑ… ์ด๋ฆ„์ด ๋‘ ๋ฌธ์„œ์— ์žˆ์–ด์š” |
245
+ | `log-format` | ์˜ค๋ฅ˜ | ๋กœ๊ทธ ํ•ญ๋ชฉ์ด `## [YYYY-MM-DD] kind \| ์ œ๋ชฉ` ํ˜•์‹์ด ์•„๋‹ˆ์—์š” |
246
+ | `open-question` | ๊ฒฝ๊ณ  | ๋ฌธ์„œ์˜ `[ํ™•์ธ ํ•„์š”]` ์ˆ˜์˜ˆ์š” |
247
+ | `log-order` | ๊ฒฝ๊ณ  | ๋กœ๊ทธ ๋‚ ์งœ๊ฐ€ ์—ญ์ˆœ์ด์—์š” |
248
+ | `missing-flow` | ๊ฒฝ๊ณ  | ํ˜„์žฌ ๋™์ž‘์ด 6๋‹จ๊ณ„ ์ด์ƒ์ธ๋ฐ ๋„์‹๋„ ํ‘œ๋„ ์—†์–ด์š” |
249
+ | `section-order` | ๊ฒฝ๊ณ  | ์ ˆ ์ˆœ์„œ๊ฐ€ ํ…œํ”Œ๋ฆฟ๊ณผ ๋‹ฌ๋ผ์š” |
250
+ | `log-body` | ๊ฒฝ๊ณ  | `decision` ํ•ญ๋ชฉ์— ๋ฌธ์„œ ๋งํฌ๊ฐ€ ์—†์–ด์š” |
251
+
252
+ ## ๋กœ๊ทธ
253
+
254
+ ๋กœ๊ทธ๋Š” ํ•œ ๊ณณ(`docs/specs/log.md`)์— ์‹œ๊ฐ„์ˆœ์œผ๋กœ ๋ง๋ถ™์—ฌ์š”. ์ œ๋ชฉ์€ ์ž‘์—…๋ช…์ด ์•„๋‹ˆ๋ผ **์‚ฌ์šฉ์ž ๊ฒฐ๊ณผ ํ•œ ๋ฌธ์žฅ**์ด๊ณ , ๋ณธ๋ฌธ์€ ์„ธ ์ค„์ด์—์š”.
255
+
256
+ ```bash
257
+ npx crumbs-spec log add --kind change "์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ˆ˜๋Ÿ‰ ์ƒํ•œ์„ 99๋กœ ์˜ฌ๋ฆผ" \
258
+ --body "๊ฒฐ๊ณผ: ํ•œ ์ค„์— 99๊ฐœ๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. ์ด์œ : ์š”์ฒญ SHOP-42. ๋ฌธ์„œ: [์ˆ˜๋Ÿ‰ ์ƒํ•œ](shopping/์žฅ๋ฐ”๊ตฌ๋‹ˆ.md#์ˆ˜๋Ÿ‰-์ƒํ•œ)"
259
+ ```
260
+
261
+ `[ํ™•์ธ ํ•„์š”]` ์งˆ๋ฌธ์ด ๋‹ต์„ ์–ป์œผ๋ฉด `decision` ํ•ญ๋ชฉ์„ ๋‚จ๊ธฐ๊ณ , ํ™•์ •ํ•œ ์ •์ฑ… ๋ณธ๋ฌธ ๋์— ๊ฒฐ์ • ๋งํฌ ํ•˜๋‚˜๋ฅผ ๋‘ฌ์š”. ๋ฌธ์„œ ์•ˆ์— ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๋‘์ง€ ์•Š๋Š” ๋Œ€์‹  ๊ฒฐ์ •์€ ๋กœ๊ทธ์— ์Œ“์ด๊ณ  ๋ฌธ์„œ๋Š” ๋งํฌ๋กœ๋งŒ ๊ฐ€๋ฆฌ์ผœ์š”.
262
+
263
+ ```markdown
264
+ ## [2026-11-02] decision | ์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก: 10,000์›์€ ๋ฐฐ์†ก๋น„ ์ •์ฑ…์—์„œ ์˜จ ๊ฐ’์ด๋‹ค
265
+ ๊ฒฐ๊ณผ: ํ•ฉ๊ณ„ 10,000์› ๋ฏธ๋งŒ์ด๋ฉด ๊ฒฐ์ œ ๋ฒ„ํŠผ์ด ๋น„ํ™œ์„ฑ์ด๋‹ค. ์ด์œ : 2026-11-02 ๊ธฐํš ํ™•์ธ. ๋ฌธ์„œ: [์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก](shopping/์žฅ๋ฐ”๊ตฌ๋‹ˆ.md#์ตœ์†Œ-์ฃผ๋ฌธ-๊ธˆ์•ก)
266
+ ```
267
+
268
+ ```markdown
269
+ ### ์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก
270
+ ํ•ฉ๊ณ„๊ฐ€ 10,000์› ๋ฏธ๋งŒ์ด๋ฉด ๊ฒฐ์ œ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค. (๊ฒฐ์ •: [2026-11-02](../log.md#2026-11-02-decision-์ตœ์†Œ-์ฃผ๋ฌธ-๊ธˆ์•ก-10000์›์€-๋ฐฐ์†ก๋น„-์ •์ฑ…์—์„œ-์˜จ-๊ฐ’์ด๋‹ค))
271
+ ```
272
+
273
+ kind๋Š” `ingest`(์›๋ณธ ์ž๋ฃŒ ๋ฐ˜์˜), `query`(๋‹ต์„ ์ฐพ์•„ ํ™˜๋ฅ˜), `lint`, `drift`, `change`(๋ฌธ์„œ ๋ณ€๊ฒฝ), `decision`(์งˆ๋ฌธ ํ™•์ •)์ด์—์š”.
274
+
275
+ ## ์Šคํ‚ฌ
276
+
277
+ `init --skills`๋Š” ์—์ด์ „ํŠธ๊ฐ€ crumbs ๋ฌธ์„œ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ ˆ์ฐจ๋ฅผ `.claude/skills/<์ด๋ฆ„>/SKILL.md`(Claude Code)์™€ `.agents/skills/<์ด๋ฆ„>/SKILL.md`(Codex)์— ์„ค์น˜ํ•ด์š”. ๊ธฐ์กด `SKILL.md`๋Š” ๋ฎ์–ด์“ฐ์ง€ ์•Š์œผ๋‹ˆ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด์š”. Claude Code๋Š” `CLAUDE.md`์— `@AGENTS.md`๊ฐ€ ์žˆ์–ด์•ผ crumbs ๋ธ”๋ก์˜ ๊ทœ์น™์„ ์ฝ์–ด์š”.
278
+
279
+ | ์Šคํ‚ฌ | ํ•˜๋Š” ์ผ |
280
+ |---|---|
281
+ | `crumbs-writer` | ๋ฌธ์„œ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•ด์š”. "๋ณ€๊ฒฝ ๋ฐ˜์˜"(๋ฐ”๋€ ์ฝ”๋“œ โ†’ ์†Œ์œ  ๋ฌธ์„œ)๊ณผ "๊ธฐ์กด ์ฝ”๋“œ ๋ฌธ์„œํ™”"(์ฝ”๋“œยทํ…Œ์ŠคํŠธ๋งŒ์œผ๋กœ ์ฒ˜์Œ ์“ฐ๊ธฐ) ๋‘ ๋ชจ๋“œ. ์ฑ…์ž„ ๋‹จ์œ„, ๋ฌธ์ฒด, ์งˆ๋ฌธ ํ˜•์‹, ํ๋ฆ„ ๋„์‹, ๊ฐœ๋… ํŽ˜์ด์ง€ ๊ธฐ์ค€์„ ๋‹ด๊ณ  ์žˆ์–ด์š” |
282
+ | `crumbs-finder` | ์ธ๋ฑ์Šค โ†’ ๊ฐœ์š” โ†’ ์ƒ์„ธ ์ˆœ์œผ๋กœ ๋‹ต์„ ์ฐพ์•„ ์ถœ์ฒ˜์™€ ํ•จ๊ป˜ ๋‹ตํ•˜๊ณ , ์ข‹์€ ๋‹ต์€ `query` ๋กœ๊ทธ๋กœ ํ™˜๋ฅ˜ํ•ด์š” |
283
+ | `crumbs-interview` | ์š”์ฒญ์ด ๊ฑด๋“œ๋ฆฌ๋Š” ์ •์ฑ… ์ค‘ ๋ฏธํ™•์ธ์ธ ๊ฒƒ์„ ์งˆ๋ฌธ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋ฉˆ์ถฐ์š” |
284
+ | `crumbs-ingest` | `docs/raw/`์˜ ์ƒˆ ์ž๋ฃŒ๋ฅผ ์ฝ๊ณ  ์˜ํ–ฅ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„ ํ™•์ธ๋ฐ›์€ ๋’ค ๋ฐ˜์˜ํ•˜๊ณ  `ingest` ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์š” |
285
+
286
+ ## ์‚ฌ์šฉ ์˜ˆ์‹œ
287
+
288
+ ### 1. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋ฌธ์„œํ™”ํ•ด์š”
289
+
290
+ ```
291
+ src/cart/ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ crumbs-writer์˜ "๊ธฐ์กด ์ฝ”๋“œ ๋ฌธ์„œํ™”" ๋ชจ๋“œ๋กœ ๋ฌธ์„œํ™”ํ•ด ์ค˜.
292
+ ๋„๋ฉ”์ธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” docs/specs/shopping/์ด๊ณ , ํ™•์ธํ•˜์ง€ ๋ชปํ•œ ์ •์ฑ…์€ ์งˆ๋ฌธ์œผ๋กœ ๋‚จ๊ธฐ๊ณ  ๋๊นŒ์ง€ ํ•ด ์ค˜.
293
+ ```
294
+
295
+ ์—์ด์ „ํŠธ๋Š” ์ธ๋ฑ์Šค์™€ ํ…œํ”Œ๋ฆฟ์„ ์ฝ๊ณ , ์ง„์ž…์ ๋ถ€ํ„ฐ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ `shopping/overview.md`์™€ ์ƒ์„ธ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด์š”. ํ…Œ์ŠคํŠธ๊ฐ€ ํ™•์ •ํ•˜๋Š” ๊ทœ์น™์€ ์ •์ฑ…์œผ๋กœ, ์ฝ”๋“œ์—๋งŒ ์žˆ๋Š” ๊ทœ์น™์€ "์ง€๊ธˆ์€ โ€ฆ" ์„œ์ˆ ๊ณผ `[ํ™•์ธ ํ•„์š”]` ์งˆ๋ฌธ์œผ๋กœ ์ ์–ด์š”. ๋์— `check`๋ฅผ ๋Œ๋ ค ์˜ค๋ฅ˜๋ฅผ ์—†์• ๊ณ  ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์š”.
296
+
297
+ ```
298
+ crumbs check: ๋ฌธ์„œ 5๊ฐœ, ์˜ค๋ฅ˜ 0๊ฐœ, ๊ฒฝ๊ณ  3๊ฐœ
299
+ ```
300
+
301
+ ๊ฒฝ๊ณ ๋Š” ๋‚จ๊ธด ์งˆ๋ฌธ์˜ ์ˆ˜์˜ˆ์š”. `ํ™•์ธ ํ•„์š” ์‚ฌํ•ญ` ์ ˆ๋งŒ ํ›‘์–ด๋„ ๋ฌด์—‡์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.
302
+
303
+ ### 2. ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๋ฌธ์„œ์— ๋ฐ˜์˜ํ•ด์š”
304
+
305
+ ```
306
+ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ˆ˜๋Ÿ‰ ์ƒํ•œ์„ 99์—์„œ 199๋กœ ์˜ฌ๋ ธ์–ด. ๋ฌธ์„œ๋„ ๋งž์ถฐ ์ค˜.
307
+ ```
308
+
309
+ writer๋Š” `grep -rl 'src/cart/cart.ts' docs/specs`๋กœ ๊ทผ๊ฑฐ์— ๊ทธ ๊ฒฝ๋กœ๋ฅผ ์ ์€ ์†Œ์œ  ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ , "ํ˜„์žฌ ๋™์ž‘"๊ณผ `### ์ˆ˜๋Ÿ‰ ์ƒํ•œ` ๋ณธ๋ฌธ์„ ๊ณ ์น˜๊ณ , ํ๋ฆ„ ๋„์‹์˜ ๊ฐ’์„ ๋งž์ถ”๊ณ , ๋กœ๊ทธ์— `change | ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ˆ˜๋Ÿ‰ ์ƒํ•œ์„ 199๋กœ ์˜ฌ๋ฆผ`์„ ๋‚จ๊ฒจ์š”. ์†Œ์œ  ๋ฌธ์„œ๊ฐ€ ๋‘˜๋กœ ๋ณด์ด๋ฉด ๋ฉˆ์ถ”๊ณ  ์–ด๋А ์ชฝ์ด ์†Œ์œ ์ž์ธ์ง€ ๋ฌผ์–ด์š”.
310
+
311
+ ### 3. ๋ชจ๋ฅด๋Š” ์ •์ฑ…์€ ๋ฌป๊ณ , ๋‹ต์€ ๊ฒฐ์ •์œผ๋กœ ๋‚จ๊ฒจ์š”
312
+
313
+ ```
314
+ ์ฟ ํฐ ์ค‘๋ณต ์ ์šฉ ๊ทœ์น™์„ ๋ฐ”๊พธ๋ ค๊ณ  ํ•ด. ๋จผ์ € ๋ญ˜ ํ™•์ธํ•ด์•ผ ํ•˜์ง€?
315
+ ```
316
+
317
+ interview๊ฐ€ ์š”์ฒญ์ด ๊ฑด๋“œ๋ฆฌ๋Š” ์ •์ฑ…์„ ๋‚˜์—ดํ•˜๊ณ , ์ฝ”๋“œยทํ…Œ์ŠคํŠธยท์›๋ณธ์œผ๋กœ ํ™•์ธ๋œ ๊ฒƒ๊ณผ ๋ฏธํ™•์ธ์ธ ๊ฒƒ์„ ๊ฐ€๋ฅธ ๋’ค ๋ฏธํ™•์ธ ์ •์ฑ…์„ ์งˆ๋ฌธ์œผ๋กœ ๋‚ด์š”. ๋‹ตํ•˜์‹œ๋ฉด writer๊ฐ€ ์ •์ฑ…์„ ํ™•์ • ์„œ์ˆ ๋กœ ๋ฐ”๊พธ๊ณ  `decision` ๋กœ๊ทธ์™€ ๊ฒฐ์ • ๋งํฌ๋ฅผ ๋‚จ๊ฒจ์š”.
318
+
319
+ ### 4. ์›๋ณธ ์ž๋ฃŒ๋ฅผ ๋ฐ˜์˜ํ•ด์š”
320
+
321
+ ```
322
+ docs/raw/coupon-policy-v3.pdf๋ฅผ ๋ฐ˜์˜ํ•ด ์ค˜.
323
+ ```
324
+
325
+ ingest๊ฐ€ ์ž๋ฃŒ๋ฅผ ์ฝ๊ณ  ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์Šคยท์—ญ๋งํฌยท๊ทผ๊ฑฐ๋กœ ์ฐพ์•„ "๋ฐ”๊ฟ€ ๋‚ด์šฉ ๋ชฉ๋ก"์„ ๋จผ์ € ๋ณด์—ฌ ์ค˜์š”. ํ™•์ธ์„ ๋ฐ›์€ ๋’ค์—๋งŒ ์†Œ์œ  ๋ฌธ์„œ๋ฅผ ๊ณ ์น˜๊ณ  `ingest` ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์š”. ์ž๋™ ๋ณ‘ํ•ฉ์€ ํ•˜์ง€ ์•Š์•„์š”.
326
+
327
+ ### 5. ๋‹ต์„ ์ฐพ์•„์š”
328
+
329
+ ```
330
+ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋ช‡ ๊ฐœ๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด?
331
+ ```
332
+
333
+ finder๋Š” ์ธ๋ฑ์Šค โ†’ ์‡ผํ•‘ ๊ฐœ์š” โ†’ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฌธ์„œ ์ˆœ์œผ๋กœ ๋‚ด๋ ค๊ฐ€ `### ์ˆ˜๋Ÿ‰ ์ƒํ•œ`์„ ์ถœ์ฒ˜๋กœ ๋‹ตํ•ด์š”. ์šฉ์–ดยท๊ฐœ๋… ์งˆ๋ฌธ์ด๋ฉด `concepts/overview.md`์˜ ์šฉ์–ด ์ ˆ์„ ๋จผ์ € ๋ด์š”. ๋ฌธ์„œ์— ๋‹ต์ด ์—†์œผ๋ฉด "๋ฌธ์„œ์— ์—†์Œ"๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ๊ฐ„ ๋ฌธ์„œ๋ฅผ ๋งํ•ด์š”.
334
+
335
+ ### 6. CI์—์„œ ๊ฒ€์‚ฌํ•ด์š”
336
+
337
+ ```yaml
338
+ - run: npx crumbs-spec check --format json > crumbs-report.json
339
+ ```
340
+
341
+ ์ข…๋ฃŒ ์ฝ”๋“œ 1์ด๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด์š”. ๊ฒฝ๊ณ (`open-question`, `missing-flow` ๋“ฑ)๋Š” ์‹คํŒจ์‹œํ‚ค์ง€ ์•Š์•„์š”.
342
+
343
+ ## ์ข…๋ฃŒ ์ฝ”๋“œ
344
+
345
+ | ์ฝ”๋“œ | ์˜๋ฏธ |
346
+ |---|---|
347
+ | 0 | `check`: ์˜ค๋ฅ˜๊ฐ€ ์—†์–ด์š”(๊ฒฝ๊ณ ๋Š” ํ—ˆ์šฉ). `init`ยท`log add`: ์™„๋ฃŒ |
348
+ | 1 | `check`: ์˜ค๋ฅ˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์š” |
349
+ | 2 | ์‚ฌ์šฉ๋ฒ• ์˜ค๋ฅ˜, ์„ค์ • ์˜ค๋ฅ˜, ์˜ˆ๊ธฐ์น˜ ์•Š์€ I/O ์˜ค๋ฅ˜ |
350
+
351
+ ## ์„ค๊ณ„์—์„œ ๋บ€ ๊ฒƒ
352
+
353
+ - ์š”๊ตฌ์‚ฌํ•ญ ID, front matter, EARS ๊ฐ™์€ ๋ฌธ๋ฒ• ๊ฐ•์ œ. ํƒ์ƒ‰ ์ •๋ณด๋Š” ๋งํฌ์™€ ์ œ๋ชฉ์—๋งŒ ๋‘ฌ์š”.
354
+ - ๋ฌธ์„œ ์•ˆ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ ํ‘œ์™€ ๊ฒฐ์ •๋งˆ๋‹ค ๋ณ„๋„ ํŒŒ์ผ. ๊ฒฐ์ •์€ ๋กœ๊ทธ ํ•œ ๊ณณ์— ์Œ“๊ณ  ๋ฌธ์„œ๋Š” ๋งํฌ๋กœ ๊ฐ€๋ฆฌ์ผœ์š”.
355
+ - ์ •์˜๋งŒ ์žˆ๋Š” ์šฉ์–ด ํŽ˜์ด์ง€. ๊ฐœ์š”์˜ ์šฉ์–ด ์ ˆ๋กœ ์ถฉ๋ถ„ํ•ด์š”.
356
+ - `check`์˜ ๋ฌธ์ฒดยท๋‚ด์šฉ ํŒ์ •. ๋ฌธ์ฒด๋Š” ์Šคํ‚ฌ ์ง€์นจ๊ณผ [docs/lint/](docs/lint/README.md)์˜ markdownlint ์„ค์ • ์ƒ˜ํ”Œ์ด ๋งก์•„์š”.
357
+
358
+ ## ๋กœ๋“œ๋งต
359
+
360
+ | ๋‹จ๊ณ„ | ๋‚ด์šฉ | ์ƒํƒœ |
361
+ |---|---|---|
362
+ | 1 | `init`, `check`, ํ…œํ”Œ๋ฆฟ, AGENTS ๋ธ”๋ก | ์™„๋ฃŒ |
363
+ | 2 | ์Šคํ‚ฌ 4์ข…, `log add`, ํ๋ฆ„ ์ ˆ, ์ฑ…์ž„ ๋‹จ์œ„ ๊ธฐ์ค€, ์šฉ์–ดยท๊ฐœ๋… ํŽ˜์ด์ง€, ๊ฒฐ์ • ๋กœ๊ทธ | ์™„๋ฃŒ |
364
+ | 3 | `crumbs reverse <path>` โ€” ์ฝ”๋“œ์—์„œ ์ดˆ์•ˆ ์ƒ์„ฑ ๋ช…๋ น(์ง€๊ธˆ์€ writer ์Šคํ‚ฌ์ด ๋Œ€์‹ ํ•ด์š”) | ์˜ˆ์ • |
365
+ | 4 | `crumbs drift --base <ref>` โ€” diff๋กœ ๊ทผ๊ฑฐ๊ฐ€ ๋ฐ”๋€ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„์š” | ์˜ˆ์ • |
366
+ | 5 | ์˜ˆ์ œ ์•ฑ๊ณผ ํƒ์ƒ‰ ๋น„์šฉ ๋ฒค์น˜๋งˆํฌ ๋Ÿฌ๋„ˆ | ์˜ˆ์ • |