@tienne/gestalt 0.14.1 → 0.15.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 (97) hide show
  1. package/README.ko.md +8 -0
  2. package/README.md +8 -0
  3. package/dist/package.json +1 -1
  4. package/dist/role-agents/harness-architect/AGENT.md +210 -0
  5. package/dist/role-agents/technical-writer/AGENT.md +46 -0
  6. package/dist/role-agents/technical-writer/references/ai-tell-quick-rules.md +134 -0
  7. package/dist/skills/agent/SKILL.md +2 -0
  8. package/package.json +1 -1
  9. package/role-agents/harness-architect/AGENT.md +210 -0
  10. package/role-agents/technical-writer/AGENT.md +46 -0
  11. package/role-agents/technical-writer/references/ai-tell-quick-rules.md +134 -0
  12. package/skills/agent/SKILL.md +2 -0
  13. package/dist/skills/seed/SKILL.md +0 -92
  14. package/dist/src/cli/commands/seed.d.ts +0 -4
  15. package/dist/src/cli/commands/seed.d.ts.map +0 -1
  16. package/dist/src/cli/commands/seed.js +0 -34
  17. package/dist/src/cli/commands/seed.js.map +0 -1
  18. package/dist/src/interview/ambiguity.d.ts +0 -8
  19. package/dist/src/interview/ambiguity.d.ts.map +0 -1
  20. package/dist/src/interview/ambiguity.js +0 -69
  21. package/dist/src/interview/ambiguity.js.map +0 -1
  22. package/dist/src/mcp/tools/seed-passthrough.d.ts +0 -5
  23. package/dist/src/mcp/tools/seed-passthrough.d.ts.map +0 -1
  24. package/dist/src/mcp/tools/seed-passthrough.js +0 -29
  25. package/dist/src/mcp/tools/seed-passthrough.js.map +0 -1
  26. package/dist/src/mcp/tools/seed.d.ts +0 -5
  27. package/dist/src/mcp/tools/seed.d.ts.map +0 -1
  28. package/dist/src/mcp/tools/seed.js +0 -19
  29. package/dist/src/mcp/tools/seed.js.map +0 -1
  30. package/dist/src/recording/agg-converter.d.ts +0 -25
  31. package/dist/src/recording/agg-converter.d.ts.map +0 -1
  32. package/dist/src/recording/agg-converter.js +0 -80
  33. package/dist/src/recording/agg-converter.js.map +0 -1
  34. package/dist/src/recording/agg-installer.d.ts +0 -6
  35. package/dist/src/recording/agg-installer.d.ts.map +0 -1
  36. package/dist/src/recording/agg-installer.js +0 -50
  37. package/dist/src/recording/agg-installer.js.map +0 -1
  38. package/dist/src/recording/asciinema-installer.d.ts +0 -6
  39. package/dist/src/recording/asciinema-installer.d.ts.map +0 -1
  40. package/dist/src/recording/asciinema-installer.js +0 -50
  41. package/dist/src/recording/asciinema-installer.js.map +0 -1
  42. package/dist/src/recording/asciinema-recorder.d.ts +0 -26
  43. package/dist/src/recording/asciinema-recorder.d.ts.map +0 -1
  44. package/dist/src/recording/asciinema-recorder.js +0 -52
  45. package/dist/src/recording/asciinema-recorder.js.map +0 -1
  46. package/dist/src/recording/cast-generator.d.ts +0 -7
  47. package/dist/src/recording/cast-generator.d.ts.map +0 -1
  48. package/dist/src/recording/cast-generator.js +0 -97
  49. package/dist/src/recording/cast-generator.js.map +0 -1
  50. package/dist/src/recording/filename-generator.d.ts +0 -19
  51. package/dist/src/recording/filename-generator.d.ts.map +0 -1
  52. package/dist/src/recording/filename-generator.js +0 -67
  53. package/dist/src/recording/filename-generator.js.map +0 -1
  54. package/dist/src/recording/gif-generator.d.ts +0 -21
  55. package/dist/src/recording/gif-generator.d.ts.map +0 -1
  56. package/dist/src/recording/gif-generator.js +0 -121
  57. package/dist/src/recording/gif-generator.js.map +0 -1
  58. package/dist/src/recording/recording-dir.d.ts +0 -5
  59. package/dist/src/recording/recording-dir.d.ts.map +0 -1
  60. package/dist/src/recording/recording-dir.js +0 -13
  61. package/dist/src/recording/recording-dir.js.map +0 -1
  62. package/dist/src/recording/recording-orchestrator.d.ts +0 -50
  63. package/dist/src/recording/recording-orchestrator.d.ts.map +0 -1
  64. package/dist/src/recording/recording-orchestrator.js +0 -98
  65. package/dist/src/recording/recording-orchestrator.js.map +0 -1
  66. package/dist/src/recording/resume-detector.d.ts +0 -10
  67. package/dist/src/recording/resume-detector.d.ts.map +0 -1
  68. package/dist/src/recording/resume-detector.js +0 -14
  69. package/dist/src/recording/resume-detector.js.map +0 -1
  70. package/dist/src/recording/segment-merger.d.ts +0 -27
  71. package/dist/src/recording/segment-merger.d.ts.map +0 -1
  72. package/dist/src/recording/segment-merger.js +0 -65
  73. package/dist/src/recording/segment-merger.js.map +0 -1
  74. package/dist/src/recording/terminal-recorder.d.ts +0 -31
  75. package/dist/src/recording/terminal-recorder.d.ts.map +0 -1
  76. package/dist/src/recording/terminal-recorder.js +0 -111
  77. package/dist/src/recording/terminal-recorder.js.map +0 -1
  78. package/dist/src/scripts/postinstall.d.ts +0 -2
  79. package/dist/src/scripts/postinstall.d.ts.map +0 -1
  80. package/dist/src/scripts/postinstall.js +0 -29
  81. package/dist/src/scripts/postinstall.js.map +0 -1
  82. package/dist/src/seed/extractor.d.ts +0 -15
  83. package/dist/src/seed/extractor.d.ts.map +0 -1
  84. package/dist/src/seed/extractor.js +0 -88
  85. package/dist/src/seed/extractor.js.map +0 -1
  86. package/dist/src/seed/generator.d.ts +0 -12
  87. package/dist/src/seed/generator.d.ts.map +0 -1
  88. package/dist/src/seed/generator.js +0 -66
  89. package/dist/src/seed/generator.js.map +0 -1
  90. package/dist/src/seed/passthrough-generator.d.ts +0 -31
  91. package/dist/src/seed/passthrough-generator.d.ts.map +0 -1
  92. package/dist/src/seed/passthrough-generator.js +0 -80
  93. package/dist/src/seed/passthrough-generator.js.map +0 -1
  94. package/dist/src/seed/schema.d.ts +0 -145
  95. package/dist/src/seed/schema.d.ts.map +0 -1
  96. package/dist/src/seed/schema.js +0 -37
  97. package/dist/src/seed/schema.js.map +0 -1
@@ -0,0 +1,210 @@
1
+ ---
2
+ name: harness-architect
3
+ tier: frontier
4
+ pipeline: execute
5
+ role: true
6
+ domain: ["harness", "agent-design", "skill-design", "claude-code", "pipeline-design", "orchestration", "multi-agent", "automation", "agent-pipeline", "workflow"]
7
+ description: "Claude Code ķ•˜ė„¤ģŠ¤ 설계 전문가. ģš”źµ¬ģ‚¬ķ•­ģ„ ė¶„ģ„ķ•“ ģ—ģ“ģ „ķŠøĀ·ģŠ¤ķ‚¬Ā·ģ»¤ė§Øė“œ ķŒŒģ¼ 구씰넼 ģ„¤ź³„ķ•˜ź³  .claude/ 디렉토리 ģ‚°ģ¶œė¬¼ģ„ 직접 ģž‘ģ„±ķ•œė‹¤."
8
+ ---
9
+
10
+ You are the Harness Architect role agent.
11
+
12
+ Your expertise is designing and implementing Claude Code multi-agent harnesses — the `.claude/` directory structure that turns a project into a collaborative AI pipeline. You understand when to use agents vs skills vs commands, how to decompose work into pipeline stages, and how to write each artifact file correctly.
13
+
14
+ ## Scope Boundary
15
+
16
+ This agent covers **Claude Code harness design**:
17
+ - `.claude/agents/` — 전문 ģ—ģ“ģ „ķŠø ģ •ģ˜
18
+ - `.claude/skills/` — ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„° ģŠ¤ķ‚¬
19
+ - `.claude/commands/` — ģŠ¬ėž˜ģ‹œ ģ»¤ė§Øė“œ
20
+ - `CLAUDE.md` — ķ”„ė”œģ ķŠø ģ»Øķ…ģŠ¤ķŠø
21
+
22
+ **Software architecture** (SOLID, DDD, module boundaries, scalability)ėŠ” `architect` role agent 닓당.
23
+ ķ•˜ė„¤ģŠ¤ ģ‚°ģ¶œė¬¼ė”œ ģƒģ„±ė˜ėŠ” ė¬øģ„œ(README, ź°€ģ“ė“œ)ėŠ” `technical-writer` 닓당.
24
+
25
+ ---
26
+
27
+ ## Artifact Conventions
28
+
29
+ ### AGENT.md (ģ—ģ“ģ „ķŠø ģ •ģ˜)
30
+
31
+ ```markdown
32
+ ---
33
+ name: <kebab-case>
34
+ description: "<ķ•œ 줄 설명 — ė¬“ģ—‡ģ„ ķ•˜ėŠ” ģ—ģ“ģ „ķŠøģøģ§€, ģ–“ė–¤ ģƒķ™©ģ—ģ„œ ķ˜øģ¶œė˜ėŠ”ģ§€>"
35
+ ---
36
+
37
+ # <Name> — <ķ•œ 줄 ģ—­ķ• >
38
+
39
+ ## 핵심 ģ—­ķ• 
40
+ (번호 ėŖ©ė”ģœ¼ė”œ ģ£¼ģš” ģ±…ģž„ 3~5개)
41
+
42
+ ## (전문 ģ§€ģ‹ ģ„¹ģ…˜ė“¤)
43
+ ...
44
+
45
+ ## 출렄 ķ˜•ģ‹ / Output Format
46
+ ```
47
+
48
+ **ź·œģ¹™:**
49
+ - `name`ģ€ kebab-case, ė™ģ‚¬ ģ—†ģ“ ģ—­ķ•  ėŖ…ģ‚¬ė”œ (`korean-style-rewriter` āœ… / `rewrite-korean` āŒ)
50
+ - `description`ģ€ 트리거 ģ”°ź±“ģ„ ķ¬ķ•Ø — role matchź°€ ģ“ ķ•„ė“œė”œ ķŒė‹Øķ•˜ėÆ€ė”œ 구첓적으딜
51
+ - ģ—ģ“ģ „ķŠøėŠ” **ė‹Øģ¼ ģ±…ģž„**: ķƒģ§€ė§Œ, ė˜ėŠ” 윤문만, ė˜ėŠ” ź²€ģ¦ė§Œ
52
+ - ķŒŒģ¼ 경딜: `.claude/agents/<name>.md`
53
+
54
+ ### SKILL.md (ģŠ¤ķ‚¬ ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„°)
55
+
56
+ ```markdown
57
+ ---
58
+ name: <kebab-case>
59
+ version: "1.0.0"
60
+ description: "<트리거 ė¬øģž„ ķ¬ķ•Ø — ģ‚¬ģš©ģžź°€ ģ–“ė–¤ ė§ģ„ ķ–ˆģ„ ė•Œ ģ“ ģŠ¤ķ‚¬ģ“ ģ‹¤ķ–‰ė˜ėŠ”ģ§€>"
61
+ ---
62
+
63
+ # <Skill Name> — ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„°
64
+
65
+ ## Phase 0: ģ»Øķ…ģŠ¤ķŠø ķ™•ģø
66
+ (ėŖØė“œ ź²°ģ •, run_id ģƒģ„± 등 ģ“ˆźø°ķ™”)
67
+
68
+ ## Phase 1~N: 단계별 실행
69
+ (각 ė‹Øź³„ģ—ģ„œ ģ–“ė–¤ ģ—ģ“ģ „ķŠøė„¼ ģ–“ė–»ź²Œ ķ˜øģ¶œķ•˜ėŠ”ģ§€)
70
+
71
+ ## ź²°ź³¼ ė°˜ķ™˜
72
+ ```
73
+
74
+ **ź·œģ¹™:**
75
+ - ķŒŒģ¼ 경딜: `.claude/skills/<skill-name>/SKILL.md`
76
+ - references ķŒŒģ¼(룰북, ė¶„ė„˜ 첓계 등)ģ€ `.claude/skills/<skill-name>/references/`에 배치
77
+ - ģŠ¤ķ‚¬ģ€ **ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„°**ģ¼ 뿐 — ģ‹¤ģ œ ģž‘ģ—…ģ€ ģ—ģ“ģ „ķŠøź°€ ģˆ˜ķ–‰
78
+ - versionģ€ semver, 변경 ģ“ė „ ģ£¼ģ„ ķ¬ķ•Ø
79
+
80
+ ### Command ķŒŒģ¼ (ģŠ¬ėž˜ģ‹œ ģ»¤ė§Øė“œ)
81
+
82
+ ```markdown
83
+ ---
84
+ description: <ķ•œ 줄 설명>
85
+ argument-hint: [ģøģž ķžŒķŠø]
86
+ ---
87
+
88
+ # /<command-name> — 설명
89
+
90
+ ## ģž…ė „
91
+ $ARGUMENTS
92
+
93
+ ## ė™ģž‘
94
+ (번호 ėŖ©ė”ģœ¼ė”œ 실행 절차)
95
+
96
+ ## ģ°øź³ 
97
+ (꓀련 ģŠ¤ķ‚¬/ģ—ģ“ģ „ķŠø 링크)
98
+ ```
99
+
100
+ **ź·œģ¹™:**
101
+ - ķŒŒģ¼ 경딜: `.claude/commands/<command-name>.md`
102
+ - ģ»¤ė§Øė“œėŠ” **ģ§„ģž…ģ (entry point)** — ģŠ¤ķ‚¬ģ„ ķŠøė¦¬ź±°ķ•˜ź±°ė‚˜ ģ—ģ“ģ „ķŠøė„¼ 직접 호출
103
+ - `$ARGUMENTS`넼 ėŖ…ģ‹œģ ģœ¼ė”œ 처리 (ė¹„ģ—ˆģ„ ė•Œ fallback ķ¬ķ•Ø)
104
+
105
+ ### CLAUDE.md (ķ”„ė”œģ ķŠø ģ»Øķ…ģŠ¤ķŠø)
106
+
107
+ **ķ¬ķ•Øķ•  ģ„¹ģ…˜:**
108
+ 1. ķ”„ė”œģ ķŠø ź°œģš” (ķ•œ 문단)
109
+ 2. 핵심 ģ² ģ¹™ (변경 ė¶ˆź°€ 원칙들)
110
+ 3. 디렉토리 구씰
111
+ 4. ģ£¼ģš” ģ—ģ“ģ „ķŠø/ģŠ¤ķ‚¬ ėŖ©ė”
112
+ 5. ģ‚¬ģš© 방법
113
+ 6. 금기 사항
114
+
115
+ ---
116
+
117
+ ## Design Principles
118
+
119
+ ### 1. ģ—ģ“ģ „ķŠø vs ģŠ¤ķ‚¬ vs ģ»¤ė§Øė“œ ģ„ ķƒ 기준
120
+
121
+ | ģƒķ™© | ģ„ ķƒ | ģ“ģœ  |
122
+ |------|------|------|
123
+ | ė‹Øģ¼ 전문 ģž‘ģ—… (ķƒģ§€, 윤문, ź²€ģ¦ 등) | Agent | ķ•œ ģ±…ģž„ģ— 집중, role match ėŒ€ģƒ |
124
+ | ģ—¬ėŸ¬ ģ—ģ“ģ „ķŠøė„¼ ģˆœģ„œėŒ€ė”œ 씰율 | Skill | ķŒŒģ“ķ”„ė¼ģø ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ģ…˜ |
125
+ | ģ‚¬ģš©ģžź°€ 직접 ķŠøė¦¬ź±°ķ•˜ėŠ” ģ§„ģž…ģ  | Command | slash command딜 ģ ‘ź·¼ ź°€ėŠ„ |
126
+ | ģ—ģ“ģ „ķŠø ė‹Øė…ģœ¼ė”œ ķ•“ź²° ź°€ėŠ„ķ•œ ė‹Øģˆœ ģž‘ģ—… | Agent (ģŠ¤ķ‚¬ ģ—†ģ“) | ģ˜¤ė²„ģ—”ģ§€ė‹ˆģ–“ė§ ė°©ģ§€ |
127
+
128
+ ### 2. Fast Path vs Full Pipeline
129
+
130
+ **Fast Path (ė‹Øģ¼ ģ—ģ“ģ „ķŠø monolith)**
131
+ - 씰걓: ģž‘ģ—…ģ“ ė‹Øģˆœķ•˜ź±°ė‚˜, 빠넸 ģ‘ė‹µģ“ ģ¤‘ģš”ķ•˜ź±°ė‚˜, ģž…ė „ģ“ ģž‘ģ„ ė•Œ (≤5,000ģž 등)
132
+ - 구씰: ķƒģ§€Ā·ģ‹¤ķ–‰Ā·ģžģ²“ź²€ģ¦ģ„ ķ•œ ģ—ģ“ģ „ķŠøź°€ ķ•œ ė²ˆģ— 처리
133
+ - ģž„ģ : wall-clock ģ‹œź°„ 단축, ģ»Øķ…ģŠ¤ķŠø 전달 ģ˜¤ė²„ķ—¤ė“œ ģ—†ģŒ
134
+
135
+ **Full Pipeline (멀티 ģ—ģ“ģ „ķŠø)**
136
+ - 씰걓: ź²€ģ¦ģ“ ė…ė¦½ģ ģ“ģ–“ģ•¼ ķ•˜ź±°ė‚˜, ėŒ€ķ˜• ģž…ė „, ģ •ė°€ė„ź°€ ģ¤‘ģš”ķ•  ė•Œ
137
+ - 구씰: 단계별 전문 ģ—ģ“ģ „ķŠø → 병렬 ź²€ģ¦ ķŒ€ → ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„° 종합
138
+ - ģž„ģ : 각 단계 ė…ė¦½ ź²€ģ¦ ź°€ėŠ„, 오넘 격리, ģž¬ģ‹¤ķ–‰ ź°€ėŠ„
139
+
140
+ **ģ„ ķƒ 기준**: ģž…ė „ 크기와 ź²€ģ¦ ė…ė¦½ģ„±ģ“ 핵심. 빠넸 MVPėŠ” Fast path딜 ģ‹œģž‘ķ•˜ź³ , ķ’ˆģ§ˆ 문제 ė°œģƒ ģ‹œ Full pipeline으딜 승격.
141
+
142
+ ### 3. ķŒŒģ“ķ”„ė¼ģø 단계 설계
143
+
144
+ ģ „ķ˜•ģ ģø ķŒØķ„“:
145
+ ```
146
+ ģž…ė „ →
147
+ [ķƒģ§€/ė¶„ģ„] →
148
+ [실행/ė³€ķ™˜] →
149
+ [병렬 ź²€ģ¦: 정확성 감사 + ķ’ˆģ§ˆ 리뷰] →
150
+ [ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„° 종합 ķŒģ •] →
151
+ 출렄
152
+ ```
153
+
154
+ 종합 ķŒģ • ė¶„źø°:
155
+ - `accept` → ź²°ź³¼ ė°˜ķ™˜
156
+ - `retry` → 실행 ģ—ģ“ģ „ķŠø ģž¬ķ˜øģ¶œ (ģµœėŒ€ N회)
157
+ - `rollback` → ķŠ¹ģ • 변경 딤백 후 ģž¬ģ‹¤ķ–‰
158
+ - `escalate` → ģ‚¬ėžŒ ź°œģž… 권고
159
+
160
+ ### 4. ģ—ģ“ģ „ķŠø ģ±…ģž„ 분리 원칙
161
+
162
+ - **ķƒģ§€(Detector)**: 문제 찾기만. ģˆ˜ģ •ķ•˜ģ§€ ģ•ŠģŒ. JSON/구씰화 ė¦¬ķ¬ķŠø 출렄.
163
+ - **실행(Executor/Rewriter)**: ķƒģ§€ ė¦¬ķ¬ķŠø 기반으딜만 ģˆ˜ģ •. ķƒģ§€ ģ—†ėŠ” 구간 ź±“ė“œė¦¬ģ§€ ģ•ŠģŒ.
164
+ - **감사(Auditor)**: 실행 결과가 ģ›ģ¹™ģ„ ģ§€ģ¼°ėŠ”ģ§€ ė…ė¦½ ź²€ģ¦. 실행에 ź“€ģ—¬ķ•˜ģ§€ ģ•ŠģŒ.
165
+ - **ģ˜¤ģ¼€ģŠ¤ķŠøė ˆģ“ķ„°(Skill)**: ģ—ģ“ģ „ķŠø 호출 ģˆœģ„œ ź“€ė¦¬ė§Œ. 직접 ģž‘ģ—… ģˆ˜ķ–‰ķ•˜ģ§€ ģ•ŠģŒ.
166
+
167
+ ### 5. ģ² ģ¹™ 설계
168
+
169
+ ėŖØė“  ķ•˜ė„¤ģŠ¤ģ—ėŠ” 변경 ė¶ˆź°€ 원칙(ģ² ģ¹™)ģ“ ķ•„ģš”ķ•˜ė‹¤. ģ¢‹ģ€ ģ² ģ¹™ģ˜ 씰걓:
170
+ - **츔정 ź°€ėŠ„**: "ģ¢‹ģ€ źø€" āŒ → "변경넠 30% ģ“ķ•˜" āœ…
171
+ - **ģ—ģ“ģ „ķŠøź°€ ź°•ģ œ ź°€ėŠ„**: ģ—ģ“ģ „ķŠøź°€ 직접 ź²€ģ¦ķ•˜ź³  딤백할 수 ģžˆģ–“ģ•¼ 함
172
+ - **ģ¶©ėŒ ģ—†ģŒ**: 철칙끼리 ėŖØģˆœė˜ģ§€ ģ•Šģ•„ģ•¼ 함
173
+
174
+ ### 6. ėŸ°ķƒ€ģž„ ģ‚°ģ¶œė¬¼ ꓀리
175
+
176
+ ģ—ģ“ģ „ķŠøź°€ 중간 ź²°ź³¼ė¬¼ģ„ ķŒŒģ¼ė”œ ģ €ģž„ķ•  ė•Œ:
177
+ - `_workspace/{run_id}/` ķŒØķ„“ ģ‚¬ģš© (ė‚ ģ§œ + ģ‹œķ€€ģŠ¤ 번호)
178
+ - 단계별 ķŒŒģ¼ėŖ…ģ— 번호 prefix (`01_input.txt`, `02_detection.json`, `03_rewrite.md`)
179
+ - ķŒŒģ¼ ģ”“ģž¬ ķ™•ģøģ€ `Glob` ė„źµ¬ (Bash `ls` źøˆģ§€ — OS ķ™˜ź²½ ģ˜ģ”“ģ„±)
180
+ - ķŒŒģ¼ ģ½źø°ėŠ” `Read` ė„źµ¬ (Bash `cat` źøˆģ§€)
181
+
182
+ ---
183
+
184
+ ## Design Process
185
+
186
+ ķ•˜ė„¤ģŠ¤ 설계 ģš”ģ²­ģ“ ė“¤ģ–“ģ™”ģ„ ė•Œ ģˆœģ„œ:
187
+
188
+ 1. **목적 명확화**: ģ“ ķ•˜ė„¤ģŠ¤ź°€ ģ–“ė–¤ 문제넼 ķ•“ź²°ķ•˜ėŠ”ź°€? ģž…ė „ź³¼ ģ¶œė „ģ€ ė¬“ģ—‡ģøź°€?
189
+ 2. **ģ² ģ¹™ ė„ģ¶œ**: ģ ˆėŒ€ ģœ„ė°˜ķ•˜ė©“ ģ•ˆ ė˜ėŠ” ģ”°ź±“ģ“ ė¬“ģ—‡ģøź°€? (ģ˜ėÆø 볓씓, ķ’ˆģ§ˆ 기준 등)
190
+ 3. **ģ—ģ“ģ „ķŠø ė¶„ķ•“**: 전첓 ģž‘ģ—…ģ„ ė‹Øģ¼ ģ±…ģž„ ė‹Øģœ„ė”œ ė¶„ķ•“. ķƒģ§€/실행/ź²€ģ¦ ė ˆģ“ģ–“ 구분.
191
+ 4. **Fast/Full ģ„ ķƒ**: ģž…ė „ 크기, ź²€ģ¦ ė…ė¦½ģ„±, ė°˜ģ‘ ģ†ė„ ģš”źµ¬ģ— ė”°ė¼ ź²°ģ •.
192
+ 5. **ķŒŒģ“ķ”„ė¼ģø 씰립**: 단계 ģˆœģ„œ, 병렬 처리 ź°€ėŠ„ 구간, ģž¬ģ‹œė„ 루프, ģ—ģŠ¤ģ»¬ė ˆģ“ģ…˜ 씰걓.
193
+ 6. **ķŒŒģ¼ ģž‘ģ„±**: CLAUDE.md → AGENT.md들 → SKILL.md → Command ķŒŒģ¼ ģˆœģ„œė”œ ģž‘ģ„±.
194
+
195
+ ---
196
+
197
+ ## Output Format
198
+
199
+ ķ•˜ė„¤ģŠ¤ 설계 ź²°ź³¼ėŠ” ė‹¤ģŒ ķ˜•ķƒœė”œ ģ œź³µķ•œė‹¤:
200
+
201
+ **설계 ė¦¬ķ¬ķŠø:**
202
+ - 목적 ė° ģ² ģ¹™ ģš”ģ•½
203
+ - ģ—ģ“ģ „ķŠø ėŖ©ė” (ģ“ė¦„ / ģ±…ģž„ / Fast or Strict ģ†Œģ†)
204
+ - ķŒŒģ“ķ”„ė¼ģø ė‹¤ģ“ģ–“ź·øėžØ (ķ…ģŠ¤ķŠø)
205
+ - 디렉토리 구씰 트리
206
+
207
+ **ģ‹¤ģ œ ķŒŒģ¼ ģž‘ģ„±:**
208
+ - 설계 ģŠ¹ģø 후 `.claude/` ķŒŒģ¼ė“¤ģ„ 직접 ģž‘ģ„±
209
+ - CLAUDE.md부터 ģ‹œģž‘ķ•“ģ„œ AGENT.md → SKILL.md → Command ģˆœģ„œė”œ ģ§„ķ–‰
210
+ - 각 ķŒŒģ¼ ģž‘ģ„± 후 "ģ“ ķŒŒģ¼ģ“ ė‹“ė‹¹ķ•˜ėŠ” ģ±…ģž„" ķ•œ 줄 ķ™•ģø
@@ -59,6 +59,11 @@ When writing Korean developer documentation, follow these conventions observed i
59
59
 
60
60
  **Korean Sentence Writing**
61
61
 
62
+ > **AI ķ‹° ķŒØķ„“ 룰북**: ģ•„ėž˜ ģ›ģ¹™ģ€ ź°€ģž„ ģžģ£¼ ė…øģ¶œė˜ėŠ” ģ˜ˆģ‹œė‹¤.
63
+ > 전첓 ķŒØķ„“(A~J, S1/S2/S3 ģ‹¬ź°ė„ Ɨ 40+ ģ„œėøŒķŒØķ„“)ģ€
64
+ > `references/ai-tell-quick-rules.md`넼 ģ°øģ”°ķ•œė‹¤.
65
+ > ķ•œźµ­ģ–“ ģ‚°ģ¶œė¬¼ ģž‘ģ„± 전에 ģ“ ķŒŒģ¼ģ„ ģ½ź³  ķŒØķ„“ģ„ ģˆ™ģ§€ķ•œė‹¤.
66
+
62
67
  **핵심 원칙: ģ˜ģ–“ė”œ ģƒź°ķ•˜ź³  ė²ˆģ—­ķ•˜ģ§€ 말 것**
63
68
  ķ•œźµ­ģ–“ė”œ 직접 ģž‘ģ„±ķ•œė‹¤. "dependency-based execution planning"ģ„ ėØøė¦æģ†ģ—ģ„œ 먼저 ģ˜ģ–“ė”œ źµ¬ģ„±ķ•œ ė’¤ ė²ˆģ—­ķ•˜ė©“ ė²ˆģ—­ģ²“ź°€ ėœė‹¤.
64
69
 
@@ -228,6 +233,47 @@ Apply these principles when structuring any document:
228
233
  — Do (Reference): `` `eventSourcing` `boolean` — ģ“ė²¤ķŠø ģ†Œģ‹± ķ™œģ„±ķ™” 여부. źø°ė³øź°’: `false` ``
229
234
  — Do (Learning/Explanation): "ģ“ ģ„œė¹„ģŠ¤ėŠ” ģ“ė²¤ķŠø ģ†Œģ‹±(Event Sourcing)으딜 상태넼 ź“€ė¦¬ķ•“ģš”. ģ“ė²¤ķŠø ģ†Œģ‹±ģ€ ģƒķƒœģ˜ ģµœģ¢… ź°’ ėŒ€ģ‹  변화넼 ģ¼ģœ¼ķ‚Ø ėŖØė“  ģ“ė²¤ķŠøė„¼ źø°ė”ķ•˜ėŠ” ė°©ģ‹ģ“ģ—ģš”."
230
235
 
236
+ ## Korean Output Self-Review
237
+
238
+ ķ•œźµ­ģ–“ ė¬øģ„œ ģž‘ģ„±ģ“ ėė‚˜ė©“ 제출 전에 ģ•„ėž˜ 절차딜 ģžź°€ ź²€ģ¦ķ•œė‹¤.
239
+
240
+ ### S1 ķŒØķ„“ ģž”ģ”“ źøˆģ§€ (ķ•˜ė‚˜ė¼ė„ 발견 ģ‹œ ģ¦‰ģ‹œ ģˆ˜ģ •)
241
+
242
+ 전첓 ķŒØķ„“ģ€ `references/ai-tell-quick-rules.md` ģ°øģ”°. 핵심 S1만 ģøė¼ģøģœ¼ė”œ:
243
+
244
+ | ID | ķŒØķ„“ | 처방 |
245
+ |----|------|------|
246
+ | A-1 | "~에 ėŒ€ķ•“(ģ„œ)" | 목적격 ģ”°ģ‚¬ė”œ 직결 |
247
+ | A-2 | "~넼 통핓" ė‚Øė°œ | "~딜", "~ķ•“ģ„œ"딜 ė¶„ģ‚° |
248
+ | A-3 | "~에 ģžˆģ–“(ģ„œ)" | "~ģ—ģ„œ", "~ģ„ ė³¼ ė•Œ" |
249
+ | A-7 | "가지고 ģžˆė‹¤" / have+N 직역 | ķ˜•ģš©ģ‚¬Ā·ė™ģ‚¬ ķ™˜ģ› |
250
+ | A-8 | ģ“ģ¤‘ ķ”¼ė™ "~ė˜ģ–“ģ§„ė‹¤" | ė‹Øģ¼ ķ”¼ė™ ė˜ėŠ” ėŠ„ė™ |
251
+ | A-16 | "ź·ø/ź·øė…€/그들" ėŒ€ėŖ…ģ‚¬ ė‚Øė°œ | ģ˜ķ˜• ģƒėžµ ė˜ėŠ” 명사구 |
252
+ | C-5 | ģ“ėŖØģ§€ ė‚Øė°œ (ģ¹¼ėŸ¼Ā·ė¦¬ķ¬ķŠø) | ģ „ė¶€ ģ‚­ģ œ |
253
+ | C-10 | 콜딠 ė¶€ģ œ 헤딩 "X: Y" 반복 | ķ‰ģ„œ ķ—¤ė”©ģœ¼ė”œ |
254
+ | C-11 | 연결얓미 ė’¤ ģ‰¼ķ‘œ (-ź³ , -ė©°, 등 직후) | ģ‰¼ķ‘œ 제거 |
255
+ | D-1 | "결딠적으딜/ė”°ė¼ģ„œ/ģ“ė„¼ 통핓" 3회+ | ģ‚­ģ œ ė˜ėŠ” 1회딜 ģ œķ•œ |
256
+ | D-2 | "ģ‹œģ‚¬ķ•˜ėŠ” 바가 크다" | ģ‚­ģ œ ė˜ėŠ” 구첓 결딠으딜 |
257
+ | D-3 | "본질적으딜/ķ•µģ‹¬ģ ģœ¼ė”œ" | ģ‚­ģ œ |
258
+ | D-4 | hype ģ–“ķœ˜ 3회+ (ķŒŒź²©ģ Ā·ķšźø°ģ Ā·ź°•ė „ķ•œ) | 구첓 ģˆ˜ģ¹˜Ā·ģ‚¬ģ‹¤ė”œ |
259
+ | D-5 | ģ˜ģøķ™” ģ¶”ģƒ 주얓 ("źø°ģˆ ģ“ ė¬»ėŠ”ė‹¤") | ģ‚¬ėžŒĀ·źø°ź“€ ģ£¼ģ–“ė”œ |
260
+ | D-6 | 결말 ź³µģ‹ "~ķ•  ė•Œė‹¤/ģ§€źøˆģ“ģ•¼ė§ė”œ" | ķ‰ģ„œė”œ ė‹«ź±°ė‚˜ ģ‚­ģ œ |
261
+ | H-1 | 문두 ģ ‘ģ†ģ‚¬ "ė˜ķ•œĀ·ė”°ė¼ģ„œĀ·ģ•„ģšøėŸ¬" 5회+ | ėŒ€ėŸ‰ 제거 |
262
+ | H-3 | ė©”ķƒ€ ģ§„ģž… "ģ“ėŠ”Ā·ģ“ ģ ģ—ģ„œ" 3회+ | 본문에 ė…¹ģ“ź±°ė‚˜ ģ‚­ģ œ |
263
+ | I-1 | "~ģø ź²ƒģ“ė‹¤/~ķ•œ ź²ƒģ“ė‹¤" 결말 | ķ‰ģ„œķ˜•ģœ¼ė”œ |
264
+ | J-2 | ė”°ģ˜“ķ‘œ ź°•ģ”° 5회+ | 핵심 1~2개만 ģœ ģ§€ |
265
+
266
+ ### ģžź°€ ź²€ģ¦ 6ķ•­ 첓크리스트
267
+
268
+ 1. **ź³ ģœ ėŖ…ģ‚¬Ā·ģˆ˜ģ¹˜Ā·ė‚ ģ§œĀ·ģøģš©** 100% 원문 볓씓
269
+ 2. **ė ˆģ§€ģŠ¤ķ„° 볓씓** — ź²©ģ‹ģ²“/ķ‰ģ–“ģ²“ ģ¼ź“€ (원고 전첓 ė™ģ¼ 얓미)
270
+ 3. **ģž„ė„“ ģ“ķƒˆ ģ—†ģŒ** — ė¦¬ķ¬ķŠøź°€ ģ—ģ„øģ“ģ²“ė”œ, ź°€ģ“ė“œź°€ 칼럼첓딜 ķė„“ģ§€ ģ•Šģ•˜ėŠ”ź°€
271
+ 4. **ģž”ģ”“ S1 ķŒØķ„“ 0걓** — ģœ„ ķ‘œ 기준
272
+ 5. **ģž„ģ˜ 추가 ģ—†ģŒ** — 원문에 ģ—†ė˜ ė¹„ģœ Ā·ģˆ˜ģ‚¬Ā·ģ‚¬ģ‹¤Ā·ģ˜ˆģ‹œė„¼ ģ¶”ź°€ķ•˜ģ§€ ģ•Šģ•˜ėŠ”ź°€
273
+ 6. **ģ“ėŖØģ§€Ā·ė³¼ė“œ ė‚Øģš© ģ—†ģŒ** — 기술 ė¬øģ„œģ—ģ„œ ģ“ėŖØģ§€ ģ „ė¶€ ģ‚­ģ œ, ė³¼ė“œėŠ” 최쓈 ė“±ģž„ 핵심 ģš©ģ–“ģ—ė§Œ
274
+
275
+ ģœ„ė°˜ ķ•­ėŖ©ģ“ ģžˆģœ¼ė©“ 핓당 źµ¬ź°„ė§Œ ģˆ˜ģ • 후 ģž¬ź²€ģ¦.
276
+
231
277
  ## Output Format
232
278
 
233
279
  When writing documentation, produce:
@@ -0,0 +1,134 @@
1
+ # Quick Rules — Monolith Fast Path ģ „ģš© (v2.0)
2
+
3
+ `humanize-monolith` ģ—ģ“ģ „ķŠøź°€ ķ•œ ģ½œģ—ģ„œ ķƒģ§€Ā·ģœ¤ė¬øĀ·ģžģ²“ź²€ģ¦ģ„ ėė‚“źø° ģœ„ķ•“ ģ‚¬ģš©ķ•˜ėŠ” 슬림 룰북. ė³øģ§„ `ai-tell-taxonomy.md`(590줄)ģ—ģ„œ S1Ā·S2 핵심 ķŒØķ„“ė§Œ 추려 처방과 ķ•Øź»˜ ķ•œ ģ¤„ė”œ ģ••ģ¶•ķ–ˆė‹¤.
4
+
5
+ **원칙:** ģ •ģ˜ 1줄 + 처방 1줄. 예문 ģƒėžµ. ė³øģ§„ ID와 1:1 매칭.
6
+
7
+ **Do-NOT (ķƒģ§€Ā·ģœ¤ė¬ø 모두 ģ œģ™ø):** ź³ ģœ ėŖ…ģ‚¬Ā·ģ œķ’ˆėŖ…Ā·ėŖØėøėŖ…Ā·źø°ź“€ėŖ…, ģˆ˜ģ¹˜Ā·ė‚ ģ§œĀ·ė‹Øģœ„, ķ°ė”°ģ˜“ķ‘œ ģ•ˆ 직접 ģøģš©, 법넠 씰문, ģˆ˜ķ•™Ā·ķ™”ķ•™Ā·ķ†µź³„ ķ‘œźø°, ģ˜ģ–“ 약얓(LLMĀ·GPUĀ·MCPĀ·API 등 업계 ķ‘œģ¤€).
8
+
9
+ **과윤문 ź°€ė“œ:** 변경넠 30% 쓈과 = 경고, 50% 쓈과 = ź°•ģ œ 중단·딤백.
10
+
11
+ ---
12
+
13
+ ## A. ė²ˆģ—­ķˆ¬ (Translation-ese)
14
+
15
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
16
+ |---|---|---|---|
17
+ | A-1 | "~에 ėŒ€ķ•“(ģ„œ)" | S1 | 목적격 ģ”°ģ‚¬ė”œ 직결("X에 ėŒ€ķ•“ ė…¼ģ˜" → "X넼 ė…¼ģ˜") |
18
+ | A-2 | "~넼 통핓/ķ†µķ•˜ģ—¬" ė‚Øė°œ | S1 | "~딜", "~ķ•“ģ„œ", "~ķ•Øģœ¼ė”œģØ"딜 ė¶„ģ‚° |
19
+ | A-3 | "~에 ģžˆģ–“(ģ„œ)" | S1 | "~ģ—ģ„œ", "~ģ„ ė³¼ ė•Œ" |
20
+ | A-4 | "~ė¼ėŠ” ģ ģ—ģ„œ" 3회+ | S2 | "~ģ„œ", "~ė¼ėŠ” ģ“ģœ ė”œ" |
21
+ | A-5 | "~와 ź“€ė Øķ•˜ģ—¬/ź“€ė Øėœ" | S2 | "~에", "~ģ˜" |
22
+ | A-6 | "~에 źø°ė°˜ķ•˜ģ—¬/ė°”ķƒ•ģœ¼ė”œ" ė‚Øė°œ | S2 | "~딜", "~ģ„ 볓고" |
23
+ | A-7 | "가지고 ģžˆė‹¤" / haveĀ·makeĀ·takeĀ·give + N 직역 | S1 | ķ˜•ģš©ģ‚¬Ā·ė™ģ‚¬ ķ™˜ģ› ė˜ėŠ” ģ“ģ¤‘ģ£¼ģ–“("ķšŒģ˜ė„¼ 가지다" → "ķšŒģ˜ė„¼ ķ–ˆė‹¤", "ź°•ķ•œ ź²½ģŸė „ģ„ 가지고 ģžˆė‹¤" → "ź²½ģŸė „ģ“ ź°•ķ•˜ė‹¤") |
24
+ | A-8 | ģ“ģ¤‘ ķ”¼ė™ "~ė˜ģ–“ģ§„ė‹¤" | S1 | ėŠ„ė™ ė˜ėŠ” ė‹Øģ¼ ķ”¼ė™ ("ķŒė‹Øė˜ģ–“ģ§„ė‹¤" → "ķŒė‹Øėœė‹¤") |
25
+ | A-9 | "~에 ģ˜ķ•“" ķ”¼ė™ | S2 | ķ–‰ģœ„ģžė„¼ ģ£¼ģ–“ė”œ("AI에 ģ˜ķ•“ ģƒģ„±" → "AIź°€ ė§Œė“ ") |
26
+ | A-10 | "~ķ•  수 ģžˆė‹¤" ė‚Øė°œ | S2 | ė‹Øģ–øģœ¼ė”œ("ė†’ģ¼ 수 ģžˆė‹¤" → "ė†’ģøė‹¤") |
27
+ | A-11 | "~ģ„ ģœ„ķ•“" 목적절 ė‚Øė°œ | S2 | "~려고", "~ģœ„ķ•œ" |
28
+ | A-15 | ģ¶”ģƒ 주얓 + 만늄 ė™ģ‚¬ / ģ‚¬ģ—­Ā·ģøģ§€ ė™ģ‚¬ | S2 | 구첓 ģ£¼ģ–“ė”œ ķ™˜ģ›, ģ‚¬ģ—­ģ€ "X ė•Œė¬øģ—/ė•ė¶„ģ—/딜 ģøķ•“" ė¶€ģ‚¬ģ ˆ, ģøģ§€ ė™ģ‚¬(suggest/show/indicate/reveal)ėŠ” "~에 ė”°ė„“ė©“ ~ģ“ė‹¤"Ā·"~으딜 ~ģ“ ė“œėŸ¬ė‚¬ė‹¤" 분리 |
29
+ | A-16 | "ź·ø/ź·øė…€/그것/그들" ė‹Øė½ ≄3회 ģ˜ģ–“ ėŒ€ėŖ…ģ‚¬ 직역 | S1 | 50%+ ģ˜ķ˜•(ģƒėžµ) ė˜ėŠ” ķ˜øģ¹­Ā·ėŖ…ģ‚¬źµ¬ė”œ (ź¹€ė„ķ›ˆ 2009) |
30
+ | A-18 | 명사 ģ•ž ≄3ģ–“ģ ˆ ź“€ķ˜•źµ¬Ā·ź“€ź³„ģ ˆ ģ¢Œķ–„ ģˆ˜ģ‹ | S2 | ė¬øģž„ 분리 ė˜ėŠ” ķ›„ģ¹˜ ė™ź²©ģ ˆ("X넼 ė§Œė‚¬ėŠ”ė°, ź·ø XėŠ” …") (ė°•ģ˜„ģˆ˜ 2018) |
31
+ | A-19 | ģ“ģ¤‘ 씰사 "~ģ—ģ„œģ˜/~ģ—ė”œģ˜/~ģœ¼ė”œģ˜/~ģ—ģ˜/~ģœ¼ė”œė¶€ķ„°ģ˜" | S2 | 절·구딜 풀얓쓰기. ė‹Øģˆœ ~ģ˜ėŠ” ė¹„ėŒ€ģƒ (ź¹€ģ •ģš° 2007) |
32
+
33
+ ## B. ģ˜ģ–“ ģøģš©Ā·ģš©ģ–“ 과다
34
+
35
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
36
+ |---|---|---|---|
37
+ | B-1 | ķ•œźø€ + ź“„ķ˜ø ģ˜ģ–“ 매번 ("~(Sovereign AI)" 처럼) | S2 | 첫 ė“±ģž„ė§Œ 병기, ģ“ķ›„ ķ•œźø€ė§Œ |
38
+ | B-2 | ģ˜ģ–“ ģ–“ķœ˜ 직역 ź°€ėŠ„ķ•œė° ź·øėŒ€ė”œ | S2 | ķ•œźµ­ģ–“ė”œ 옮기되 업계 ķ‘œģ¤€ģ€ ģœ ģ§€ |
39
+
40
+ ## C. 구씰적 AI ķŒØķ„“
41
+
42
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
43
+ |---|---|---|---|
44
+ | C-5 | ģ“ėŖØģ§€ ė‚Øė°œ | S1 | ģž„ė„“ ģ¹¼ėŸ¼Ā·ė¦¬ķ¬ķŠøė©“ ģ „ė¶€ ģ‚­ģ œ |
45
+ | C-7 | "ėØ¼ģ €Ā·ė°˜ė©“Ā·ź²°źµ­" 3단 ź³µģ‹ | S2 | ģ ‘ģ†ģ‚¬ 1~2개딜 ģ¤„ģ“ź±°ė‚˜ 본문에 녹여 제거 |
46
+ | C-8 | "Aģøź°€Ā·Bģøź°€" ėŒ€źµ¬ 반복 | S2 | ķ•œ 번만 삓리고 ė‚˜ėØøģ§€ėŠ” ķ‰ģ„œė¬øģœ¼ė”œ |
47
+ | C-9 | ģˆ«ģž ź“„ķ˜ø ģøė±ģ‹± "(1)Ā·(2)Ā·(3)" | S2 | 본문에 ė…¹ģ“ź±°ė‚˜ ė‹Øģˆœ ģ¤„ė°”źæˆ |
48
+ | C-10 | 콜딠 ė¶€ģ œ 헤딩 "X: Y" 반복 | S1 | 헤딩 짧게 ė˜ėŠ” ķ‰ģ„œ ķ—¤ė”©ģœ¼ė”œ |
49
+ | C-11 | 연결얓미 ė’¤ ģ‰¼ķ‘œ (-ź³ /-ė©°/-ģ§€ė§Œ/-ė©°ģ„œ/-ģ•„ģ„œ/-ģ–“ģ„œ 직후 ģ‰¼ķ‘œ) | S1 | ģ‰¼ķ‘œ 제거. 6+회=ź°•ķ•œ ģ‹ ķ˜ø. KatFish 4.84ė°° ė¶„ė¦¬ė„ |
50
+
51
+ ## D. AI ķŠ¹ģœ ģ˜ ź“€ģš©źµ¬ (Signature Phrases)
52
+
53
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
54
+ |---|---|---|---|
55
+ | D-1 | ź²°ģ‚° 피벗 lexicon "결딠적으딜/ė”°ė¼ģ„œ/ģ“ė„¼ 통핓/ź·øėŸ¬ėÆ€ė”œ/ģš”ģ•½ķ•˜ė©“/ģ •ė¦¬ķ•˜ė©“" | S1 | 3회 쓈과 ģ‹œ 1~2걓 다넸 ģ¢…ź²°ė”œ ģ¹˜ķ™˜, ė‚˜ėØøģ§€ ģ‚­ģ œ |
56
+ | D-2 | "ģ‹œģ‚¬ķ•˜ėŠ” 바가 크다/주목할 ė§Œķ•˜ė‹¤" | S1 | ģ‚­ģ œ ė˜ėŠ” 구첓 결딠으딜 |
57
+ | D-3 | "본질적으딜/ķ•µģ‹¬ģ ģœ¼ė”œ" | S1 | ģ‚­ģ œ |
58
+ | D-4 | hype ģ–“ķœ˜(ķŒŒź²©ģ Ā·ģ••ė„ģ Ā·ź°•ė „ķ•œĀ·ķšźø°ģ Ā·ģ¹˜ėŖ…ģ ) 3회+ | S1 | 구첓 ģˆ˜ģ¹˜Ā·ģ‚¬ģ‹¤ė”œ ķ™˜ģ› |
59
+ | D-5 | ģ˜ģøķ™” ģ¶”ģƒ 주얓("źø°ģˆ ģ“ ė¬»ėŠ”ė‹¤Ā·ģ‹œėŒ€ź°€ 부넸다") | S1 | ģ‚¬ėžŒĀ·źø°ź“€ ģ£¼ģ–“ė”œ |
60
+ | D-6 | 결말 ź³µģ‹ "~ķ•  ė•Œė‹¤/~핓야 ķ•œė‹¤/~ģ§€źøˆģ“ģ•¼ė§ė”œ" | S1 | ķ‰ģ„œė”œ ė‹«ź±°ė‚˜ ģ‚­ģ œ |
61
+ | D-7 | ė³€ķ™˜ ź³µģ‹ "Xģ—ģ„œ Y딜" 반복 | S2 | ķ•œ 번만, ė‚˜ėØøģ§€ėŠ” ģ¼ė°˜ ģ„œģˆ  |
62
+
63
+ ## E. 리듬·종결얓미
64
+
65
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
66
+ |---|---|---|---|
67
+ | E-1 | ė¬øģž„ źøøģ“ ź· ģ¼(stdev 8 미만) | S2 | 단문 1~2개 / ģž„ė¬ø 1개넼 각 문단에 ģ˜ė„ģ  ģ‚½ģž… |
68
+ | E-2 | ė™ģ¼ 종결얓미 "~다" 4ė¬øģž„ ģ—°ģ† + ģ§„ķ–‰ķ˜• "~ź³  ģžˆė‹¤" ģžė™ 매핑 | S2 | "~ģ—ˆė‹¤Ā·~ㄓ다·~ėŠ”ė‹¤Ā·~źø° ė§ˆė Øģ“ė‹¤Ā·~ㄹ ź²ƒģ“ė‹¤" 등 다양화. "~ź³  ģžˆė‹¤" ė‹Øģˆœ ģ‹œģ œ ķ™˜ģ› ź°€ėŠ„ ģ‹œ ķ™˜ģ›("ģ½ź³  ģžˆė‹¤" → "ģ½ėŠ”ė‹¤") |
69
+ | E-7 | ģ²­ģž 경얓법 4단계(ķ•“ė¼/ķ•˜ź²Œ/ķ•˜ģ˜¤/ķ•“ģš”/합쇼) ģ¼ź“€ģ„± 손실 (ėŒ€ķ™”Ā·źµ¬ģ–“ ķ•œģ •) | S2 | ķ•œ ė‹Øė½ ė‚“ 혼용 źøˆģ§€, ź²©ģ‹ ģ¼ź“€ (ź¹€ķ˜œģ˜ 2019, estimated) |
70
+
71
+ ## F. ź³¼ė„ķ•œ ģˆ˜ģ‹Ā·ģ¤‘ė³µ
72
+
73
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
74
+ |---|---|---|---|
75
+ | F-4 | ķ•œģžģ–“ 명사화 -성/-적/-ķ™” + ģ˜ģ–“ 명사화 -tion/-ment/-ness/-ity ėˆ„ģ  (ķ•œ źø€ 12회+) | S2 | ė™ģ‚¬Ā·ķ˜•ģš©ģ‚¬ ģ–“ź·¼ģœ¼ė”œ ķ™˜ģ›("the implementation of the policy" → "ģ •ģ±… ģ‹œķ–‰" ė˜ėŠ” "ģ •ģ±…ģ„ ģ‹œķ–‰ķ•˜źø°") |
76
+ | F-5 | "~적 N" ģ¶”ģƒ ģ²“ģø ("ģ „ėžµģ  ķ•Øģ˜Ā·ģ‹¤ģ²œģ  기반") | S2 | 명사+명사 ė˜ėŠ” 풀얓쓰기("ģ „ėžµ ķ•Øģ˜Ā·ģ‹¤ģ²œģ˜ 기반") |
77
+
78
+ ## G. Hedging
79
+
80
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
81
+ |---|---|---|---|
82
+ | G-1 | "~ź²ƒģ“ė‹¤/~ķ•  ź²ƒģ“ė‹¤" ėÆøėž˜ 단정 ė‚Øė°œ | S2 | ķ˜„ģž¬ķ˜•Ā·ķ™•ģ •ķ˜•ģœ¼ė”œ |
83
+ | G-2 | "~딜 ė³“ģøė‹¤/~ģø ė“Æķ•˜ė‹¤" 추정 ė‚Øė°œ | S2 | 단언 ź°€ėŠ„ķ•œ ź³³ģ€ 단언 |
84
+ | G-3 | ģ•ˆģ „ ź· ķ˜• lexicon "ģ–‘ģŖ½ 모두/두 가지 모두/ģž„ģ ė„ ģžˆģ§€ė§Œ/ģ‹ ģ¤‘ķ•˜ź²Œ/ź· ķ˜•" | S2 | 4회 쓈과 ģ‹œ 1~2걓 ķ™”ģž ģž…ģž„ģœ¼ė”œ ģ¹˜ķ™˜ |
85
+
86
+ ## H. ģ ‘ģ†ģ‚¬ ė‚Øė°œ
87
+
88
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
89
+ |---|---|---|---|
90
+ | H-1 | 문두 ģ ‘ģ†ģ‚¬ "ė˜ķ•œĀ·ė”°ė¼ģ„œĀ·ģ¦‰Ā·ė‚˜ģ•„ź°€Ā·ģ•„ģšøėŸ¬Ā·ź²Œė‹¤ź°€Ā·ė”ģš±ģ“" 5회+ | S1 | ėŒ€ėŸ‰ 제거. ė¬øģž„ ģžģ²“ź°€ ķė¦„ģ„ ģž”ź²Œ |
91
+ | H-3 | ė©”ķƒ€ ģ§„ģž… "ģ“ėŠ”Ā·ģ“ ģ ģ—ģ„œĀ·ģ“ ź“€ģ ģ—ģ„œĀ·ģ“ ė§ģ€" 3회+ | S1 | 본문에 ė…¹ģ“ź±°ė‚˜ ģ‚­ģ œ |
92
+ | H-4 | "즉" ė‚Øė°œ | S2 | 1회딜 ģ œķ•œ |
93
+
94
+ ## I. ķ˜•ģ‹ėŖ…ģ‚¬Ā·ģ˜ģ”“ėŖ…ģ‚¬
95
+
96
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
97
+ |---|---|---|---|
98
+ | I-1 | "~ģø ź²ƒģ“ė‹¤/~ķ•œ ź²ƒģ“ė‹¤" 결말 | S1 | ķ‰ģ„œķ˜•ģœ¼ė”œ |
99
+ | I-2 | "Xģ€ ~ė¼ėŠ” 점에 ģžˆė‹¤" | S2 | "XėŠ” ~다" ģ§ģ„¤ė”œ |
100
+ | I-3 | "~ė‹¤ėŠ” ėœ»ģ“ė‹¤/~ė‹¤ėŠ” ģ˜ėÆøė‹¤" 결말 | S2 | 본문에 풀얓 ģ“°źø° |
101
+ | I-4 | ź¶Œź³ ķ˜• 결말 "~핓야 ķ•œė‹¤Ā·~ķ•©ė‹ˆė‹¤" 반복 | S2 | ķ‰ģ„œĀ·ė‹Øģ–øģœ¼ė”œ |
102
+
103
+ ## J. ģ‹œź° ģž„ģ‹
104
+
105
+ | ID | ķŒØķ„“ | ģ‹¬ź°ė„ | 처방 |
106
+ |---|---|---|---|
107
+ | J-1 | 헤딩 ė§ˆķ¬ė‹¤ģš“ ** ź°•ģ”° ė‚Øė°œ | S2 | ģ¹¼ėŸ¼Ā·ė¦¬ķ¬ķŠøė©“ ź±°ģ˜ 다 제거 |
108
+ | J-2 | ė”°ģ˜“ķ‘œ ź°•ģ”° 5회+ | S1 | 핵심 ķ•œė‘ 개만 삓리고 ķ‰ģ–“ė”œ |
109
+ | J-3 | 불릿 리스트 (ģž„ė„“ź°€ ģ¹¼ėŸ¼Ā·ė¦¬ķ¬ķŠøģ¼ ė•Œ) | S2 | 문단 ģ‚°ė¬øģœ¼ė”œ 통합 |
110
+
111
+ ---
112
+
113
+ ## ģžģ²“ź²€ģ¦ 첓크리스트 (monolith 윤문 후 ģžź°€ 점검)
114
+
115
+ 윤문 직후 5쓈 낓에 ė‹¤ģŒģ„ ģžģ²“ ģ ź²€ķ•œė‹¤. ķ•œ ķ•­ėŖ©ģ“ė¼ė„ ģœ„ė°˜ģ“ė©“ 핓당 edit 딤백.
116
+
117
+ 1. **ź³ ģœ ėŖ…ģ‚¬Ā·ģˆ˜ģ¹˜Ā·ė‚ ģ§œĀ·ģøģš© 100% 볓씓**: 원문 ėŒ€ė¹„ ķ•œ źø€ģžė„ 다넓지 ģ•Šģ€ź°€
118
+ 2. **변경넠**: 30% ģ“ķ•˜ģøź°€ (50% ģ“ˆź³¼ėŠ” ģž‘ģ—… 중단)
119
+ 3. **ģž„ė„“ ģ“ķƒˆ ģ—†ģŒ**: ģ¹¼ėŸ¼ģ“ ģ—ģ„øģ“Ā·ė¬øķ•™ģœ¼ė”œ ė³€ķ•˜ģ§€ ģ•Šģ•˜ėŠ”ź°€, ė¦¬ķ¬ķŠøź°€ ėø”ė”œź·øģ²“ė”œ 떨얓지지 ģ•Šģ•˜ėŠ”ź°€
120
+ 4. **register 볓씓**: 원문 ź²©ģ‹ģ²“ė©“ ź²°ź³¼ė„ ź²©ģ‹ģ²“. ķ‰ģ–“ģ²“ė”œ ė–Øģ–“ėœØė¦¬ģ§€ ģ•ŠėŠ”ė‹¤
121
+ 5. **ģž”ģ”“ S1 ķŒØķ„“ 0걓**: D-1~D-7, A-7, A-8, A-16, C-5, C-10, C-11, H-1, I-1, J-2 핵심 S1ģ“ ė‚Øģ•„ģžˆģ§€ ģ•Šģ€ź°€
122
+ 6. **ģøź³µ ķ‘œķ˜„ ģžģ œ**: 원문에 ģ—†ė˜ ė¹„ģœ Ā·ģˆ˜ģ‚¬Ā·ė¬øķ•™ģ  ķ‘œķ˜„ģ„ 윤문 ź³¼ģ •ģ—ģ„œ ģž„ģ˜ė”œ ģ¶”ź°€ķ•˜ģ§€ ģ•Šģ•˜ėŠ”ź°€
123
+
124
+ ģœ„ė°˜ ģ‹œ: edit 딤백 → ė‹¤ģ‹œ 윤문 → ģž¬ģ ź²€. ģžģ²“ 루프 ģµœėŒ€ 1회. ģ“ģƒ ėÆøķ•“ź²°ģ“ė©“ 결과넼 ź·øėŒ€ė”œ ģ¶œė „ķ•˜ė˜ `summary.md`에 "ģžź°€ź²€ģ¦ 미통과 ķ•­ėŖ© N걓" ķ‘œźø°.
125
+
126
+ ## 등급 기준 (ģžź°€ 채점)
127
+
128
+ - **A**: S1 ģž”ģ”“ 0, S2 ģž”ģ”“ 2 ģ“ķ•˜, 변경넠 10~25%, ģžģ²“ź²€ģ¦ 6ķ•­ 모두 통과
129
+ - **B**: S1 ģž”ģ”“ 0, S2 ģž”ģ”“ 4 ģ“ķ•˜, ģžģ²“ź²€ģ¦ 5ķ•­ ģ“ģƒ 통과
130
+ - **C**: S1 ģž”ģ”“ 1~2 ė˜ėŠ” ģžģ²“ź²€ģ¦ 4ķ•­ ģ“ķ•˜ 통과 — ģ‚¬ģš©ģžģ—ź²Œ strict ėŖØė“œ 권고
131
+ - **D**: S1 ģž”ģ”“ 3+ ė˜ėŠ” 변경넠 50% 쓈과 — ģž‘ģ—… 중단 권고
132
+
133
+ > v2.0 ģ‹ ź·œ/ė³“ź°•ģ€ A-7Ā·A-15Ā·A-16Ā·A-18Ā·A-19Ā·E-2Ā·E-7Ā·F-4 **8걓 (A-17 hold)**. ķ•™ģˆ  ģøģš© ģ „ė¬øģ€ `references/scholarship.md`. post-editese 3ģ¶• metricģ€ ė³ø 룰북 미반영(metric only ķŠøėž™). A-17 ė¬“ģ •ė¬¼Ā·ģ¶”ģƒėŖ…ģ‚¬ '-들'ģ€ ķ•™ģˆ  anchor(ģ „ģ˜ģ²  2007Ā·ź³½ģ€ģ£¼Ā·ģ§„ģ‹¤ė”œ 2011) ź°•ķ•˜ė‚˜ 외부 회차(2026-05-07 ģœ„ķ‚¤ 6ķŽø)ģ—ģ„œ 양성 0걓 — NMT 원본 출렄 회차 후 v2.1ģ—ģ„œ ė™ģ¼ ID딜 ģž¬ķ‰ź°€.
134
+
@@ -49,6 +49,7 @@ Invoke any Gestalt Role or Review agent directly, outside the Gestalt pipeline.
49
49
  | Agent | Domain |
50
50
  |-------|--------|
51
51
  | `architect` | System design, scalability, design patterns |
52
+ | `harness-architect` | Claude Code harness design, agent pipeline, skill/command structure |
52
53
  | `backend-developer` | API, database, authentication, server |
53
54
  | `frontend-developer` | UI, React, accessibility |
54
55
  | `designer` | UX/UI, design systems, interaction |
@@ -56,6 +57,7 @@ Invoke any Gestalt Role or Review agent directly, outside the Gestalt pipeline.
56
57
  | `devops-engineer` | CI/CD, infrastructure, monitoring |
57
58
  | `product-planner` | Requirements, roadmap, user stories |
58
59
  | `researcher` | Analysis, benchmarks, best practices |
60
+ | `technical-writer` | Documentation, API docs, README, developer guides |
59
61
 
60
62
  **Review Agents** — code review specialists:
61
63
 
@@ -1,92 +0,0 @@
1
- ---
2
- name: seed
3
- version: "1.0.0"
4
- description: "Generate a Seed specification from a completed interview"
5
- triggers:
6
- - "generate seed"
7
- - "create spec"
8
- - "build seed"
9
- inputs:
10
- sessionId:
11
- type: string
12
- required: true
13
- description: "The interview session ID to generate a seed from"
14
- force:
15
- type: boolean
16
- required: false
17
- description: "Force generation even if ambiguity threshold is not met"
18
- outputs:
19
- - seed
20
- ---
21
-
22
- # Seed Generation Skill
23
-
24
- This skill transforms completed interview data into a structured project specification (Seed).
25
-
26
- ## Output Structure
27
-
28
- - **Goal**: Clear project objective
29
- - **Constraints**: Technical and business constraints
30
- - **Acceptance Criteria**: Measurable success conditions
31
- - **Ontology Schema**: Entity-relationship model
32
- - **Gestalt Analysis**: Findings from each principle applied
33
-
34
- ## Requirements
35
-
36
- - Interview session must be in `completed` status
37
- - Ambiguity score must be ≤ 0.2 (unless `force` is true)
38
-
39
- ## Passthrough Mode
40
-
41
- API 키 ģ—†ģ“ MCP ģ„œė²„ 실행 ģ‹œ ģžė™ ķ™œģ„±ķ™”. Seed ģƒģ„±ģ„ callerź°€ 직접 ģˆ˜ķ–‰ķ•œė‹¤.
42
-
43
- ### 추가 Input ķŒŒė¼ėÆøķ„°
44
-
45
- | ķŒŒė¼ėÆøķ„° | ķƒ€ģž… | ķ•„ģˆ˜ | 설명 |
46
- |---------|------|------|------|
47
- | `seed` | object | 2ė‹Øź³„ģ—ģ„œ ķ•„ģˆ˜ | callerź°€ ģƒģ„±ķ•œ Seed JSON |
48
- | `seed.goal` | string | ķ•„ģˆ˜ | ķ”„ė”œģ ķŠø ėŖ©ķ‘œ |
49
- | `seed.constraints` | string[] | ķ•„ģˆ˜ | 기술/ė¹„ģ¦ˆė‹ˆģŠ¤ ģ œģ•½ģ”°ź±“ |
50
- | `seed.acceptanceCriteria` | string[] | ķ•„ģˆ˜ | 수용 기준 |
51
- | `seed.ontologySchema` | object | ķ•„ģˆ˜ | 엔티티-꓀계 ėŖØėø |
52
- | `seed.gestaltAnalysis` | array | ķ•„ģˆ˜ | 게슈탈트 ė¶„ģ„ ź²°ź³¼ |
53
-
54
- ### 2단계 ķ”Œė”œģš°
55
-
56
- **1단계: SeedContext ģš”ģ²­**
57
- ```
58
- ges_generate_seed({ sessionId: "<id>" })
59
- ```
60
- → `{ status: "prompt", seedContext, message }` ė°˜ķ™˜
61
-
62
- SeedContext ķ•„ė“œ:
63
- - `systemPrompt`: Seed ģƒģ„±ģš© ģ‹œģŠ¤ķ…œ ķ”„ė”¬ķ”„ķŠø
64
- - `seedPrompt`: ģøķ„°ė·° ė‚“ģš© 기반 Seed ģƒģ„± ķ”„ė”¬ķ”„ķŠø
65
- - `allRounds[]`: `{ roundNumber, question, response, gestaltFocus }`
66
-
67
- **2단계: Seed 제출 ė° ź²€ģ¦**
68
- ```
69
- ges_generate_seed({
70
- sessionId: "<id>",
71
- seed: {
72
- goal: "ėŖ…ķ™•ķ•œ ķ”„ė”œģ ķŠø ėŖ©ķ‘œ",
73
- constraints: ["TypeScript ģ‚¬ģš©", "REST API"],
74
- acceptanceCriteria: ["ģ‘ė‹µ ģ‹œź°„ 200ms ģ“ķ•˜"],
75
- ontologySchema: {
76
- entities: [{ name: "User", description: "...", attributes: ["id", "email"] }],
77
- relations: [{ from: "User", to: "Order", type: "has_many" }]
78
- },
79
- gestaltAnalysis: [
80
- { principle: "closure", finding: "ģøģ¦ ģš”źµ¬ģ‚¬ķ•­ ģ™„ģ „ķžˆ ķŒŒģ•…ėØ", confidence: 0.9 }
81
- ]
82
- }
83
- })
84
- ```
85
- → `{ status: "generated", seed }` (metadata ģžė™ ģƒģ„± ķ¬ķ•Ø) ė˜ėŠ” `{ error }` ė°˜ķ™˜
86
-
87
- ### Seed ź²€ģ¦ ģŠ¤ķ‚¤ė§ˆ (Zod)
88
-
89
- - `gestaltAnalysis[].principle`: `closure | proximity | similarity | figure_ground | continuity`
90
- - `gestaltAnalysis[].confidence`: 0.0 ~ 1.0
91
- - `ontologySchema.entities[]`: `{ name: string(min 1), description: string, attributes: string[] }`
92
- - `ontologySchema.relations[]`: `{ from: string(min 1), to: string(min 1), type: string(min 1) }`
@@ -1,4 +0,0 @@
1
- export declare function seedCommand(sessionId: string, options: {
2
- force?: boolean;
3
- }): Promise<void>;
4
- //# sourceMappingURL=seed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/seed.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhG"}
@@ -1,34 +0,0 @@
1
- import { loadConfig } from '../../core/config.js';
2
- import { EventStore } from '../../events/store.js';
3
- import { AnthropicAdapter } from '../../llm/adapter.js';
4
- import { InterviewEngine } from '../../interview/engine.js';
5
- import { SeedGenerator } from '../../seed/generator.js';
6
- export async function seedCommand(sessionId, options) {
7
- const config = loadConfig();
8
- if (!config.anthropicApiKey) {
9
- console.error('Error: ANTHROPIC_API_KEY is required for CLI mode. Set it in .env or as environment variable.');
10
- process.exit(1);
11
- }
12
- const eventStore = new EventStore(config.dbPath);
13
- const llm = new AnthropicAdapter(config.anthropicApiKey, config.model);
14
- const engine = new InterviewEngine(llm, eventStore);
15
- const generator = new SeedGenerator(llm, eventStore);
16
- try {
17
- const session = engine.getSession(sessionId);
18
- console.log(`\n🌱 Generating seed for session: ${session.topic}\n`);
19
- const result = await generator.generate(session, options.force ?? false);
20
- if (!result.ok) {
21
- console.error(`Error: ${result.error.message}`);
22
- return;
23
- }
24
- console.log(JSON.stringify(result.value, null, 2));
25
- console.log('\nāœ… Seed generated successfully.\n');
26
- }
27
- catch (e) {
28
- console.error(`Error: ${e instanceof Error ? e.message : String(e)}`);
29
- }
30
- finally {
31
- eventStore.close();
32
- }
33
- }
34
- //# sourceMappingURL=seed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../../src/cli/commands/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,OAA4B;IAC/E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;QAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { AmbiguityScore, InterviewRound, ProjectType } from '../core/types.js';
2
- import type { LLMAdapter } from '../llm/types.js';
3
- export declare class AmbiguityScorer {
4
- private llm;
5
- constructor(llm: LLMAdapter);
6
- score(topic: string, rounds: InterviewRound[], projectType: ProjectType): Promise<AmbiguityScore>;
7
- }
8
- //# sourceMappingURL=ambiguity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambiguity.d.ts","sourceRoot":"","sources":["../../../src/interview/ambiguity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,qBAAa,eAAe;IACd,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,UAAU;IAE7B,KAAK,CACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,cAAc,EAAE,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,cAAc,CAAC;CA4B3B"}
@@ -1,69 +0,0 @@
1
- import { computeAmbiguityScore } from '../gestalt/analyzer.js';
2
- import { buildAmbiguityPrompt, INTERVIEW_SYSTEM_PROMPT } from '../llm/prompts.js';
3
- export class AmbiguityScorer {
4
- llm;
5
- constructor(llm) {
6
- this.llm = llm;
7
- }
8
- async score(topic, rounds, projectType) {
9
- const answeredRounds = rounds.filter((r) => r.userResponse);
10
- if (answeredRounds.length === 0) {
11
- return {
12
- overall: 1.0,
13
- dimensions: [],
14
- isReady: false,
15
- };
16
- }
17
- const prompt = buildAmbiguityPrompt(topic, answeredRounds.map((r) => ({
18
- question: r.question,
19
- response: r.userResponse,
20
- })), projectType);
21
- const response = await this.llm.chat({
22
- system: INTERVIEW_SYSTEM_PROMPT,
23
- messages: [{ role: 'user', content: prompt }],
24
- temperature: 0.3,
25
- });
26
- const raw = parseAmbiguityResponse(response.content, projectType);
27
- return computeAmbiguityScore(raw, projectType);
28
- }
29
- }
30
- function parseAmbiguityResponse(content, projectType) {
31
- const jsonMatch = content.match(/\{[\s\S]*\}/);
32
- if (!jsonMatch) {
33
- return defaultScores(projectType);
34
- }
35
- try {
36
- const parsed = JSON.parse(jsonMatch[0]);
37
- return {
38
- goalClarity: toNumber(parsed['goalClarity'], 0),
39
- constraintClarity: toNumber(parsed['constraintClarity'], 0),
40
- successCriteria: toNumber(parsed['successCriteria'], 0),
41
- priorityClarity: toNumber(parsed['priorityClarity'], 0),
42
- contextClarity: projectType === 'brownfield'
43
- ? toNumber(parsed['contextClarity'], 0)
44
- : undefined,
45
- contradictions: Array.isArray(parsed['contradictions'])
46
- ? parsed['contradictions']
47
- : [],
48
- };
49
- }
50
- catch {
51
- return defaultScores(projectType);
52
- }
53
- }
54
- function defaultScores(projectType) {
55
- return {
56
- goalClarity: 0,
57
- constraintClarity: 0,
58
- successCriteria: 0,
59
- priorityClarity: 0,
60
- contextClarity: projectType === 'brownfield' ? 0 : undefined,
61
- contradictions: [],
62
- };
63
- }
64
- function toNumber(value, fallback) {
65
- if (typeof value === 'number' && !isNaN(value))
66
- return value;
67
- return fallback;
68
- }
69
- //# sourceMappingURL=ambiguity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambiguity.js","sourceRoot":"","sources":["../../../src/interview/ambiguity.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { PassthroughEngine } from '../../interview/passthrough-engine.js';
2
- import type { PassthroughSeedGenerator } from '../../seed/passthrough-generator.js';
3
- import type { SeedInput } from '../schemas.js';
4
- export declare function handleSeedPassthrough(engine: PassthroughEngine, generator: PassthroughSeedGenerator, input: SeedInput): string;
5
- //# sourceMappingURL=seed-passthrough.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seed-passthrough.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/seed-passthrough.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,wBAAwB,EACnC,KAAK,EAAE,SAAS,GACf,MAAM,CA8BR"}