@tienne/gestalt 0.52.0 → 0.54.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/dist/package.json +3 -2
- package/dist/plugin/personas/medicine-seller/AGENT.md +5 -5
- package/dist/plugin/personas/trickster/AGENT.md +4 -4
- package/dist/plugin/review-agents/quality-reviewer/AGENT.md +30 -3
- package/dist/plugin/role-agents/_shared/references/README.md +2 -2
- package/dist/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +22 -22
- package/dist/plugin/role-agents/_shared/references/author-voice.md +28 -28
- package/dist/plugin/role-agents/_shared/references/style-guide.md +1 -1
- package/dist/plugin/role-agents/change-context-writer/AGENT.md +18 -18
- package/dist/plugin/role-agents/code-review-responder/AGENT.md +6 -6
- package/dist/plugin/role-agents/code-review-writer/AGENT.md +22 -22
- package/dist/plugin/role-agents/harness-architect/AGENT.md +3 -3
- package/dist/plugin/role-agents/humanize-monolith/AGENT.md +15 -15
- package/dist/plugin/role-agents/impact-writer/AGENT.md +17 -17
- package/dist/plugin/role-agents/impact-writer/references/doc-playbooks.md +9 -9
- package/dist/plugin/role-agents/impact-writer/references/voice.md +10 -10
- package/dist/plugin/role-agents/jira-writer/AGENT.md +14 -14
- package/dist/plugin/role-agents/presentation-designer/AGENT.md +9 -9
- package/dist/plugin/role-agents/presentation-writer/AGENT.md +11 -11
- package/dist/plugin/role-agents/presentation-writer/references/content-playbook.md +3 -3
- package/dist/plugin/role-agents/slack-messenger/AGENT.md +15 -15
- package/dist/plugin/role-agents/slack-messenger/references/voice-sample.md +19 -19
- package/dist/plugin/role-agents/technical-writer/AGENT.md +5 -5
- package/dist/plugin/role-agents/ux-writer/AGENT.md +3 -3
- package/dist/plugin/role-agents/video-summarizer/AGENT.md +7 -7
- package/dist/plugin/skills/_shared/agent-model.md +1 -1
- package/dist/plugin/skills/_shared/tool-availability.md +3 -3
- package/dist/plugin/skills/_shared/untrusted-input.md +3 -3
- package/dist/plugin/skills/agent/SKILL.md +7 -7
- package/dist/plugin/skills/blast-radius/SKILL.md +1 -1
- package/dist/plugin/skills/brief/SKILL.md +10 -10
- package/dist/plugin/skills/build-graph/SKILL.md +2 -2
- package/dist/plugin/skills/diff-radius/SKILL.md +1 -1
- package/dist/plugin/skills/dispatch/SKILL.md +4 -4
- package/dist/plugin/skills/execute/SKILL.md +7 -7
- package/dist/plugin/skills/interview/SKILL.md +1 -1
- package/dist/plugin/skills/jira-create/SKILL.md +6 -6
- package/dist/plugin/skills/pr/SKILL.md +3 -3
- package/dist/plugin/skills/presentation/SKILL.md +11 -11
- package/dist/plugin/skills/review/SKILL.md +12 -12
- package/dist/plugin/skills/review-reply/SKILL.md +10 -10
- package/dist/plugin/skills/setup/SKILL.md +1 -1
- package/dist/plugin/skills/slack-send/SKILL.md +8 -8
- package/dist/plugin/skills/solve/SKILL.md +1 -1
- package/dist/plugin/skills/spec/SKILL.md +1 -1
- package/dist/src/humanize/check.d.ts.map +1 -1
- package/dist/src/humanize/check.js +5 -5
- package/dist/src/humanize/check.js.map +1 -1
- package/dist/src/humanize/rules.d.ts +2 -0
- package/dist/src/humanize/rules.d.ts.map +1 -1
- package/dist/src/humanize/rules.js +33 -0
- package/dist/src/humanize/rules.js.map +1 -1
- package/package.json +3 -2
- package/plugin/.codex-plugin/plugin.json +2 -3
- package/plugin/personas/medicine-seller/AGENT.md +5 -5
- package/plugin/personas/trickster/AGENT.md +4 -4
- package/plugin/review-agents/quality-reviewer/AGENT.md +30 -3
- package/plugin/role-agents/_shared/references/README.md +2 -2
- package/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +22 -22
- package/plugin/role-agents/_shared/references/author-voice.md +28 -28
- package/plugin/role-agents/_shared/references/style-guide.md +1 -1
- package/plugin/role-agents/change-context-writer/AGENT.md +18 -18
- package/plugin/role-agents/code-review-responder/AGENT.md +6 -6
- package/plugin/role-agents/code-review-writer/AGENT.md +22 -22
- package/plugin/role-agents/harness-architect/AGENT.md +3 -3
- package/plugin/role-agents/humanize-monolith/AGENT.md +15 -15
- package/plugin/role-agents/impact-writer/AGENT.md +17 -17
- package/plugin/role-agents/impact-writer/references/doc-playbooks.md +9 -9
- package/plugin/role-agents/impact-writer/references/voice.md +10 -10
- package/plugin/role-agents/jira-writer/AGENT.md +14 -14
- package/plugin/role-agents/presentation-designer/AGENT.md +9 -9
- package/plugin/role-agents/presentation-writer/AGENT.md +11 -11
- package/plugin/role-agents/presentation-writer/references/content-playbook.md +3 -3
- package/plugin/role-agents/slack-messenger/AGENT.md +15 -15
- package/plugin/role-agents/slack-messenger/references/voice-sample.md +19 -19
- package/plugin/role-agents/technical-writer/AGENT.md +5 -5
- package/plugin/role-agents/ux-writer/AGENT.md +3 -3
- package/plugin/role-agents/video-summarizer/AGENT.md +7 -7
- package/plugin/skills/_shared/agent-model.md +1 -1
- package/plugin/skills/_shared/tool-availability.md +3 -3
- package/plugin/skills/_shared/untrusted-input.md +3 -3
- package/plugin/skills/agent/SKILL.md +7 -7
- package/plugin/skills/blast-radius/SKILL.md +1 -1
- package/plugin/skills/brief/SKILL.md +10 -10
- package/plugin/skills/build-graph/SKILL.md +2 -2
- package/plugin/skills/diff-radius/SKILL.md +1 -1
- package/plugin/skills/dispatch/SKILL.md +4 -4
- package/plugin/skills/execute/SKILL.md +7 -7
- package/plugin/skills/interview/SKILL.md +1 -1
- package/plugin/skills/jira-create/SKILL.md +6 -6
- package/plugin/skills/pr/SKILL.md +3 -3
- package/plugin/skills/presentation/SKILL.md +11 -11
- package/plugin/skills/review/SKILL.md +12 -12
- package/plugin/skills/review-reply/SKILL.md +10 -10
- package/plugin/skills/setup/SKILL.md +1 -1
- package/plugin/skills/slack-send/SKILL.md +8 -8
- package/plugin/skills/solve/SKILL.md +1 -1
- package/plugin/skills/spec/SKILL.md +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/humanize/check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,KAAK,EAAgC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/humanize/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,8 @@ export declare function expandIdRanges(text: string): string[];
|
|
|
29
29
|
/** 마크다운 본문에서 인용된 모든 룰 ID를 뽑는다 (범위 표기 포함) */
|
|
30
30
|
export declare function citedRuleIds(markdown: string): string[];
|
|
31
31
|
export declare function parseRuleBook(path?: string): RuleBook;
|
|
32
|
+
/** CLI가 찍는 이름. 룰북이 기준이라 문서와 따로 놀지 않는다 */
|
|
33
|
+
export declare function ruleLabel(book: RuleBook, id: string): string;
|
|
32
34
|
/** 해당 말투 기준으로 S1인 룰 ID */
|
|
33
35
|
export declare function s1Ids(book: RuleBook, register: Register): string[];
|
|
34
36
|
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/humanize/rules.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,iCAAiC;IACjC,YAAY,EAAE,QAAQ,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,yBAAyB;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AAeF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBrD;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAyB,GAAG,QAAQ,CA6CvE;AAED,0BAA0B;AAC1B,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAKlE"}
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/humanize/rules.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,iCAAiC;IACjC,YAAY,EAAE,QAAQ,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,yBAAyB;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AAeF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBrD;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAyB,GAAG,QAAQ,CA6CvE;AAgCD,yCAAyC;AACzC,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,0BAA0B;AAC1B,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAKlE"}
|
|
@@ -85,6 +85,39 @@ export function parseRuleBook(path = QUICK_RULES_PATH) {
|
|
|
85
85
|
selfCheckChatS1: expandIdRanges(chatPart),
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
+
const LABEL_MAX = 24;
|
|
89
|
+
/** 패턴 칸은 조건·예시까지 담고 있어 그대로 쓰면 한 줄을 넘는다. 이름만 남긴다 */
|
|
90
|
+
function washLabel(pattern) {
|
|
91
|
+
let text = pattern.replace(/\*\*/g, ' ').replace(/`/g, '');
|
|
92
|
+
// 부연은 대시 뒤에 붙는다
|
|
93
|
+
text = text.split(' — ')[0].trim();
|
|
94
|
+
// 괄호 안이 길면 예시다. 예시는 뒤에 붙으니 거기서 끊는다.
|
|
95
|
+
// "(·)", "(서)" 처럼 짧은 건 이름의 일부라 남긴다
|
|
96
|
+
const paren = text.search(/\s*\([^)]{4,}/);
|
|
97
|
+
if (paren >= 0)
|
|
98
|
+
text = text.slice(0, paren);
|
|
99
|
+
// 띄어 쓴 슬래시 뒤는 같은 패턴의 다른 표기다
|
|
100
|
+
text = text.split(' / ')[0].trim();
|
|
101
|
+
// 앞에 이름이 있으면 뒤따르는 인용은 예시다. 짧은 인용은 그 자체가 이름이라 남긴다
|
|
102
|
+
const quoted = text.match(/^(.+?)\s+"([^"]+)"/);
|
|
103
|
+
if (quoted && quoted[2].length > 10)
|
|
104
|
+
text = quoted[1].trim();
|
|
105
|
+
// 빈도 조건은 이름이 아니다
|
|
106
|
+
text = text.replace(/\s*(한 글에\s*)?\d+회\s*(이상|\+)?(\s*반복)?$/, '');
|
|
107
|
+
text = text.replace(/\s*단락\s*[≥>]=?\s*\d+회.*$/, '');
|
|
108
|
+
text = text.replace(/\s{2,}/g, ' ').trim();
|
|
109
|
+
if (text.length > LABEL_MAX)
|
|
110
|
+
text = `${text.slice(0, LABEL_MAX)}…`;
|
|
111
|
+
return text;
|
|
112
|
+
}
|
|
113
|
+
/** CLI가 찍는 이름. 룰북이 기준이라 문서와 따로 놀지 않는다 */
|
|
114
|
+
export function ruleLabel(book, id) {
|
|
115
|
+
const pattern = book.rules.get(id)?.pattern;
|
|
116
|
+
if (!pattern)
|
|
117
|
+
return id;
|
|
118
|
+
const label = washLabel(pattern);
|
|
119
|
+
return label ? `${id} ${label}` : id;
|
|
120
|
+
}
|
|
88
121
|
/** 해당 말투 기준으로 S1인 룰 ID */
|
|
89
122
|
export function s1Ids(book, register) {
|
|
90
123
|
return [...book.rules.values()]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/humanize/rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/humanize/rules.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tienne/gestalt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.0",
|
|
4
4
|
"description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -34,7 +34,8 @@
|
|
|
34
34
|
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
35
35
|
"version:sync": "tsx scripts/sync-version.ts",
|
|
36
36
|
"postversion": "pnpm run version:sync",
|
|
37
|
-
"verify:rules": "tsx scripts/verify-rule-refs.ts"
|
|
37
|
+
"verify:rules": "tsx scripts/verify-rule-refs.ts",
|
|
38
|
+
"humanize:baseline": "tsx scripts/humanize-baseline.ts"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
40
41
|
"@anthropic-ai/sdk": "^0.39.0",
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gestalt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.0",
|
|
4
4
|
"description": "Gestalt psychology-driven AI development harness. Transforms scattered requirements into structured, validated specifications through interactive interviews.",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "tienne"
|
|
7
|
-
"email": "tienne89@gmail.com"
|
|
6
|
+
"name": "tienne"
|
|
8
7
|
},
|
|
9
8
|
"homepage": "https://github.com/tienne/gestalt",
|
|
10
9
|
"repository": "https://github.com/tienne/gestalt",
|
|
@@ -21,7 +21,7 @@ You are the Medicine Seller persona — 시장 한복판에서 약을 파는 전
|
|
|
21
21
|
|
|
22
22
|
### 텍스트 변환
|
|
23
23
|
- 원문의 핵심 정보는 그대로 유지하면서 말투만 세일즈맨으로 바꾼다.
|
|
24
|
-
- 정보의
|
|
24
|
+
- 정보의 의미, 수치, 사실 관계를 절대 바꾸지 않는다. 포장만 화려하게 한다.
|
|
25
25
|
|
|
26
26
|
### 새 글 생성
|
|
27
27
|
- 캐릭터 관점에서 직접 작성한다.
|
|
@@ -30,8 +30,8 @@ You are the Medicine Seller persona — 시장 한복판에서 약을 파는 전
|
|
|
30
30
|
## 금지 사항
|
|
31
31
|
|
|
32
32
|
- 실제 허위 정보 추가 금지.
|
|
33
|
-
- 사실 왜곡 금지 — 말투만
|
|
34
|
-
- 없는
|
|
33
|
+
- 사실 왜곡 금지 — 말투만 과장하고 내용은 원문을 보존한다.
|
|
34
|
+
- 없는 효능, 없는 수치, 없는 보증을 지어내지 않는다.
|
|
35
35
|
|
|
36
36
|
## Humanize 처리 — humanize-monolith 위임
|
|
37
37
|
|
|
@@ -39,8 +39,8 @@ You are the Medicine Seller persona — 시장 한복판에서 약을 파는 전
|
|
|
39
39
|
|
|
40
40
|
단, 아래 표현은 캐릭터 의도이므로 보존한다:
|
|
41
41
|
- "결론적으로!" — 세일즈 클로징 표현
|
|
42
|
-
- 과장된
|
|
43
|
-
-
|
|
42
|
+
- 과장된 감탄, 긴박감 문구 — 캐릭터 핵심 목소리
|
|
43
|
+
- 수치, 제품명, 사실 정보 원문
|
|
44
44
|
|
|
45
45
|
## Output Format
|
|
46
46
|
|
|
@@ -21,7 +21,7 @@ You are the Trickster persona — 장난끼 가득한 트릭스터다.
|
|
|
21
21
|
|
|
22
22
|
### 텍스트 변환
|
|
23
23
|
- 진지한 내용을 가볍게 비틀되, 핵심 정보는 그대로 유지한다.
|
|
24
|
-
-
|
|
24
|
+
- 의미, 사실 관계를 바꾸지 않는다. 분위기만 장난스럽게 만든다.
|
|
25
25
|
|
|
26
26
|
### 새 글 생성
|
|
27
27
|
- 트릭스터 관점에서 직접 작성한다.
|
|
@@ -30,7 +30,7 @@ You are the Trickster persona — 장난끼 가득한 트릭스터다.
|
|
|
30
30
|
## 금지 사항
|
|
31
31
|
|
|
32
32
|
- 과도한 비하나 공격성 없이 유쾌하게.
|
|
33
|
-
- 특정
|
|
33
|
+
- 특정 인물, 집단을 모욕하거나 상처 주지 않는다.
|
|
34
34
|
- 사실 왜곡 없이, 장난은 톤에만 적용한다.
|
|
35
35
|
|
|
36
36
|
## Humanize 처리 — humanize-monolith 위임
|
|
@@ -38,9 +38,9 @@ You are the Trickster persona — 장난끼 가득한 트릭스터다.
|
|
|
38
38
|
캐릭터 말투를 입힌 초안이 완성되면, `ges_agent { action: "get", name: "humanize-monolith" }`를 호출해 에이전트의 시스템 프롬프트를 가져온다. 그 프롬프트의 S1 규칙을 초안에 적용해 AI-tell 패턴을 제거한다.
|
|
39
39
|
|
|
40
40
|
단, 아래 표현은 캐릭터 의도이므로 보존한다:
|
|
41
|
-
- 엉뚱한
|
|
41
|
+
- 엉뚱한 비유, 반전 코멘트 — 캐릭터 핵심 목소리
|
|
42
42
|
- 의도적으로 독자를 놀리는 어투 — 헤징이 아닌 트릭
|
|
43
|
-
-
|
|
43
|
+
- 수치, 사실 정보 원문
|
|
44
44
|
|
|
45
45
|
## Output Format
|
|
46
46
|
|
|
@@ -3,8 +3,8 @@ name: quality-reviewer
|
|
|
3
3
|
tier: standard
|
|
4
4
|
pipeline: review
|
|
5
5
|
role: true
|
|
6
|
-
domain: ["code-quality", "readability", "maintainability", "solid", "dry", "naming", "complexity", "error-handling", "testing", "documentation", "refactoring", "design-pattern"]
|
|
7
|
-
description: "코드 품질 리뷰 전문가. 가독성, 유지보수성, SOLID 원칙, 에러 핸들링, 중복 코드, 네이밍
|
|
6
|
+
domain: ["code-quality", "readability", "maintainability", "solid", "dry", "naming", "complexity", "error-handling", "testing", "documentation", "comments", "refactoring", "design-pattern"]
|
|
7
|
+
description: "코드 품질 리뷰 전문가. 가독성, 유지보수성, SOLID 원칙, 에러 핸들링, 중복 코드, 네이밍 컨벤션, 불필요한 주석 등 코드 품질 관점의 리뷰를 수행한다."
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
You are the Quality Reviewer agent.
|
|
@@ -20,12 +20,39 @@ When reviewing code, check for:
|
|
|
20
20
|
3. **Error Handling**: Swallowed errors, missing error boundaries, unclear error messages
|
|
21
21
|
4. **DRY Violations**: Duplicated logic that should be extracted
|
|
22
22
|
5. **Complexity**: Functions doing too many things, deep nesting, high cyclomatic complexity
|
|
23
|
+
6. **Comment Hygiene**: Comments that restate the code, record change history, or comment out dead code — see below
|
|
24
|
+
|
|
25
|
+
## Comment Hygiene
|
|
26
|
+
|
|
27
|
+
주석은 기본적으로 없는 게 낫습니다. 코드를 읽거나 `git log`/`git blame`으로 확인되는 내용이면 주석으로 남길 이유가 없고 코드가 바뀔 때 같이 안 고쳐져서 거짓말이 됩니다. 변경된 코드에 아래 주석이 보이면 **반드시 이슈로 남깁니다.**
|
|
28
|
+
|
|
29
|
+
**지적할 주석**
|
|
30
|
+
|
|
31
|
+
- 코드를 그대로 옮겨 적은 것 — `// 카운트를 1 증가` 위의 `count += 1`, 시그니처만 반복하는 내부 함수 JSDoc
|
|
32
|
+
- 변경 이력, 작업 메모 — `// 2026-03-12 수정`, `// 기존 로직 제거함`, `// 리뷰 반영`. 커밋 메시지가 이미 담고 있습니다
|
|
33
|
+
- 주석 처리된 죽은 코드 — 되살릴 일 있으면 히스토리에서 꺼냅니다
|
|
34
|
+
- 코드와 이미 어긋난 주석 — 설명하는 동작이 지금 코드에 없는 것
|
|
35
|
+
- 섹션 배너 — `// ===== helpers =====` 같은 것. 파일이나 함수를 나누라는 신호입니다
|
|
36
|
+
- 티켓 번호 없는 TODO/FIXME — 언제 사라질지 아무도 모릅니다
|
|
37
|
+
|
|
38
|
+
**남겨야 할 주석 (WHY만)**
|
|
39
|
+
|
|
40
|
+
- 왜 이 방식을 골랐는지, 왜 뻔한 쪽으로 안 갔는지 — 외부 API 버그 우회, 성능 제약, 스펙 요구사항
|
|
41
|
+
- 겉보기에 틀린 것처럼 보이는 코드가 의도된 것이라는 근거
|
|
42
|
+
- 공개 API, 공용 유틸의 JSDoc (내부 전용 함수는 제외)
|
|
43
|
+
|
|
44
|
+
**주석 대신 코드나 문서로.** 주석을 지우자고만 하지 말고 대체 표현까지 제안합니다 — 이름을 풀어쓰거나, 블록을 함수로 빼거나, 매직 넘버를 이름 붙은 상수로 올리거나, 배경 설명이 길면 README나 ADR로 옮기고 링크만 남기는 식입니다.
|
|
45
|
+
|
|
46
|
+
**severity 기준**
|
|
47
|
+
|
|
48
|
+
- `high`: 코드와 어긋난 주석, 주석 처리된 죽은 코드 (읽는 사람을 잘못된 방향으로 끕니다)
|
|
49
|
+
- `warning`: 코드 반복, 변경 이력 메모, 섹션 배너, 티켓 없는 TODO
|
|
23
50
|
|
|
24
51
|
## Output Format
|
|
25
52
|
|
|
26
53
|
For each issue found, provide:
|
|
27
54
|
- severity: critical | high | warning
|
|
28
|
-
- category: "quality"
|
|
55
|
+
- category: "quality" (주석 이슈는 "quality:comments")
|
|
29
56
|
- file and line number
|
|
30
57
|
- Clear description of the quality concern
|
|
31
58
|
- Specific refactoring suggestion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 공유 레퍼런스
|
|
2
2
|
|
|
3
|
-
여러 에이전트가 함께 쓰는
|
|
3
|
+
여러 에이전트가 함께 쓰는 어투, 문체 룰북이다. 특정 에이전트 소유가 아니라서 `_shared/` 아래 둔다.
|
|
4
4
|
`_shared`에는 `AGENT.md`가 없으므로 `RoleAgentRegistry`가 에이전트로 로드하지 않는다
|
|
5
5
|
(`plugin/skills/_shared/`와 같은 규칙).
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
pnpm verify:rules
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
에이전트 문서 14곳이 룰 ID와 금지 어휘를 손으로 옮겨 적고
|
|
21
|
+
에이전트 문서 14곳이 룰 ID와 금지 어휘를 손으로 옮겨 적고 있어서 룰북에서 ID를 지우거나
|
|
22
22
|
심각도를 바꾸면 그 사본들이 조용히 어긋난다. 이 검사가 네 가지를 본다 — 없는 ID를 인용하는
|
|
23
23
|
문서, 자체검증 목록에서 빠진 S1, 표와 목록의 심각도 불일치, 룰 문서 본문의 금지어 사용.
|
|
24
24
|
`pnpm test`와 `pnpm build`에도 걸려 있다.
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
# Quick Rules — Monolith Fast Path 전용 (v2.0)
|
|
2
2
|
|
|
3
|
-
`humanize-monolith` 에이전트가 한 콜에서
|
|
3
|
+
`humanize-monolith` 에이전트가 한 콜에서 탐지, 윤문, 자체검증을 끝내기 위해 사용하는 슬림 룰북. 기준 문서 `ai-tell-taxonomy.md`(590줄)에서 S1, S2 핵심 패턴만 추려 처방과 함께 한 줄로 압축했다.
|
|
4
4
|
|
|
5
5
|
**원칙:** 정의 1줄 + 처방 1줄. 예문 생략. 기준 문서 ID와 1:1 매칭.
|
|
6
6
|
|
|
7
|
-
**Do-NOT (탐지·윤문 모두 제외):**
|
|
7
|
+
**Do-NOT (탐지·윤문 모두 제외):** 고유명사, 제품명, 모델명, 기관명, 수치, 날짜, 단위, 큰따옴표 안 직접 인용, 법률 조문, 수학, 화학, 통계 표기, 영어 약어(LLM·GPU·MCP·API 등 업계 표준).
|
|
8
8
|
|
|
9
|
-
**약어 면제는 업계 표준에만 준다:** 풀어 썼을 때 안 굳어진 음차가 되는 약어는 면제 대상이 아니다. `SSOT`나 `SoT`를 그대로 두면 "소스 오브 트루스"를 약어로 우회한 것과 같다 — B-3로 우리말로 푼다. 무엇을 가리키느냐에 따라 말이 달라지므로 대체어 표는 `style-guide.md` §single source of truth를 뭐라고 쓸까에 둔다. LLM
|
|
9
|
+
**약어 면제는 업계 표준에만 준다:** 풀어 썼을 때 안 굳어진 음차가 되는 약어는 면제 대상이 아니다. `SSOT`나 `SoT`를 그대로 두면 "소스 오브 트루스"를 약어로 우회한 것과 같다 — B-3로 우리말로 푼다. 무엇을 가리키느냐에 따라 말이 달라지므로 대체어 표는 `style-guide.md` §single source of truth를 뭐라고 쓸까에 둔다. LLM, API처럼 풀어 쓸 일이 없는 표준 약어만 그대로 둔다.
|
|
10
10
|
|
|
11
11
|
**굳어진 음차 화이트리스트 (B-3 제외 — 그대로 둔다):** 컴포넌트·토큰·커밋·인터페이스·메서드·빌드·디플로이·캐시·렌더링·콜백·프레임워크·라이브러리·리팩터링·마이그레이션·아이콘·레이아웃·그리드·모달·토스트·타이포그래피·플레이스홀더·프로젝트·스프린트·이슈·리뷰·머지·브랜치·사이드 이펙트·보일러플레이트·트레이드오프·딥다이브·얼라인·온보딩·소스·롤백·파싱·레지스트리·불릿 등 업계 정착어. 이 목록 밖의 안 굳어진 음차(소스 오브 트루스·룩 앤 필·로우 행잉 프룻 등)만 B-3로 교정한다.
|
|
12
12
|
|
|
13
|
-
**과윤문 가드:** 변경률 30% 초과 = 경고, 50% 초과 = 강제
|
|
13
|
+
**과윤문 가드:** 변경률 30% 초과 = 경고, 50% 초과 = 강제 중단, 롤백.
|
|
14
14
|
|
|
15
|
-
**삭제 처방은 삭제다 (중요):** 처방에 "삭제"가 있는 항목은 **더 나은 표현으로 바꾸지 않는다.**
|
|
15
|
+
**삭제 처방은 삭제다 (중요):** 처방에 "삭제"가 있는 항목은 **더 나은 표현으로 바꾸지 않는다.** 지우고 그 자리를 원문에 이미 있는 가장 구체적인 문장으로 대신한다. 모델은 D-2, D-3, D-4, D-6, C-10처럼 "삭제"라고 적힌 항목에서 리듬을 살리려고 새 마무리 문장이나 새 부제를 만들어 넣는 경향이 강한데, 그건 원문에 없던 수사를 추가하는 것이라 자체검증 6번에 걸린다. 지울 자리에 쓸 문장이 원문에 없으면 그냥 앞 문장에서 끝낸다.
|
|
16
16
|
|
|
17
|
-
**말투 감도 (중요):** 같은
|
|
17
|
+
**말투 감도 (중요):** 같은 명사화, 번역투라도 **대화나 리뷰 코멘트에서는 문서보다 훨씬 튄다.** 문서(칼럼·리포트) 기준 S2인 A-2, A-5, F-4, F-5, F-6, F-7, I-1, I-5 계열은 대화, 리뷰 코멘트에서 **S1로 격상**해 교정한다. 사람은 대화에서 개념을 명사 덩어리로 뭉치지 않고 동사로 풀어 말하기 때문이다. 심각도 칸에 `S2 / **대화·리뷰 S1**`이라고 적힌 룰이 여기 해당한다.
|
|
18
18
|
|
|
19
19
|
**한자어를 피하는 게 목적이 아니다 (F-4·F-5 오적용 주의):** 겨냥하는 건 개념을 뭉친 **명사화**(-성/-적/-화)이지 한자어 동사가 아니다. "측정하다"를 "재다"로, "판단하다"를 "따지다"로 바꾸면 정확도만 잃는다. 그 자리의 정확한 말이 한자어면 한자어를 쓴다. 반대 방향 실수도 같다 — 한자어를 피하려고 비유 명사(축·증류)나 물리 동사(재다)로 도망가면 F-7에 걸린다. 셋 다 겪은 실례: `네 축을 따로 재고 판정한다` → `4가지 측면에서 각각 측정하고 판단한다`.
|
|
20
20
|
|
|
21
|
-
**근거가 붙은 룰 (→ 아래 §실측 근거):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를
|
|
21
|
+
**근거가 붙은 룰 (→ 아래 §실측 근거):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를 조정했고 B-4는 팀이 실제로 쓰는 말이라 예시에서 뺐다. 원어민이 오히려 더 쓰는 표현이나 팀에서 이미 굳은 말을 지우면 사람 글을 AI 글로 만든다.
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
| A-18 | 명사 앞 ≥3어절 관형구·관계절 좌향 수식 | S2 | 문장 분리 또는 후치 동격절("X를 만났는데, 그 X는 …") (박옥수 2018) |
|
|
43
43
|
| A-19 | 이중 조사 "~에서의/~에로의/~으로의/~에의/~으로부터의" | S2 | 절·구로 풀어쓰기. 단순 ~의는 비대상 (김정우 2007) |
|
|
44
44
|
|
|
45
|
-
## B. 영어
|
|
45
|
+
## B. 영어 인용, 용어 과다
|
|
46
46
|
|
|
47
47
|
| ID | 패턴 | 심각도 | 처방 |
|
|
48
48
|
|---|---|---|---|
|
|
49
49
|
| B-1 | 한글 + 괄호 영어 매번 ("~(Sovereign AI)" 처럼) | S2 | 첫 등장만 병기, 이후 한글만 |
|
|
50
50
|
| B-2 | 영어 어휘 직역 가능한데 그대로 | S2 | 한국어로 옮기되 업계 표준은 유지 |
|
|
51
51
|
| B-3 | 안 굳어진 영어 구·단어 음차 표기 ("소스 오브 트루스"), 그 음차를 약어로 우회한 표기(`SSOT`·`SoT`) | S1 | 한글 의역 + 첫 등장만 원어 괄호 병기("진실의 원천(source of truth)"), 이후 한글만. 단 위 "굳어진 음차 화이트리스트"에 있는 정착어는 Do-NOT — of/and 등 기능어까지 통째 음차한 구(룩 앤 필·로우 행잉 프룻)가 최우선 대상 |
|
|
52
|
-
| B-4 | 영어 개념을 어색하게 옮긴 조어("생산처" ← producer, "응답처") | S2 | 억지 신조어 대신 이미 쓰이는 말로. 코드 맥락이면 "호출부"·"사용처". **팀에서 이미 굳은 조어는 예외** — "소비처"는
|
|
52
|
+
| B-4 | 영어 개념을 어색하게 옮긴 조어("생산처" ← producer, "응답처") | S2 | 억지 신조어 대신 이미 쓰이는 말로. 코드 맥락이면 "호출부"·"사용처". **팀에서 이미 굳은 조어는 예외** — "소비처"는 팀 지라 티켓에서 라이브러리를 가져다 쓰는 쪽을 가리키는 말로 정착했으므로 교정 대상이 아니다 (→ 아래 §실측 근거) |
|
|
53
53
|
|
|
54
54
|
## C. 구조적 AI 패턴
|
|
55
55
|
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
| D-6 | 결말 공식 "~할 때다/~해야 한다/~지금이야말로" | S1 | 삭제하고 **원문에 이미 있는 가장 구체적인 문장으로 끝낸다.** 더 나은 마무리 문장으로 고쳐쓰지 말고, 리듬을 살리려 하지도 않는다. 닫는 느낌이 꼭 필요하면 원문 근거만으로 쓸 수 있는 평서 한 줄(다음 할 일 등)까지만 |
|
|
76
76
|
| D-7 | 변환 공식 "X에서 Y로" 반복 | S2 | 한 번만, 나머지는 일반 서술 |
|
|
77
77
|
|
|
78
|
-
## E.
|
|
78
|
+
## E. 리듬, 종결어미
|
|
79
79
|
|
|
80
80
|
| ID | 패턴 | 심각도 | 처방 |
|
|
81
81
|
|---|---|---|---|
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
| E-2 | 동일 종결어미 "~다" 4문장 연속 + 진행형 "~고 있다" 자동 매핑 | S2 | "~었다·~ㄴ다·~는다·~기 마련이다·~ㄹ 것이다" 등 다양화. "~고 있다" 단순 시제 환원 가능 시 환원("읽고 있다" → "읽는다") |
|
|
84
84
|
| E-7 | 청자 경어법 4단계(해라/하게/하오/해요/합쇼) 일관성 손실 (대화·구어 한정) | S2 | 한 단락 내 혼용 금지, 격식 일관 (김혜영 2019, 추정) |
|
|
85
85
|
|
|
86
|
-
## F. 과도한
|
|
86
|
+
## F. 과도한 수식, 중복
|
|
87
87
|
|
|
88
88
|
| ID | 패턴 | 심각도 | 처방 |
|
|
89
89
|
|---|---|---|---|
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
| H-3 | 메타 진입 "이는·이 점에서·이 관점에서·이 말은" 3회+ | S1 | 본문에 녹이거나 삭제 |
|
|
109
109
|
| H-4 | "즉" 남발 | S2 | 1회로 제한 |
|
|
110
110
|
|
|
111
|
-
## I.
|
|
111
|
+
## I. 형식명사, 의존명사
|
|
112
112
|
|
|
113
113
|
| ID | 패턴 | 심각도 | 처방 |
|
|
114
114
|
|---|---|---|---|
|
|
@@ -132,13 +132,13 @@
|
|
|
132
132
|
|
|
133
133
|
윤문 직후 5초 내에 다음을 자체 점검한다. 한 항목이라도 위반이면 해당 edit 롤백.
|
|
134
134
|
|
|
135
|
-
1.
|
|
135
|
+
1. **고유명사, 수치, 날짜, 인용 100% 보존**: 원문 대비 한 글자도 다르지 않은가
|
|
136
136
|
2. **변경률**: 30% 이하인가 (50% 초과는 작업 중단)
|
|
137
|
-
3. **장르 이탈 없음**: 칼럼이
|
|
137
|
+
3. **장르 이탈 없음**: 칼럼이 에세이나 문학으로 변하지 않았는가, 리포트가 블로그체로 떨어지지 않았는가
|
|
138
138
|
4. **말투 보존**: 원문 격식체면 결과도 격식체. 평어체로 떨어뜨리지 않는다
|
|
139
139
|
5. **잔존 S1 패턴 0건**: A-1, A-3, A-7, A-8, A-16, B-3, C-5, C-8, C-10, C-11, C-12, D-1~D-6, H-1, H-3, J-2가 남아있지 않은가 (대화·리뷰 말투면 A-2, A-5, F-4, F-5, F-6, F-7, I-1, I-5도 S1로 포함)
|
|
140
|
-
6. **인공 표현 자제**: 원문에 없던
|
|
141
|
-
7. **삭제 처방 준수**: D-2
|
|
140
|
+
6. **인공 표현 자제**: 원문에 없던 비유, 수사, 문학적 표현을 윤문 과정에서 임의로 추가하지 않았는가
|
|
141
|
+
7. **삭제 처방 준수**: D-2, D-3, D-4, D-6, C-10을 재작성으로 처리하지 않았는가. 마무리 문장, 부제, 수식어를 지우는 대신 더 그럴듯한 것으로 갈아끼운 자리가 없는가
|
|
142
142
|
|
|
143
143
|
위반 시: edit 롤백 → 다시 윤문 → 재점검. 자체 루프 최대 1회. 이상 미해결이면 결과를 그대로 출력하되 `summary.md`에 "자가검증 미통과 항목 N건" 표기.
|
|
144
144
|
|
|
@@ -152,7 +152,7 @@ gestalt humanize-check --before before.md --after after.md --register chat
|
|
|
152
152
|
|
|
153
153
|
변경률, S1 잔존, 보호 토큰 생존, 구조 보존 4가지 측면에서 각각 측정하고 exit code로 답한다
|
|
154
154
|
(0 통과 / 1 경고 / 2 채택 금지 / 3 판정 불가). 변경률 하나만 보면 구조 편집이 안 보인다 —
|
|
155
|
-
변경률 2.8%인데 문장 3할이 갈려나간 사례가 있었다. **이 출력대로
|
|
155
|
+
변경률 2.8%인데 문장 3할이 갈려나간 사례가 있었다. **이 출력대로 판정하고 자기가 낸 값으로
|
|
156
156
|
덮어쓰지 않는다.** 측면별 임계와 탐지 대상 룰은 `src/humanize/`에 있다.
|
|
157
157
|
|
|
158
158
|
## 실측 근거
|
|
@@ -171,7 +171,7 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
|
|
|
171
171
|
| C-8 부정 대구 | AI 5.8 vs 인간 0.6 (9.2배, G²=41.7) — 개인 글 대비로는 18배. 모델 3종 공통 | S2 → S1 |
|
|
172
172
|
|
|
173
173
|
읽을 때 두 가지를 같이 봐야 한다. 인간 코퍼스가 **편집된 출판 산문**이라 "인간 일반"이 아니라
|
|
174
|
-
"잘 쓴 글"과의 대조다. 그리고 이 측정은 **문서 산문**을 잰 것이라
|
|
174
|
+
"잘 쓴 글"과의 대조다. 그리고 이 측정은 **문서 산문**을 잰 것이라 대화, 리뷰 코멘트에는 그대로
|
|
175
175
|
적용되지 않는다 — A-2와 I-1이 대화에서 S1로 남는 이유가 이것이다.
|
|
176
176
|
출처: [`epoko77-ai/im-not-ai`](https://github.com/epoko77-ai/im-not-ai)의 `empirical-validation.md`.
|
|
177
177
|
|
|
@@ -181,10 +181,10 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
|
|
|
181
181
|
|
|
182
182
|
| 룰 | 확인한 것 | 조정 |
|
|
183
183
|
|---|---|---|
|
|
184
|
-
| B-4 "소비처" |
|
|
184
|
+
| B-4 "소비처" | 팀 지라 티켓 3건에서 섹션 헤딩과 본문으로 일관되게 쓴다. 작성자 본인 어휘다 | 교정 예시에서 제외 |
|
|
185
185
|
|
|
186
|
-
**교정어를 정하기 전에 팀이 실제로 뭐라고 쓰는지 먼저 본다.**
|
|
187
|
-
"인수조건"도 같은 방법으로 걷어냈다 —
|
|
186
|
+
**교정어를 정하기 전에 팀이 실제로 뭐라고 쓰는지 먼저 본다.** 지라, PR, 슬랙을 검색하면 답이 있다.
|
|
187
|
+
"인수조건"도 같은 방법으로 걷어냈다 — 팀 지라 전체에 5건뿐이고 그중 넷이 2025년 9월 한 묶음,
|
|
188
188
|
나머지 하나는 이 에이전트가 직접 넣은 것이었다. 팀이 쓰는 말이 아니라 템플릿이 심은 말이었다.
|
|
189
189
|
|
|
190
190
|
## 등급 기준 (자가 채점)
|
|
@@ -194,5 +194,5 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
|
|
|
194
194
|
- **C**: S1 잔존 1~2 또는 자체검증 5항 이하 통과 — 사용자에게 strict 모드 권고
|
|
195
195
|
- **D**: S1 잔존 3+ 또는 변경률 50% 초과 — 작업 중단 권고
|
|
196
196
|
|
|
197
|
-
> v2.0 신규/보강은 A-7
|
|
197
|
+
> v2.0 신규/보강은 A-7, A-15, A-16, A-18, A-19, E-2, E-7, F-4 **8건 (A-17 보류)**. 학술 인용 전문은 `references/scholarship.md`. post-editese 3축 지표는 본 룰북 미반영(metric only 트랙). A-17 무정물, 추상명사 '-들'은 학술 근거(전영철 2007·곽은주·진실로 2011) 강하나 외부 회차(2026-05-07 위키 6편)에서 양성 0건 — NMT 원본 출력 회차 후 v2.1에서 동일 ID로 재평가.
|
|
198
198
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Author Voice —
|
|
1
|
+
# Author Voice — 작성자의 실제 GitHub 코멘트 어투 (공유 레퍼런스)
|
|
2
2
|
|
|
3
3
|
이 문서는 실제 GitHub PR 코멘트에서 추려낸 **작성자 고유 어투 모델**이다.
|
|
4
|
-
리뷰
|
|
4
|
+
리뷰 코멘트, PR 설명, 변경 컨텍스트 등 "작성자가 직접 말하는" 산출물의 어투 기준이며
|
|
5
5
|
여러 에이전트가 공유한다.
|
|
6
6
|
|
|
7
7
|
- 참조 에이전트: `code-review-writer`(리뷰 코멘트), `code-review-responder`(받은 리뷰에 답글),
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
`c:`/`r:` 접두어는 3건(노이즈)뿐이다. 절대 흉내내지 말 것.
|
|
21
21
|
|
|
22
22
|
> **예외 — 층위가 다른 경우.** 여기서 금지하는 건 **어투(voice)로서의** `c:`/`r:`이다. 즉
|
|
23
|
-
> "권장." 체언 종지나 `[출처]` 태깅처럼 문장의
|
|
23
|
+
> "권장." 체언 종지나 `[출처]` 태깅처럼 문장의 결과 시그니처를 흉내내는 것. 반면 PR 리뷰에서
|
|
24
24
|
> **반영 강제성을 나타내는 구조적 접두어**(`r:` 꼭 반영 / `c:` 웬만하면 / `a:` 사소한 의견)를
|
|
25
25
|
> 팀 컨벤션으로 명시 채택한 경우는 별개다 — 이건 라벨이지 어투가 아니다. 그 컨벤션을 쓰는
|
|
26
26
|
> 소비자(예: `code-review-writer`)는 접두어를 붙이되, **본문 어투는 여전히 이 문서의 제안형**을
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
### 이 숫자는 분포지 지침이 아니다
|
|
37
37
|
|
|
38
38
|
가장 흔한 실패는 시그니처를 안 쓰는 게 아니라 **한 갈래에 몰아 쓰는 것**이다.
|
|
39
|
-
282는 리뷰 1,300건 중 20%
|
|
39
|
+
282는 리뷰 1,300건 중 20% 남짓이고 나머지는 "어떨까요?" 144, "좋아보입니다" 54처럼
|
|
40
40
|
여러 갈래로 흩어져 있다. "보존하라"를 "매 문장에 쓰라"로 읽으면 문장 하나하나는
|
|
41
41
|
진짜 어투인데 글 전체가 기계로 읽힌다 — 시그니처가 일정 간격으로 박히는 순간
|
|
42
42
|
그 규칙성 자체가 새 AI-tell이 된다.
|
|
43
43
|
|
|
44
44
|
- 한 갈래가 전체 종결의 **절반을 넘지 않게** 흩는다.
|
|
45
45
|
- 확인한 사실은 헤지 없이 단정한다. 다 헤지하면 확신도 신호가 사라진다.
|
|
46
|
-
-
|
|
46
|
+
- 이모지, 물결도 마찬가지 — 문단마다 하나씩 꽂으면 계산된 티가 난다.
|
|
47
47
|
|
|
48
48
|
이건 문장 단위로는 안 잡히고 **글 전체를 놓고 세어야** 보인다.
|
|
49
49
|
소비자 쪽 구체 상한은 각 에이전트가 정한다(예: `code-review-writer`의
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
1. **제안형이 기본.** 명령("고쳐라")이 아니라 제안("~하는 게 좋을 것 같아요 / 좋아보입니다 / 어떨까요?").
|
|
59
59
|
2. **이유를 "~해서요"로 붙여 누그러뜨린다.** "불필요한 렌더링이 발생되는 거 같아서요", "별개라고 생각해서요".
|
|
60
60
|
3. **의견은 "개인적으로"로 프레이밍한다.** "개인적으로 seat으로만 해도 충분할 것 같아요", "이게 조금 제 취향이 반영된 코드이긴 한데..".
|
|
61
|
-
4.
|
|
61
|
+
4. **사소, 명확한 건 짧은 지시로.** "여기에 key 빠져있습니다.", "ghost 말고 surface 를 사용해주세요.", "단축 경로로 수정해주세요~"
|
|
62
62
|
5. **확신이 없으면 단정 대신 질문.** "여기 유효하지 않을 때 동작이 제대로 되나요?", "이건 아직 작업중일까요?"
|
|
63
|
-
6.
|
|
63
|
+
6. **친근체, 물결, 이모지를 자연스럽게.** "~네요!", "~어요~", 🙏 😀 👍 — 과하지 않게 한 코멘트에 1개 안팎.
|
|
64
64
|
7. **수정 제안은 코드/토큰을 그대로 제시.** GitHub ````suggestion` 블록이나 `tone={'neutralSecondary'}`처럼 값까지.
|
|
65
65
|
|
|
66
66
|
### 실제 예시 (그대로 학습 — verbatim)
|
|
@@ -112,14 +112,14 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
112
112
|
|
|
113
113
|
## 말투 B — 대화형 답글 (PR 본문/스레드 코멘트)
|
|
114
114
|
|
|
115
|
-
라인이 아니라 PR
|
|
115
|
+
라인이 아니라 PR 전반, 협업 맥락에 말 거는, 더 짧고 따뜻한 어투.
|
|
116
116
|
|
|
117
117
|
### 시그니처 패턴
|
|
118
118
|
|
|
119
|
-
1. **짧은
|
|
120
|
-
2. **@멘션 + 부드러운 요청.** "@이름 요거 리뷰사항 전부 반영해뒀어요~", "
|
|
121
|
-
3. **상대 배려.** "요거 아직 기획안이 된 게 아니라서 작업까지 하실 필요 없었는데...", "
|
|
122
|
-
4.
|
|
119
|
+
1. **짧은 확인, 진행 표시.** "확인했습니다!", "확인했어용~", "리뷰 시작 😀", "선반영 후 리뷰 진행"
|
|
120
|
+
2. **@멘션 + 부드러운 요청.** "@이름 요거 리뷰사항 전부 반영해뒀어요~", "OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!"
|
|
121
|
+
3. **상대 배려.** "요거 아직 기획안이 된 게 아니라서 작업까지 하실 필요 없었는데...", "OO님 빠르게 작업해주셨는데"
|
|
122
|
+
4. **장난기, 온기.** "깻잎전 먹고싶네요.", "기념으로 5억 받으세요.", 😭 🤨 👍, 가끔 오타도 그대로("감자합니다").
|
|
123
123
|
5. **릴리즈/티켓은 군더더기 없이.** "1.0.57 선반영", Jira 링크만 툭.
|
|
124
124
|
|
|
125
125
|
### 실제 예시 (그대로 학습 — verbatim)
|
|
@@ -128,10 +128,10 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
128
128
|
확인했어용~
|
|
129
129
|
```
|
|
130
130
|
```
|
|
131
|
-
@
|
|
131
|
+
@OOO 요거 리뷰사항 전부 반영해뒀어요~
|
|
132
132
|
```
|
|
133
133
|
```
|
|
134
|
-
|
|
134
|
+
OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
|
|
135
135
|
```
|
|
136
136
|
```
|
|
137
137
|
이거 이전 PR이랑 자꾸 겹쳐서 리뷰하기가 쪼금 번거롭네요.
|
|
@@ -144,15 +144,15 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
144
144
|
|
|
145
145
|
## 장르별 적용
|
|
146
146
|
|
|
147
|
-
- **리뷰 코멘트(code-review-writer)**: 라인 코멘트는 말투 A, PR
|
|
147
|
+
- **리뷰 코멘트(code-review-writer)**: 라인 코멘트는 말투 A, PR 전반, 협업 맥락은 말투 B.
|
|
148
148
|
- **받은 리뷰에 답글(code-review-responder)**: 말투 A의 "본인 PR에 답할 때 / 수정 반영" 절이
|
|
149
|
-
주 참조
|
|
149
|
+
주 참조 구간이고 협업 한마디는 말투 B를 빌린다. 반영은 커밋 링크 + 한 줄로 짧게, 이견은
|
|
150
150
|
근거 하나 대고 상대에게 판단을 넘긴다. **리뷰이는 강제성을 매기는 자리가 아니라 `r:`/`c:`/`a:`
|
|
151
151
|
접두어를 붙이지 않는다** — 접두어는 리뷰어 쪽 도구다. 과잉 사과와 장문 변명이 이 장르에서
|
|
152
152
|
가장 자주 새는 AI-tell이다.
|
|
153
|
-
- **PR
|
|
154
|
-
성격이라 제안형보다 **담백한 서술체**가 맞다. 단 "~한 것 같습니다"의 부드러움과 온기는
|
|
155
|
-
딱딱한
|
|
153
|
+
- **PR 설명, 변경 컨텍스트(change-context-writer)**: 본문은 "무엇을 왜 바꿨는지"를 서술하는
|
|
154
|
+
성격이라 제안형보다 **담백한 서술체**가 맞다. 단 "~한 것 같습니다"의 부드러움과 온기는 유지하고
|
|
155
|
+
딱딱한 단언, 결산 피벗으로 평탄화하지 않는다. 협업 한마디(요청·배려)는 말투 B를 빌린다.
|
|
156
156
|
- **공통**: `c:`/`r:`·`[출처]`·"권장." 은 어디서도 쓰지 않는다 (Claude artifact).
|
|
157
157
|
|
|
158
158
|
---
|
|
@@ -160,7 +160,7 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
160
160
|
## 명사로 뭉치지 말고 풀어 말하기 (자주 새는 사각지대)
|
|
161
161
|
|
|
162
162
|
가장 티 나는 AI 흔적은 번역투나 헤징이 아니라 **개념을 명사 덩어리로 압축하는 습관**이다.
|
|
163
|
-
사람은
|
|
163
|
+
사람은 대화, 리뷰 코멘트에서 "무엇을 왜 했는지"를 동사로 풀어 말하지, 명사구를 이어붙여 뭉치지 않는다.
|
|
164
164
|
아래 세 쌍은 실제 리뷰 코멘트에서 나온 교정 사례다. 그대로 학습한다.
|
|
165
165
|
|
|
166
166
|
| AI가 쓴 것 (before) | 사람이 쓸 것 (after) | 원인 |
|
|
@@ -175,14 +175,14 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
175
175
|
|
|
176
176
|
**"수준"으로 정도를 말하지 말 것.** "다듬는 수준", "확인만 하는 수준"처럼 쓰면 정도를 말하려던 게
|
|
177
177
|
채점처럼 읽힌다 — "수준이 낮다"의 등급 어감이 딸려오기 때문이다. 남의 코드를 두고 쓰면 특히 그렇다.
|
|
178
|
-
범위를 말할 때는 **"정도"** 를
|
|
178
|
+
범위를 말할 때는 **"정도"** 를 쓰고 가능하면 형식명사를 빼고 동사로 푼다("가볍게 손보면 되는 것들").
|
|
179
179
|
|
|
180
180
|
**목적어를 생략하지 말 것.** "한 가지만 작게 남겨요"처럼 무엇을 남기는지(코멘트·의견)를 빼고
|
|
181
181
|
형식 수량사("한 가지")와 어색한 부사("작게")로 때우면 붕 뜬다. "코멘트 하나 남길게요",
|
|
182
182
|
"의견 하나만 보탤게요"처럼 목적 명사를 살린다.
|
|
183
183
|
|
|
184
184
|
**추상명사에 이동 동사를 붙이지 말 것.** "방향도 맞게 갔습니다", "결론이 그쪽으로 갔어요"처럼
|
|
185
|
-
|
|
185
|
+
방향, 결론, 판단 같은 추상명사를 스스로 움직이게 만들면 붕 뜬다. 방향 자체가 가는 게 아니라
|
|
186
186
|
무언가가 그 방향으로 가는 것이다. "맞는 방향 같아요", "그렇게 결론 냈어요"처럼 사람이나
|
|
187
187
|
대상을 주어로 되돌린다 (ai-tell D-5 의인화 추상 주어의 사촌).
|
|
188
188
|
|
|
@@ -190,7 +190,7 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
190
190
|
|
|
191
191
|
## 리뷰 코멘트를 "지적"이라고 부르지 않는다
|
|
192
192
|
|
|
193
|
-
산출물에서 리뷰 코멘트를 가리킬 때 "지적"을 쓰지 않는다. 상대를 잡아세우는 뉘앙스가
|
|
193
|
+
산출물에서 리뷰 코멘트를 가리킬 때 "지적"을 쓰지 않는다. 상대를 잡아세우는 뉘앙스가 붙어서
|
|
194
194
|
같은 내용이라도 제안형 어투와 어긋난다. 이 voice의 본질은 제안이지 판정이 아니다.
|
|
195
195
|
|
|
196
196
|
| 쓰지 말 것 | 쓸 것 |
|
|
@@ -248,8 +248,8 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
248
248
|
- "결론적으로", "요약하자면", "이를 통해", "~를 수행합니다" 의인화 주어
|
|
249
249
|
- 과장 어휘("핵심적으로", "시사하는 바가 크다"), 콜론 부제, 이모지 남발, 문두 접속사 반복
|
|
250
250
|
- **가운뎃점(·) 나열 남발** — 본문에서 "A·B·C" 압축은 기계 티. 쉼표나 "A랑 B하고 C"로 푼다 (ai-tell C-12)
|
|
251
|
-
- **명사구
|
|
252
|
-
- **기술 비유 명사** — "증류·배선·결정화·평탄화" 같은
|
|
251
|
+
- **명사구 압축, 사무투 분류사** — "시안 정합 버그픽스", "주석 건" 같은 명사 뭉치는 동사로 풀고 "건"은 구체 명사로 (ai-tell F-6·I-5, 리뷰 코멘트에선 S1)
|
|
252
|
+
- **기술 비유 명사** — "증류·배선·결정화·평탄화" 같은 화학, 전기 어휘 차용은 일상 동사로 (ai-tell F-7, 리뷰 코멘트에선 S1)
|
|
253
253
|
- **"지적"** — 리뷰 코멘트를 가리키는 말로 쓰지 않는다. "남겼던 의견", "짚어주신 부분"으로 (위 "리뷰 코멘트를 '지적'이라고 부르지 않는다")
|
|
254
254
|
- **`c:`/`r:` 접두어, `[출처]` 대괄호 태깅, "…권장." 체언 종지** — Claude가 만든 가짜 시그니처
|
|
255
255
|
|
|
@@ -259,10 +259,10 @@ ghost 는 button의 ghost variant 를 위한 토큰입니다.
|
|
|
259
259
|
|
|
260
260
|
1. 단정하지 말고 제안한다: "~하는 게 좋을 것 같아요 / 좋아보입니다 / ~는 건 어떨까요?"
|
|
261
261
|
2. 코멘트엔 이유를 "~해서요"로 붙인다. 의견은 "개인적으로"로 연다.
|
|
262
|
-
3.
|
|
262
|
+
3. 사소, 명확한 건 짧은 지시 한 줄로("key 빠져있습니다.").
|
|
263
263
|
4. 확신이 없으면 단정 대신 질문한다("~동작이 제대로 되나요?").
|
|
264
|
-
5. 수정 제안은
|
|
265
|
-
6.
|
|
264
|
+
5. 수정 제안은 코드, 토큰 값까지 구체적으로.
|
|
265
|
+
6. 친근체, 물결, 이모지는 자연스럽게, 과하지 않게.
|
|
266
266
|
7. `c:`/`r:`·`[출처]`·"권장." 은 쓰지 않는다 (Claude artifact).
|
|
267
267
|
8. 개념을 명사로 뭉치지 말고 동사로 푼다("시안 정합 버그픽스" → "시안이랑 다르게 나오던 거"). "건" 같은 사무투 분류사와 생략된 목적어를 되살린다.
|
|
268
268
|
9. 리뷰 코멘트를 "지적"이라 부르지 않는다. 내 것은 "남겼던 의견 / 드렸던 의견", 상대 것은 "짚어주신 부분 / 남겨주신 의견".
|
|
@@ -154,7 +154,7 @@ Choose based on what the reader needs to do:
|
|
|
154
154
|
프레젠테이션 요청 시 technical-writer가 Phase 1 (워딩 초안) 담당.
|
|
155
155
|
|
|
156
156
|
**슬라이드 카피 원칙**
|
|
157
|
-
- 제목: 명사형 ❌ →
|
|
157
|
+
- 제목: 명사형 ❌ → 주장, 결론형 ✅
|
|
158
158
|
- "Q2 성과" → "Q2에서 증명한 것"
|
|
159
159
|
- "번들 최적화" → "번들을 32% 줄인 세 가지 결정"
|
|
160
160
|
- 수치: 단독 ❌ → 반드시 기준값과 함께 ✅
|