patina-cli 3.11.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 (180) hide show
  1. package/.patina.default.yaml +211 -0
  2. package/CHANGELOG.md +265 -0
  3. package/LICENSE +21 -0
  4. package/README.md +319 -0
  5. package/README_JA.md +254 -0
  6. package/README_KR.md +253 -0
  7. package/README_ZH.md +254 -0
  8. package/SKILL-MAX.md +455 -0
  9. package/SKILL.md +730 -0
  10. package/assets/brand/patina-icon.svg +9 -0
  11. package/assets/brand/patina-logo.svg +17 -0
  12. package/assets/social/patina-before-after.svg +46 -0
  13. package/assets/social/patina-og.svg +31 -0
  14. package/bin/patina.js +9 -0
  15. package/core/scoring.md +657 -0
  16. package/core/standalone-prompt.md +364 -0
  17. package/core/stylometry.md +754 -0
  18. package/core/voice.md +163 -0
  19. package/docs/AUTHENTICATION.md +105 -0
  20. package/docs/AUTHENTICATION_KR.md +105 -0
  21. package/docs/BRANDING.md +37 -0
  22. package/docs/CLI.md +80 -0
  23. package/docs/COMPARISON.md +38 -0
  24. package/docs/COOKBOOK.md +173 -0
  25. package/docs/DEMO.md +40 -0
  26. package/docs/ETHICS.md +27 -0
  27. package/docs/EXAMPLES.md +130 -0
  28. package/docs/EXAMPLES_KR.md +130 -0
  29. package/docs/EXIT-CODES.md +25 -0
  30. package/docs/FAQ.md +67 -0
  31. package/docs/FAQ_KR.md +65 -0
  32. package/docs/FLAG-PARITY.md +53 -0
  33. package/docs/GLOSSARY.md +123 -0
  34. package/docs/PATTERNS-EN.md +718 -0
  35. package/docs/PATTERNS-JA.md +706 -0
  36. package/docs/PATTERNS-KO.md +707 -0
  37. package/docs/PATTERNS-ZH.md +706 -0
  38. package/docs/PATTERNS.md +22 -0
  39. package/docs/ROADMAP.md +315 -0
  40. package/docs/audits/2026-05-deep-research.md +290 -0
  41. package/docs/benchmarks/detector-comparison.json +442 -0
  42. package/docs/benchmarks/detector-comparison.md +65 -0
  43. package/docs/benchmarks/latest.json +988 -0
  44. package/docs/benchmarks/latest.md +112 -0
  45. package/docs/integrations/docker.md +19 -0
  46. package/docs/integrations/github-action.md +59 -0
  47. package/docs/integrations/pre-commit.md +77 -0
  48. package/docs/integrations/release.md +43 -0
  49. package/docs/internal/HARNESS.md +14 -0
  50. package/docs/internal/README.md +14 -0
  51. package/docs/internal/WARP.md +23 -0
  52. package/docs/research/2025-rebaseline-plan.md +89 -0
  53. package/docs/research/ai-human-metrics.md +380 -0
  54. package/docs/social/gstack-cardnews.html +236 -0
  55. package/docs/social/gstack-cardnews.md +88 -0
  56. package/docs/social/gstack-thread.md +106 -0
  57. package/docs/social/patina-launch-copy.md +227 -0
  58. package/docs/superpowers/specs/2026-04-03-meaning-preservation-design.md +299 -0
  59. package/lexicon/ai-en.md +162 -0
  60. package/lexicon/ai-ko.md +159 -0
  61. package/package.json +100 -0
  62. package/patina-max/SKILL.md +523 -0
  63. package/patina-max/composite.py +457 -0
  64. package/patterns/en-communication.md +89 -0
  65. package/patterns/en-content.md +133 -0
  66. package/patterns/en-filler.md +113 -0
  67. package/patterns/en-language.md +163 -0
  68. package/patterns/en-structure.md +173 -0
  69. package/patterns/en-style.md +139 -0
  70. package/patterns/en-viral-hook.md +211 -0
  71. package/patterns/ja-communication.md +101 -0
  72. package/patterns/ja-content.md +153 -0
  73. package/patterns/ja-filler.md +123 -0
  74. package/patterns/ja-language.md +190 -0
  75. package/patterns/ja-structure.md +142 -0
  76. package/patterns/ja-style.md +147 -0
  77. package/patterns/ja-viral-hook.md +216 -0
  78. package/patterns/ko-communication.md +98 -0
  79. package/patterns/ko-content.md +154 -0
  80. package/patterns/ko-filler.md +105 -0
  81. package/patterns/ko-language.md +182 -0
  82. package/patterns/ko-structure.md +147 -0
  83. package/patterns/ko-style.md +146 -0
  84. package/patterns/ko-viral-hook.md +211 -0
  85. package/patterns/zh-communication.md +101 -0
  86. package/patterns/zh-content.md +153 -0
  87. package/patterns/zh-filler.md +118 -0
  88. package/patterns/zh-language.md +173 -0
  89. package/patterns/zh-structure.md +145 -0
  90. package/patterns/zh-style.md +159 -0
  91. package/patterns/zh-viral-hook.md +216 -0
  92. package/profiles/academic.md +53 -0
  93. package/profiles/blog.md +81 -0
  94. package/profiles/casual-conversation.md +105 -0
  95. package/profiles/code-comment.md +104 -0
  96. package/profiles/commit-message.md +99 -0
  97. package/profiles/default.md +62 -0
  98. package/profiles/email.md +52 -0
  99. package/profiles/formal.md +98 -0
  100. package/profiles/instructional.md +80 -0
  101. package/profiles/legal.md +57 -0
  102. package/profiles/marketing.md +56 -0
  103. package/profiles/medical.md +53 -0
  104. package/profiles/narrative.md +79 -0
  105. package/profiles/release-notes.md +98 -0
  106. package/profiles/social.md +56 -0
  107. package/profiles/technical.md +53 -0
  108. package/scripts/benchmark-report.mjs +252 -0
  109. package/scripts/check-release-metadata.mjs +48 -0
  110. package/scripts/detector-comparison.mjs +267 -0
  111. package/scripts/lint.mjs +40 -0
  112. package/scripts/precommit-score.mjs +31 -0
  113. package/scripts/prose-score.mjs +186 -0
  114. package/scripts/update-benchmark-ranges.mjs +108 -0
  115. package/src/api.js +330 -0
  116. package/src/auth.js +105 -0
  117. package/src/backends/claude-cli.js +112 -0
  118. package/src/backends/codex-cli.js +121 -0
  119. package/src/backends/contract.js +21 -0
  120. package/src/backends/gemini-cli.js +135 -0
  121. package/src/backends/index.js +159 -0
  122. package/src/cache.js +106 -0
  123. package/src/cli.js +1280 -0
  124. package/src/commands/doctor.js +229 -0
  125. package/src/commands/init.js +208 -0
  126. package/src/config.js +126 -0
  127. package/src/errors.js +53 -0
  128. package/src/features/index.js +96 -0
  129. package/src/features/lexicon.js +90 -0
  130. package/src/features/segment.js +49 -0
  131. package/src/features/stylometry.js +50 -0
  132. package/src/loader.js +103 -0
  133. package/src/logger.js +70 -0
  134. package/src/manifest.js +162 -0
  135. package/src/max-mode.js +207 -0
  136. package/src/ouroboros.js +233 -0
  137. package/src/output.js +480 -0
  138. package/src/prompt-builder.js +409 -0
  139. package/src/providers.js +100 -0
  140. package/src/scoring.js +531 -0
  141. package/src/security.js +133 -0
  142. package/tests/fixtures/suspect-zones/en/ai/en-ai-01.md +16 -0
  143. package/tests/fixtures/suspect-zones/en/ai/en-ai-02.md +16 -0
  144. package/tests/fixtures/suspect-zones/en/ai/en-ai-03.md +17 -0
  145. package/tests/fixtures/suspect-zones/en/ai/en-ai-04.md +15 -0
  146. package/tests/fixtures/suspect-zones/en/ai/en-ai-05.md +16 -0
  147. package/tests/fixtures/suspect-zones/en/ai/en-ai-06-chat-register.md +16 -0
  148. package/tests/fixtures/suspect-zones/en/natural/en-nat-01.md +15 -0
  149. package/tests/fixtures/suspect-zones/en/natural/en-nat-02.md +15 -0
  150. package/tests/fixtures/suspect-zones/en/natural/en-nat-03.md +15 -0
  151. package/tests/fixtures/suspect-zones/en/natural/en-nat-04.md +15 -0
  152. package/tests/fixtures/suspect-zones/en/natural/en-nat-05.md +15 -0
  153. package/tests/fixtures/suspect-zones/expected-ranges.json +939 -0
  154. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-01.md +11 -0
  155. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-02.md +11 -0
  156. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-03.md +11 -0
  157. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-01.md +11 -0
  158. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-02.md +11 -0
  159. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-03.md +11 -0
  160. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-01.md +14 -0
  161. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-02.md +16 -0
  162. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-03.md +15 -0
  163. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-04.md +15 -0
  164. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-05.md +16 -0
  165. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-06-chat-register.md +16 -0
  166. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-01.md +15 -0
  167. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-02.md +15 -0
  168. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-03.md +15 -0
  169. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-04.md +14 -0
  170. package/tests/fixtures/suspect-zones/ko/natural/ko-nat-05.md +15 -0
  171. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-01.md +11 -0
  172. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-02.md +11 -0
  173. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-03.md +11 -0
  174. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-01.md +11 -0
  175. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-02.md +11 -0
  176. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-03.md +11 -0
  177. package/tests/quality/README.md +121 -0
  178. package/tests/quality/benchmark.mjs +306 -0
  179. package/tests/quality/detectors.manual.example.json +31 -0
  180. package/tests/quality/dogfood.mjs +44 -0
@@ -0,0 +1,62 @@
1
+ ---
2
+ profile: default
3
+ name: 기본 프로필
4
+ version: 1.1.0
5
+ scope: 일반 텍스트 — 다른 프로필이 명시되지 않은 모든 경우. 원문의 의도된 톤을 추론하여 그에 맞춰 교정한다.
6
+ voice-overrides:
7
+ first-person: normal # 원문 패턴을 따른다
8
+ opinions: normal # 원문 톤을 따른다
9
+ rhythm-variation: normal # 표준 burstiness 적용
10
+ humor: normal # 원문 톤을 따른다
11
+ messiness: normal # 원문 톤을 따른다
12
+ concrete-emotions: normal # 원문 톤을 따른다
13
+ # pattern-overrides 없음 — 모든 패턴을 기본 가중치로 적용한다.
14
+ # 특정 패턴을 강화/억제하려면 적합한 프로필(blog/academic/formal 등)을 사용하거나
15
+ # 사용자 정의 프로필을 만든다.
16
+ ---
17
+
18
+ # 기본 프로필
19
+
20
+ 원문의 의도된 톤(격식체/구어체/기술 문서/캐주얼 블로그 등)을 먼저 추론하고, 그 톤을 유지하면서 AI 패턴을 제거한다. 어떤 방향으로도 강제로 끌고 가지 않는다.
21
+
22
+ ## 범위
23
+
24
+ 이 프로필은 **다른 프로필이 명시적으로 선택되지 않은 모든 텍스트**에 적용된다. 사용자가 `--profile blog`나 `--profile formal` 같은 옵션을 주지 않으면 default가 사용된다. 가장 자주 쓰이는 프로필이므로 어느 한 톤으로 편향되어서는 안 된다.
25
+
26
+ ## 어조 추론
27
+
28
+ 먼저 원문에서 다음을 관찰한다:
29
+
30
+ - **종결 어미**: `-습니다/-합니다` (격식체) vs `-다/-야` (구어/평어) vs `-요` (존대 구어)
31
+ - **문장 길이**: 한 문장 평균이 20어절 이상이면 격식체, 10어절 이하면 구어체에 가깝다
32
+ - **1인칭 사용**: "필자/저자"는 격식체, "내가/난/우리"는 구어체
33
+ - **구두점/이모지**: `!?`나 이모지 사용은 캐주얼한 톤의 신호
34
+ - **외래어**: "프로젝트/마일스톤" 같은 비즈니스 외래어가 많으면 사무용 격식체
35
+
36
+ 추론한 톤을 유지한다. 격식체 원문을 구어체로 끌어내리지 말고, 구어체 원문을 격식체로 끌어올리지 않는다.
37
+
38
+ ## 어조 지침
39
+
40
+ - **원문의 격식 수준을 따른다.** 원문이 `-습니다`체면 결과도 `-습니다`체. 원문이 평어면 결과도 평어.
41
+ - **불필요하게 캐주얼하게 바꾸지 않는다.** 격식체 원문에 "근데", "엄청", "꽤"를 끼워 넣지 말 것.
42
+ - **불필요하게 격식체로 바꾸지 않는다.** 구어체 원문을 "사료됩니다", "도모하다"로 끌어올리지 말 것.
43
+ - **1인칭은 원문 패턴을 따른다.** 원문에 "나/우리"가 있으면 유지, 없으면 굳이 추가하지 않는다.
44
+ - **구체성 추가는 권장하지만 강제는 하지 않는다.** 원문에 충분한 구체성이 있으면 그대로 두고, 추상적 표현만 구체화한다.
45
+
46
+ ## 패턴 처리
47
+
48
+ - 모든 패턴을 동일한 우선순위로 처리한다.
49
+ - `blocklist`/`allowlist` 설정이 있으면 그에 따라 조절한다.
50
+ - 특정 패턴을 강화/억제하고 싶다면 `--profile <적합한 프로필>`을 명시적으로 사용하거나 사용자 정의 프로필을 만든다.
51
+
52
+ ## voice.md와의 관계
53
+
54
+ 이 프로필은 `core/voice.md`의 모든 지침을 **기본 가중치로** 따른다. 강화도 억제도 없다.
55
+
56
+ | voice.md 지침 | 기본 프로필에서 |
57
+ |--------------|----------------|
58
+ | "의견을 가져라" | **원문대로** — 원문이 단정적이면 단정적, 중립적이면 중립적 |
59
+ | "리듬을 바꿔라" | **표준 burstiness** — 모든 문장이 같은 길이가 되지 않도록 |
60
+ | "나를 써라" | **원문대로** — 원문에 1인칭이 있으면 살리고, 없으면 추가하지 않음 |
61
+ | "좀 지저분해도 괜찮다" | **원문대로** — 원문 톤이 정돈됐으면 정돈된 채로 |
62
+ | "감정을 구체적으로" | **원문대로** — 원문이 감정 표현을 쓰면 구체화, 없으면 추가하지 않음 |
@@ -0,0 +1,52 @@
1
+ ---
2
+ profile: email
3
+ name: 비즈니스 이메일 프로필
4
+ version: 1.0.0
5
+ scope: 비즈니스 이메일, 공식 서신, 사내 커뮤니케이션
6
+ voice-overrides:
7
+ first-person: normal # 1인칭 자연스럽게 사용
8
+ opinions: reduce # 의견 표현 절제
9
+ rhythm-variation: normal # 리듬 변화 유지
10
+ humor: reduce # 유머 절제 (가벼운 것은 허용)
11
+ messiness: reduce # 불완전 구조 절제
12
+ concrete-emotions: reduce # 감정 표현 절제
13
+ pattern-overrides:
14
+ ko:
15
+ 18: reduce # 한자어/공식어 — 이메일에서 중간 수준 격식 허용
16
+ 21: reduce # 아첨 — 약간의 공손함은 이메일 관례
17
+ 27: reduce # 수동태 — 이메일에서 적당한 수동태 허용
18
+ en:
19
+ 18: suppress # Curly quotes — 이메일에서 비해당
20
+ 21: reduce # Sycophantic — some politeness is email convention
21
+ 8: reduce # Copula avoidance — "serves as" tolerable in formal email
22
+ zh:
23
+ 18: reduce # 公文体 — 이메일에서 중간 수준 허용
24
+ 21: reduce # 谄媚 — 약간의 공손함 허용
25
+ ja:
26
+ 16: reduce # 敬語 — 비즈니스 이메일에서 적절한 경어 허용
27
+ 18: reduce # である調 — 이메일에서 적당한 격식 허용
28
+ 21: reduce # お世辞 — 약간의 공손함 허용
29
+ ---
30
+
31
+ # 비즈니스 이메일 프로필
32
+
33
+ 비즈니스 이메일의 적절한 격식과 공손함을 유지하면서 AI 패턴을 제거한다. "예의 바른" 것과 "챗봇 같은" 것의 경계를 지킨다.
34
+
35
+ ## 범위
36
+
37
+ 비즈니스 이메일, 공식 서신, 사내 커뮤니케이션. 마케팅 이메일이나 뉴스레터는 `default` 또는 `blog` 프로필 사용.
38
+
39
+ ## 어조 지침
40
+
41
+ - **적절한 격식을 유지한다.** 너무 캐주얼하지도, 너무 딱딱하지도 않게.
42
+ - **공손함은 허용한다.** "감사합니다", "확인 부탁드립니다" 등은 이메일 관례. 단 "좋은 질문이십니다!"는 교정 대상.
43
+ - **1인칭은 자연스럽게.** "제가 확인한 바로는", "저희 팀에서는" — 이메일에서 1인칭은 표준.
44
+ - **간결하게 쓴다.** 이메일은 짧을수록 좋다. 불필요한 도입부, 결론 공식은 삭제.
45
+
46
+ ## 적극 교정 대상
47
+
48
+ - **챗봇 표현 (#19):** "궁금한 점이 있으시면 말씀해 주세요"는 이메일에서도 교정. "회신 부탁드립니다"로 충분.
49
+ - **과도한 중요성 부여 (#1):** 이메일에서 "획기적인 성과"는 부적절. 구체적 결과로 대체.
50
+ - **채움 표현 (#22):** "주목할 만한 점은 ~라는 것이다" → 바로 핵심을 말한다.
51
+ - **과도한 헤징 (#23):** "어쩌면 ~일 수도 있을 것으로 사료됩니다" → "~일 수 있습니다".
52
+ - **AI 고빈도 어휘 (#7):** "시너지를 극대화하고 레버리지하여" → 구체적으로 뭘 하자는 건지 쓴다.
@@ -0,0 +1,98 @@
1
+ ---
2
+ profile: formal
3
+ name: 정형 문서 프로필
4
+ version: 1.0.0
5
+ scope: 이력서, 자기소개서, 사업 제안서, 공식 보고서, 커버레터
6
+ voice-overrides:
7
+ first-person: reduce # 1인칭 최소화 — 이력서는 행위 중심
8
+ opinions: suppress # 의견 삽입 억제 — 사실 중심
9
+ rhythm-variation: allow # 리듬 변화는 유지하되 과하지 않게
10
+ humor: suppress # 유머 억제 — 격식 문서에 부적절
11
+ messiness: suppress # "좀 지저분해도 괜찮다" 억제
12
+ concrete-emotions: suppress # 감정 표현 억제 — 성과와 사실 중심
13
+ pattern-overrides:
14
+ ko:
15
+ 25: suppress # 구조적 반복 — 정형 문서는 반복 구조가 정상 (경력 항목, 불릿 리스트)
16
+ 15: reduce # 인라인 헤더 — 이력서 불릿은 볼드 레이블이 관례
17
+ 14: reduce # 볼드체 — 이력서의 직함/회사명 볼드는 관례
18
+ 18: reduce # 한자어/공식어 — 정형 문서에서는 격식체가 적절
19
+ 8: reduce # ~적 접미사 — 정형 문서에서 일부 허용 (과도한 경우만 교정)
20
+ en:
21
+ 25: suppress # Structural repetition — formal docs have intentionally uniform structure
22
+ 15: reduce # Inline-header lists — bold labels are standard in resumes
23
+ 14: reduce # Boldface — job titles, company names in bold is convention
24
+ 16: suppress # Title Case — formal document headings conventionally use title case
25
+ zh:
26
+ 25: suppress # 结构性重复 — 简历/报告条目可有统一结构
27
+ 15: reduce # 内联标题 — “职责/成果”标签是正式文档惯例
28
+ 14: reduce # 加粗 — 职位/公司名加粗可接受
29
+ 18: reduce # 书面/公文体 — 正式文档允许适度正式
30
+ 8: reduce # 四字格 — 正式文档中少量四字格可接受
31
+ ja:
32
+ 25: suppress # 構造的繰り返し — 職務経歴や提案書では統一構造が自然
33
+ 15: reduce # インラインヘッダー — 役割/成果ラベルは正式文書の慣例
34
+ 14: reduce # 太字 — 役職名・会社名の強調は許容
35
+ 18: reduce # 硬質文体 — 正式文書では適度な硬さを許容
36
+ 8: reduce # 〜的 — 正式文書では一部許容
37
+ ---
38
+
39
+ # 정형 문서 프로필
40
+
41
+ 이력서, 자기소개서, 사업 제안서 등 격식을 유지해야 하는 문서에 사용한다.
42
+ AI 패턴은 제거하되, 전문적인 어조를 유지한다.
43
+
44
+ ## 범위
45
+
46
+ 이 프로필은 **격식을 요구하는 전문 문서**에 한정된다:
47
+ - 이력서 / CV
48
+ - 자기소개서 / 커버레터
49
+ - 사업 제안서
50
+ - 공식 보고서
51
+ - 기업 소개서
52
+
53
+ 개인 블로그, 에세이, SNS 글은 이 프로필의 범위가 아니다.
54
+
55
+ ## 핵심 원칙
56
+
57
+ 정형 문서의 AI 교정에서 가장 흔한 실수는 **과도한 캐주얼화**다.
58
+ voice.md의 지침("의견을 가져라", "좀 지저분해도 괜찮다", "나를 써라")은
59
+ 블로그나 에세이에는 적절하지만, 이력서에 적용하면 전문성을 해친다.
60
+
61
+ 이 프로필은 voice.md의 캐주얼 지침을 억제하고, AI 패턴 제거와 격식 유지를 양립시킨다.
62
+
63
+ ## 어조 지침
64
+
65
+ - **간결 서술체를 유지한다.** "~함", "~설계", "~구축", "~도입" — 이력서의 기본 어미.
66
+ - **구어체로 바꾸지 않는다.** "~했음", "~만들었음"(일기체)이 아니라 "~함", "~수행"(서술체).
67
+ - **1인칭 사용을 최소화한다.** "내가 ~했다"보다 "~를 설계하여 ~를 달성함"이 이력서에 적합하다.
68
+ - **감정/의견을 삽입하지 않는다.** "아무도 시키지 않았지만", "생각보다 심해서" 같은 표현은 억제한다.
69
+ - **여담과 곁가지를 넣지 않는다.** 정형 문서는 정보 밀도가 높아야 한다.
70
+ - **구어체 축약을 피한다.** "이게 없으면", "세포를 찾는 건 됐는데" 같은 표현은 "해당 기능 부재 시", "세포 탐지는 가능하나"로 유지한다.
71
+
72
+ ## 패턴 처리 (한국어)
73
+
74
+ - **구조적 반복(ko #25):** 이력서의 경력 항목, 프로젝트 불릿은 동일 구조가 정상이다. 교정하지 않는다.
75
+ - **인라인 헤더(ko #15), 볼드체(ko #14):** "**역할:** 백엔드 리드" 같은 포맷은 이력서 관례다. 과도한 경우만 교정.
76
+ - **한자어/공식어(ko #18), ~적 접미사(ko #8):** 정형 문서에서 "혁신적", "체계적"은 맥락에 따라 적절하다. 과도한 경우만 교정.
77
+ - **번역체(ko #26):** 정형 문서에서도 번역체는 부자연스럽다. 기본 강도로 교정.
78
+ - **중요도 과장(ko #1):** "획기적인", "혁명적인" 같은 과장은 정형 문서에서도 제거한다. 기본 강도 유지.
79
+
80
+ ## Pattern Handling (English)
81
+
82
+ - **Structural repetition (en #25):** Resume bullet points follow uniform structure by design. Do not correct.
83
+ - **Inline-header lists (en #15), Boldface (en #14):** "**Role:** Backend Lead" is standard resume formatting. Only correct excessive use.
84
+ - **Title Case (en #16):** Formal document headings conventionally use title case. Do not correct.
85
+ - **Importance inflation (en #1):** "Groundbreaking", "revolutionary" are still AI patterns in formal docs. Correct normally.
86
+ - **AI vocabulary (en #7):** "Delve", "leverage", "spearhead" — correct these even in formal contexts. Use plain professional language.
87
+
88
+ ## voice.md 오버라이드
89
+
90
+ 이 프로필은 `core/voice.md`의 지침을 다음과 같이 조절한다:
91
+
92
+ | voice.md 지침 | 정형 문서 프로필에서 |
93
+ |--------------|-------------------|
94
+ | "의견을 가져라" | **억제** — 이력서는 사실과 성과 중심 |
95
+ | "리듬을 바꿔라" | **허용** — 단조로움 방지는 유지하되 과하지 않게 |
96
+ | "나를 써라" | **축소** — 1인칭 최소화, 행위 중심 서술 |
97
+ | "좀 지저분해도 괜찮다" | **억제** — 정형 문서는 깔끔한 구조 필수 |
98
+ | "감정을 구체적으로" | **억제** — 감정 대신 수치와 성과로 표현 |
@@ -0,0 +1,80 @@
1
+ ---
2
+ profile: instructional
3
+ name: 인스트럭셔널/하우투 프로필
4
+ version: 1.0.0
5
+ scope: 튜토리얼, 하우투 가이드, 단계별 설명, 기술 문서, 교육 콘텐츠
6
+ voice-overrides:
7
+ imperative-verbs: amplify # 명령형 동사 강화 (설치하라, 실행하라, 확인하라)
8
+ numbered-structure: amplify # 번호 기반 단계 구조 허용/강화
9
+ hedging: suppress # 유보 표현 억제 ("~할 수도 있습니다" → "~합니다")
10
+ first-person: reduce # 1인칭 최소화 (독자 중심 지시문)
11
+ opinions: reduce # 주관적 의견 최소화 (지시 명확성 우선)
12
+ scene-detail: suppress # 장면 묘사 억제 (지시에 집중)
13
+ pattern-overrides:
14
+ ko:
15
+ 25: allow # 번호 목록 구조 — 인스트럭셔널에서는 필수 허용
16
+ 22: reduce # 필러 관용구 — 지시문에서 불필요한 완충 표현 제거
17
+ 28: suppress # 과도한 한정 표현 — 지시문에서 명확성 저해
18
+ 15: allow # 인라인 헤더 — 단계 구분에 유용
19
+ 14: reduce # 볼드체 — 핵심 명령어에만 허용, 과도한 볼드 교정
20
+ en:
21
+ 25: allow # Numbered structure — essential for instructional content
22
+ 22: reduce # Filler idioms — reduce padding in instructional prose
23
+ 28: suppress # Over-qualifying — clarity requires commitment
24
+ 15: allow # Inline-header lists — useful for step delineation
25
+ 14: reduce # Boldface — allow for key terms/commands, correct overuse
26
+ zh:
27
+ 25: allow # 结构/编号 — 教程需要清晰步骤,编号结构必须保留
28
+ 22: reduce # 填充表达 — 指令文里减少铺垫和寒暄
29
+ 23: amplify # 过度弱化 — 步骤说明需要明确,不要层层对冲
30
+ 15: allow # 内联标题 — 可用于步骤/参数分区
31
+ 14: reduce # 加粗 — 命令、文件名、关键提醒可加粗,滥用才纠正
32
+ ja:
33
+ 25: allow # 構造/番号 — 手順説明では番号構造が必要
34
+ 22: reduce # フィラー — 手順では前置きや緩衝表現を減らす
35
+ 23: amplify # 過剰ヘッジ — 手順は明確さを優先する
36
+ 15: allow # インラインヘッダー — 手順やパラメータ整理に有用
37
+ 14: reduce # 太字 — コマンド/ファイル名/注意点の強調は許容
38
+ ---
39
+
40
+ # 인스트럭셔널/하우투 프로필
41
+
42
+ 튜토리얼과 단계별 가이드에 맞는 교정을 수행한다. 독자가 지시를 따를 수 있도록 명확하고 행동 지향적인 문장을 만드는 것이 핵심이다.
43
+
44
+ ## 범위
45
+
46
+ 이 프로필은 **튜토리얼, 하우투 가이드, 단계별 설명, 기술 문서, 교육 콘텐츠**에 적합하다. 개인 에세이, 뉴스 기사, 마케팅 카피는 이 프로필의 범위가 아니다.
47
+
48
+ ## 어조 지침 (한국어)
49
+
50
+ - **명령형으로 시작한다.** "설치합니다" → "설치하세요" 또는 "설치하라." 독자에게 직접 행동을 지시한다.
51
+ - **번호 구조를 유지한다.** 단계는 번호로 구분되어야 한다. AI가 쓴 것처럼 보이는 번호 목록이라도, 인스트럭셔널 맥락에서는 구조 자체가 목적이다.
52
+ - **유보 표현을 제거한다.** "~할 수도 있습니다", "~인 것 같습니다" → "~합니다", "~하세요." 독자는 명확한 지시가 필요하다.
53
+ - **짧고 행동 중심으로.** 각 단계는 단일 행동을 담아야 한다. 하나의 문장이 두 가지 행동을 포함하면 쪼갠다.
54
+ - **독자를 주어로.** "사용자는 ~을 입력한다" 대신 "~을 입력하세요." 독자가 직접 행동하는 주체임을 명확히 한다.
55
+
56
+ ## Tone guidance (English)
57
+
58
+ - **Lead with imperative verbs.** "Install," "Run," "Check" — not "You should install" or "It is recommended to run." Direct commands reduce cognitive load.
59
+ - **Keep numbered structure.** Steps need numbers. Even if a numbered list pattern fires, instructional content depends on clear sequencing — structure wins here.
60
+ - **Cut the hedging.** "You may want to consider" → "Do." "This might help" → "This fixes it." Readers following instructions need certainty.
61
+ - **One action per step.** If a sentence contains two actions, split it into two steps.
62
+ - **Address the reader directly.** "The user enters" → "Enter." Active second-person keeps instructions scannable.
63
+
64
+ ## 패턴 처리
65
+
66
+ - **번호 목록(ko #25):** 인스트럭셔널 맥락에서는 번호 구조가 핵심이다. 이 패턴은 허용(allow)으로 설정되어 교정 대상에서 제외한다.
67
+ - **필러 관용구(ko #22):** 지시문에서 "우선", "먼저 확인해야 할 것은", "중요한 점은" 같은 완충 표현은 불필요하다. 축소 교정.
68
+ - **과도한 한정(ko #28):** "어느 정도", "일반적으로는", "보통의 경우" — 지시문에서 이런 표현은 독자를 혼란하게 한다. 억제.
69
+ - **인라인 헤더(ko #15):** 단계 구분 헤더는 허용.
70
+ - **볼드체(ko #14):** 명령어, 파일명, 핵심 용어에만 허용. 모든 문장에 볼드를 뿌리는 패턴만 교정.
71
+
72
+ ## voice.md 오버라이드
73
+
74
+ | voice.md 지침 | 인스트럭셔널 프로필에서 |
75
+ |---|---|
76
+ | "나를 써라" | **축소** — 독자 중심 지시문이 우선 |
77
+ | "의견을 가져라" | **축소** — 명확한 지시가 의견보다 중요 |
78
+ | "좀 지저분해도 괜찮다" | **억제** — 인스트럭셔널은 구조와 명확성이 핵심 |
79
+ | "리듬을 바꿔라" | **유지** — 단문 지시가 기본이므로 리듬은 자연히 형성됨 |
80
+ | "감정을 구체적으로" | **억제** — 지시문에서 감정 표현은 불필요 |
@@ -0,0 +1,57 @@
1
+ ---
2
+ profile: legal
3
+ name: 법률 문서 프로필
4
+ version: 1.0.0
5
+ scope: 계약서, 법률 의견서, 판결문, 약관, 법률 보고서
6
+ voice-overrides:
7
+ first-person: suppress # 1인칭 억제
8
+ opinions: suppress # 의견 억제
9
+ rhythm-variation: reduce # 리듬 변화 절제 (법률 문서는 균일한 문체)
10
+ humor: suppress # 유머 억제
11
+ messiness: suppress # 불완전 구조 억제
12
+ concrete-emotions: suppress # 감정 표현 억제
13
+ pattern-overrides:
14
+ ko:
15
+ 18: suppress # 한자어/공식어 — 법률 문서의 표준 어휘
16
+ 27: suppress # 수동태 — 법률 문서에서 "~에 의하여 정해진다" 등 관례
17
+ 12: suppress # ~에 있어서 — 법률 문서에서 관례적 표현
18
+ 22: reduce # 채움 표현 — "~하는 경우에 한하여" 등 법률적 정밀성
19
+ 23: reduce # 헤징 — 법적 불확실성 표현 허용
20
+ 8: reduce # ~적 접미사 — 법률 용어에서 일부 허용 ("실질적", "법적")
21
+ en:
22
+ 26: suppress # Passive nominalization — standard legal form
23
+ 22: reduce # Filler — "in order to" sometimes needed in legal precision
24
+ 23: reduce # Hedging — legal uncertainty language allowed
25
+ 27: suppress # Zombie nouns — legal definitions use nominalized forms
26
+ zh:
27
+ 18: suppress # 公文体 — 법률 중국어의 표준
28
+ 27: suppress # 被字句 — 법률 문서에서 관례
29
+ 12: suppress # 冗长介词 — 법률 문서에서 정밀성 위해 필요
30
+ ja:
31
+ 18: suppress # である調 — 법률 일본어의 표준
32
+ 16: suppress # 敬語 — 법률 문서에서는 비해당
33
+ 27: reduce # ている — 법률 문서에서 일부 허용
34
+ ---
35
+
36
+ # 법률 문서 프로필
37
+
38
+ 법률 문서의 관행적 표현을 보존하면서 AI 패턴을 제거한다. 수동태, 명사화, 격식체 등 법률 글쓰기의 표준 요소는 건드리지 않는다.
39
+
40
+ ## 범위
41
+
42
+ 계약서, 법률 의견서, 판결문, 약관, 법률 보고서. 법률 블로그나 법률 뉴스 기사는 `default` 또는 `blog` 프로필 사용.
43
+
44
+ ## 어조 지침
45
+
46
+ - **법률 문서의 격식과 정밀성을 유지한다.** 구어체로 바꾸지 않는다.
47
+ - **관례적 법률 용어를 보존한다.** "전술한", "상기", "본 계약" 등은 교정 대상이 아니다.
48
+ - **수동태와 명사화를 허용한다.** "~에 의하여 정해진다", "~에 관한 사항" 등은 법률 문체.
49
+ - **"~에 있어서"를 허용한다.** 법률에서는 정밀성을 위해 필요한 경우가 많다.
50
+
51
+ ## 적극 교정 대상
52
+
53
+ - **AI 고빈도 어휘 (#7):** "혁신적인 법률 서비스", "체계적인 법적 프레임워크" 등은 AI 냄새. 교정.
54
+ - **과도한 중요성 부여 (#1):** 법률 문서에서 "획기적인 판결"은 사실 판단이지 수식이 아니다. 교정.
55
+ - **모호한 출처 (#5):** 법률 문서에서 출처 불명은 더더욱 부적절.
56
+ - **유의어 순환 (#11):** 법률 문서에서 같은 개체를 다른 이름으로 부르면 법적 모호성 유발. 적극 교정.
57
+ - **과제와 전망 공식 (#6):** 법률 의견서 결론에서도 빠지기 쉬움. 구체적 법적 분석으로 대체.
@@ -0,0 +1,56 @@
1
+ ---
2
+ profile: marketing
3
+ name: 마케팅/광고 프로필
4
+ version: 1.0.0
5
+ scope: 광고 카피, 마케팅 콘텐츠, 제품 소개, 랜딩 페이지, 프레스 릴리즈
6
+ voice-overrides:
7
+ first-person: normal # 1인칭 브랜드 목소리에 따라
8
+ opinions: amplify # 의견/포지셔닝 강화
9
+ rhythm-variation: amplify # 리듬 변화 강화
10
+ humor: allow # 유머 허용 (브랜드에 따라)
11
+ messiness: reduce # 불완전 구조 절제 (전문성 유지)
12
+ concrete-emotions: amplify # 구체적 감정 호소 강화
13
+ pattern-overrides:
14
+ ko:
15
+ 4: reduce # 홍보성 언어 — 마케팅에서는 일부 허용, 과도한 것만 교정
16
+ 17: reduce # 이모지 — 마케팅 자료에서 일부 허용
17
+ 14: reduce # 볼드체 — 마케팅 자료에서 강조 요소로 허용
18
+ 1: reduce # 중요성 부여 — 마케팅에서 일정 수준 허용, 과장만 교정
19
+ en:
20
+ 4: reduce # Promotional — some promotional language allowed in marketing
21
+ 17: reduce # Emojis — allowed in marketing materials
22
+ 14: reduce # Boldface — emphasis element in marketing
23
+ 1: reduce # Significance — some allowed, only over-inflation corrected
24
+ zh:
25
+ 4: reduce # 宣传性语言 — 마케팅에서 허용
26
+ 17: reduce # 表情符号 — 허용
27
+ 14: reduce # 加粗 — 허용
28
+ ja:
29
+ 4: reduce # 宣伝的言語 — 마케팅에서 허용
30
+ 17: reduce # 絵文字 — 허용
31
+ 14: reduce # 太字 — 허용
32
+ ---
33
+
34
+ # 마케팅/광고 프로필
35
+
36
+ 마케팅 콘텐츠의 설득력을 유지하면서 AI가 생성한 뻔한 패턴을 제거한다. 홍보성 언어는 마케팅의 본질이므로 일정 수준 허용하되, AI가 찍어낸 듯한 제네릭 카피는 교정한다.
37
+
38
+ ## 범위
39
+
40
+ 광고 카피, 마케팅 콘텐츠, 제품 소개, 랜딩 페이지, 프레스 릴리즈. 기업 블로그는 `blog` 프로필이 더 적합.
41
+
42
+ ## 어조 지침
43
+
44
+ - **브랜드 목소리를 반영한다.** 원문의 톤이 활기차면 활기차게, 고급스러우면 고급스럽게.
45
+ - **구체적으로 쓴다.** "최고의 솔루션" 대신 "응답 시간 3초 이내". 마케팅도 구체적일 때 설득력이 있다.
46
+ - **CTA(Call to Action)는 직접적으로.** 돌려 말하지 않는다.
47
+ - **경쟁사 비교 시 구체적 수치로.** "뛰어난 성능" 대신 "경쟁 제품 대비 40% 빠른 로딩".
48
+
49
+ ## 적극 교정 대상
50
+
51
+ - **AI 고빈도 어휘 (#7):** "혁신적인 솔루션", "체계적인 접근" → 제품이 뭘 하는지 구체적으로.
52
+ - **과제와 전망 공식 (#6):** 마케팅 결론이 "밝은 미래가 기대된다"이면 실패. 구체적 CTA로 대체.
53
+ - **모호한 출처 (#5):** "업계 전문가 추천" → 누가, 어디서, 무슨 맥락에서?
54
+ - **유의어 순환 (#11):** 제품명을 일관되게. "우리 솔루션", "이 플랫폼", "해당 서비스" 혼재 금지.
55
+ - **표면적 분석 (#3):** "고객 경험을 혁신하며 비즈니스 가치를 극대화하고" → 어떻게?
56
+ - **챗봇 표현 (#19):** 마케팅 자료에 "궁금한 점이 있으시면" 포함 금지.
@@ -0,0 +1,53 @@
1
+ ---
2
+ profile: medical
3
+ name: 의료/의학 문서 프로필
4
+ version: 1.0.0
5
+ scope: 임상 보고서, 의학 논문, 진료 가이드라인, 약물 정보, 환자 교육 자료
6
+ voice-overrides:
7
+ first-person: reduce # 1인칭 절제
8
+ opinions: suppress # 의견 억제, 근거 기반
9
+ rhythm-variation: normal # 리듬 변화 유지
10
+ humor: suppress # 유머 억제
11
+ messiness: suppress # 불완전 구조 억제
12
+ concrete-emotions: reduce # 감정 표현 절제
13
+ pattern-overrides:
14
+ ko:
15
+ 23: reduce # 헤징 — 의학적 불확실성 ("~일 수 있다") 허용
16
+ 27: reduce # 수동태 — 방법론에서 수동태 허용
17
+ 18: reduce # 한자어/공식어 — 의학 용어에서 일부 허용
18
+ en:
19
+ 23: reduce # Hedging — medical uncertainty ("may suggest") allowed
20
+ 26: reduce # Passive — standard in methods sections
21
+ 27: reduce # Zombie nouns — some nominalization acceptable in medical text
22
+ zh:
23
+ 23: reduce # 过度弱化 — 의학적 불확실성 허용
24
+ 27: reduce # 被字句 — 방법론에서 수동태 허용
25
+ 18: reduce # 公文体 — 의학 문서 격식 허용
26
+ ja:
27
+ 23: reduce # ヘッジング — 의학적 불확실성 허용
28
+ 18: reduce # である調 — 의학 문서 문체 허용
29
+ 16: reduce # 敬語 — 환자 교육 자료에서 일부 허용
30
+ ---
31
+
32
+ # 의료/의학 문서 프로필
33
+
34
+ 의학 문서의 엄밀성과 불확실성 표현을 보존하면서 AI 패턴을 제거한다. 의학적 헤징, 수동태, 전문 용어는 건드리지 않는다.
35
+
36
+ ## 범위
37
+
38
+ 임상 보고서, 의학 논문, 진료 가이드라인, 약물 정보, 환자 교육 자료. 건강 블로그나 대중 건강 기사는 `default` 프로필 사용.
39
+
40
+ ## 어조 지침
41
+
42
+ - **의학적 정확성이 최우선이다.** 간결하게 만들더라도 의미를 바꾸지 않는다.
43
+ - **헤징은 허용한다.** "이 결과는 ~를 시사한다", "~와 관련이 있을 수 있다"는 의학에서 정당한 불확실성 표현.
44
+ - **수동태는 방법론에서 허용.** "환자는 무작위로 배정되었다"는 임상시험의 표준 표현.
45
+ - **전문 용어를 보존한다.** 의학 용어를 쉬운 말로 바꾸지 않는다 (환자 교육 자료 제외).
46
+
47
+ ## 적극 교정 대상
48
+
49
+ - **과도한 중요성 부여 (#1):** "획기적인 치료법"은 임상 데이터가 뒷받침하지 않으면 위험. 적극 교정.
50
+ - **모호한 출처 (#5):** 의학에서 "연구에 따르면"은 어떤 연구인지 반드시 밝혀야. 적극 교정.
51
+ - **홍보성 언어 (#4):** 약물/치료법에 대한 과장 표현은 의학에서 특히 위험. 적극 교정.
52
+ - **과제와 전망 공식 (#6):** "더 많은 연구가 필요하다"로 끝나는 것은 AI 공식. 어떤 연구가 왜 필요한지 구체화.
53
+ - **AI 고빈도 어휘 (#7):** "혁신적인 치료 접근법", "체계적인 관리" 등은 AI 신호. 교정.
@@ -0,0 +1,79 @@
1
+ ---
2
+ profile: narrative
3
+ name: 내러티브/에세이 프로필
4
+ version: 1.0.0
5
+ scope: 1인칭 에세이, 개인 서사, 회고록, 경험 기반 글쓰기
6
+ voice-overrides:
7
+ first-person: amplify # 1인칭 시점 강화 (화자가 글의 중심)
8
+ scene-detail: amplify # 장면 묘사, 구체적 감각 디테일 강화
9
+ concrete-emotions: amplify # 추상적 감정 대신 구체적 상황/장면으로 표현
10
+ opinions: amplify # 화자의 주관적 반응과 입장 강화
11
+ rhythm-variation: amplify # 단문과 장문 교차로 호흡감 생성
12
+ hedging: suppress # 과도한 유보 표현 억제 (서사에서 자신감 있는 목소리)
13
+ structure-heavy: suppress # 헤딩, 번호 목록 억제 (서사 흐름 우선)
14
+ pattern-overrides:
15
+ ko:
16
+ 26: reduce # 번역체 — 내러티브에서 구어체 허용
17
+ 27: reduce # 접속사 반복 — 서사 흐름에서 일부 허용
18
+ 14: suppress # 볼드체 — 에세이에서 강조 마크업 불필요
19
+ 15: suppress # 인라인 헤더 목록 — 서사에 어울리지 않음
20
+ 25: suppress # 번호 목록 구조 — 에세이 흐름 방해
21
+ en:
22
+ 26: reduce # Translation-ism — conversational register allowed
23
+ 27: reduce # Connector repetition — narrative flow allows it
24
+ 14: suppress # Boldface — unnecessary in essay prose
25
+ 15: suppress # Inline-header lists — breaks narrative continuity
26
+ 25: suppress # Numbered structure — not appropriate for essays
27
+ zh:
28
+ 26: reduce # 翻译腔 — 叙事里可保留少量口语化/外来节奏
29
+ 13: reduce # 连接词 — 叙事推进中少量“后来/然后”可自然存在
30
+ 14: suppress # 加粗 — 叙事散文里强调标记通常不需要
31
+ 15: suppress # 内联标题 — 会打断叙事连续性
32
+ 25: suppress # 结构性重复 — 编号/模板段落不适合个人叙事
33
+ ja:
34
+ 26: reduce # 翻訳調 — 語りの中では少量の会話調を許容
35
+ 13: reduce # 接続表現 — 時間の流れを示す接続は一部許容
36
+ 14: suppress # 太字 — エッセイ本文では不要
37
+ 15: suppress # インラインヘッダー — 物語の流れを切る
38
+ 25: suppress # 構造的繰り返し — 番号/テンプレ段落は個人叙事に不向き
39
+ ---
40
+
41
+ # 내러티브/에세이 프로필
42
+
43
+ 1인칭 서사와 경험 기반 에세이에 맞는 교정을 수행한다. 화자의 목소리와 시간 흐름, 감정적 진실이 글의 핵심이다.
44
+
45
+ ## 범위
46
+
47
+ 이 프로필은 **1인칭 에세이, 개인 서사, 회고록, 경험 기반 글쓰기**에 적합하다. 학술 논문, 기업 보고서, 뉴스 기사는 이 프로필의 범위가 아니다.
48
+
49
+ ## 어조 지침 (한국어)
50
+
51
+ - **화자가 글의 중심이다.** "내가", "나는", "그때 내가 느낀 건" — 1인칭 시점을 기본으로 유지한다.
52
+ - **장면으로 보여준다.** "힘들었다"가 아니라 "새벽 2시에 혼자 형광등 아래 앉아 있었다." 추상적 감정보다 구체적 상황이 독자를 끌어당긴다.
53
+ - **시간 흐름을 살린다.** 과거 시제와 회상이 자연스럽게 이어지도록 한다. "그때", "그 다음", "지금 생각하면" — 서사의 시간 감각을 유지한다.
54
+ - **감정을 구체적으로 드러낸다.** "불안했다" 대신 "손이 떨렸다", "이유 없이 자꾸 창문을 봤다" 같은 구체적 반응으로 표현한다.
55
+ - **마무리를 깔끔하게 닫지 않아도 된다.** 에세이의 끝이 열려 있거나 불확실함으로 끝나도 괜찮다. 억지 결론보다 솔직한 미결이 낫다.
56
+
57
+ ## Tone guidance (English)
58
+
59
+ - **Stay in first person.** "I", "me", "what I realized" — the narrator is the anchor.
60
+ - **Show the scene.** Not "it was difficult" but "I was sitting alone under a flickering light at 2 a.m." Concrete detail pulls readers in more than abstraction.
61
+ - **Let time breathe.** Past tense and reflection flow naturally — "back then," "later I found out," "looking back now." Preserve the narrative's sense of time.
62
+ - **Name the feeling specifically.** Not "I felt anxious" but "my hands wouldn't stop moving" or "I kept checking the door for no reason."
63
+ - **Resist the tidy ending.** Essays can close on uncertainty or open questions. An honest non-resolution beats a forced epiphany.
64
+
65
+ ## 패턴 처리
66
+
67
+ - **번호 목록(ko #25), 인라인 헤더(ko #15), 볼드체(ko #14):** 서사 에세이에 어울리지 않는다. 나타나면 산문으로 풀어쓴다.
68
+ - **번역체(ko #26), 접속사 반복(ko #27):** 구어체 서사에서 일부 허용. 과도할 때만 교정.
69
+ - **헤징 표현:** 서사에서의 유보("~일 수도 있다", "어떻게 보면")는 화자의 성찰로 읽힐 수 있다. 과도한 AI식 유보만 제거한다.
70
+
71
+ ## voice.md 오버라이드
72
+
73
+ | voice.md 지침 | 내러티브 프로필에서 |
74
+ |---|---|
75
+ | "나를 써라" | **강화** — 1인칭이 서사의 기본값 |
76
+ | "감정을 구체적으로" | **강화** — 장면과 신체 반응으로 감정을 드러낸다 |
77
+ | "리듬을 바꿔라" | **강화** — 호흡감 있는 단문/장문 교차 |
78
+ | "의견을 가져라" | **강화** — 화자의 입장과 성찰이 서사의 동력 |
79
+ | "좀 지저분해도 괜찮다" | **강화** — 완벽하게 정리되지 않은 생각이 더 진짜처럼 보인다 |
@@ -0,0 +1,98 @@
1
+ ---
2
+ profile: release-notes
3
+ name: 릴리스 노트 프로필
4
+ version: 1.0.0
5
+ scope: changelog, release notes, GitHub Releases, npm/GHCR release announcement
6
+ voice-overrides:
7
+ first-person: reduce # 팀/제품 중심, 과한 1인칭 억제
8
+ opinions: reduce # 사용자 영향과 migration 중심
9
+ rhythm-variation: normal # 항목별 길이 차이 허용
10
+ humor: suppress # 릴리스 공지는 명확성 우선
11
+ messiness: reduce # 섹션/목록 구조 유지
12
+ concrete-emotions: reduce # 감정 대신 영향·조치
13
+ user-impact: amplify # 변경의 사용자 영향 명시
14
+ pattern-overrides:
15
+ ko:
16
+ 14: reduce # 볼드체 — 릴리스 노트 heading/emphasis 일부 허용
17
+ 15: reduce # 인라인 헤더 — 변경 분류에 허용
18
+ 24: amplify # 낙관 결론 — 구체적 영향으로 교체
19
+ 25: reduce # 번호/목록 구조 — 릴리스 노트에서는 표준
20
+ en:
21
+ 14: reduce # Boldface — allowed for headings/emphasis
22
+ 15: reduce # Inline headers — standard in release notes
23
+ 24: amplify # Generic optimism — replace with user impact
24
+ 25: reduce # Numbered/list structure — legitimate here
25
+ zh:
26
+ 14: reduce # 加粗 — 发布说明中可作为强调
27
+ 15: reduce # 内联标题 — 变更分类中可保留
28
+ 24: amplify # 空泛乐观结尾 — 改写为具体影响
29
+ 25: reduce # 列表结构 — 发布说明中正常
30
+ ja:
31
+ 14: reduce # 太字 — リリースノートでは一部許容
32
+ 15: reduce # インラインヘッダー — 変更分類として許容
33
+ 24: amplify # 空虚な楽観結論 — 具体的な影響へ
34
+ 25: reduce # 箇条書き構造 — リリースノートでは標準
35
+ ---
36
+
37
+ # 릴리스 노트 프로필 (`release-notes`)
38
+
39
+ 릴리스 노트는 마케팅 카피와 운영 공지의 중간이다. 사용자가 궁금해하는 것은 "무엇이 바뀌었나"보다 **내가 무엇을 해야 하나**, **무엇이 깨질 수 있나**, **왜 업그레이드해야 하나**다.
40
+
41
+ ## 범위
42
+
43
+ CHANGELOG 항목, GitHub Releases, npm/GHCR 릴리스 공지, 버전 업그레이드 안내. 내부 커밋 메시지는 `commit-message`, 긴 기술 설명은 `technical` 프로필을 쓴다.
44
+
45
+ ## 적극 교정할 genre tell
46
+
47
+ 1. **Generic excitement** — `We're excited to announce`, `a new chapter`, `앞으로가 기대됩니다`만 있고 영향이 없는 문장.
48
+ 2. **Feature dump** — 항목은 많은데 사용자 영향, migration, breaking change가 빠진 목록.
49
+ 3. **Hidden risk** — 버전·호환성·수동 조치가 필요한데 마지막에 흐리게 말하는 표현.
50
+ 4. **Commit-log leakage** — `refactor`, `cleanup`, `internal improvements`만 있고 사용자-facing 변화가 없는 항목.
51
+
52
+ ## 작성 규칙
53
+
54
+ - 각 항목은 가능하면 `Changed → Impact → Action` 순서로 쓴다.
55
+ - breaking change, deprecation, migration step은 숨기지 않는다.
56
+ - "excited"류 도입문은 삭제하거나 실제 사용자 이득으로 바꾼다.
57
+ - 구조화된 heading/bullet은 허용한다. 단, 모든 bullet이 같은 템플릿으로 끝나면 리듬을 바꾼다.
58
+
59
+ ## Before / After
60
+
61
+ ### Generic excitement 제거
62
+
63
+ **Before**
64
+ ```markdown
65
+ We're excited to announce a powerful new release that unlocks a better future for all users.
66
+ ```
67
+
68
+ **After**
69
+ ```markdown
70
+ This release adds JSON score output and a CI gate, so PR workflows can fail when `overall` exceeds your threshold.
71
+ ```
72
+
73
+ ### Feature dump를 사용자 영향으로 전환
74
+
75
+ **Before**
76
+ ```markdown
77
+ - Refactored cache internals
78
+ - Updated provider logic
79
+ - Improved reliability
80
+ ```
81
+
82
+ **After**
83
+ ```markdown
84
+ - Cache keys now include model, temperature, and API host. Re-run cached benchmarks once after upgrading.
85
+ - Provider fallback now stops on auth errors instead of retrying another backend with the same bad secret.
86
+ ```
87
+
88
+ ### 숨은 위험 드러내기
89
+
90
+ **Before**
91
+ ```markdown
92
+ Some old settings may need to be adjusted for compatibility.
93
+ ```
94
+
95
+ **After**
96
+ ```markdown
97
+ Breaking: `--gate` now exits with code 3 when the score is over the threshold. CI jobs that treated any non-zero as infrastructure failure should allow exit 3 as a content gate.
98
+ ```