patina-cli 3.11.0 → 4.0.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 (193) hide show
  1. package/.patina.default.yaml +29 -29
  2. package/CHANGELOG.md +53 -0
  3. package/NOTICE +21 -0
  4. package/README.md +117 -224
  5. package/README_JA.md +134 -77
  6. package/README_KR.md +132 -74
  7. package/README_ZH.md +137 -80
  8. package/SKILL.md +11 -20
  9. package/artifacts/rebaseline-2025/README.md +147 -0
  10. package/artifacts/rebaseline-2025/human-controls.public.jsonl +250 -0
  11. package/artifacts/rebaseline-2025/intake.example.jsonl +2 -0
  12. package/artifacts/rebaseline-2025/intake.local.example.jsonl +25 -0
  13. package/artifacts/rebaseline-2025/prompts.template.jsonl +7 -0
  14. package/artifacts/rebaseline-2025/sources.ko-public.jsonl +39 -0
  15. package/assets/brand/patina-badge.svg +18 -0
  16. package/assets/brand/patina-mark.svg +8 -0
  17. package/assets/demo/README.md +79 -0
  18. package/core/scoring.md +12 -12
  19. package/core/standalone-prompt.md +3 -1
  20. package/core/stylometry.md +93 -22
  21. package/docs/API.md +1554 -0
  22. package/docs/AUTHENTICATION.md +50 -26
  23. package/docs/AUTHENTICATION_KR.md +54 -29
  24. package/docs/BRANDING.md +9 -8
  25. package/docs/CLI.md +55 -14
  26. package/docs/COOKBOOK.md +8 -21
  27. package/docs/DEMO.md +32 -5
  28. package/docs/EXIT-CODES.md +2 -3
  29. package/docs/FALSE-POSITIVES.md +63 -0
  30. package/docs/FAQ.md +9 -1
  31. package/docs/FAQ_KR.md +3 -1
  32. package/docs/FLAG-PARITY.md +33 -47
  33. package/docs/ISSUE-WAVES.md +57 -0
  34. package/docs/PATTERNS-EN.md +67 -3
  35. package/docs/PATTERNS-JA.md +68 -2
  36. package/docs/PATTERNS-KO.md +70 -7
  37. package/docs/PATTERNS-ZH.md +67 -3
  38. package/docs/PATTERNS.md +5 -5
  39. package/docs/RESEARCH-DOCS-PLATFORM.md +54 -0
  40. package/docs/ROADMAP.md +46 -66
  41. package/docs/TRANSLATIONESE-KO.md +51 -0
  42. package/docs/audits/2026-05-deep-research.md +3 -1
  43. package/docs/benchmarks/README.md +51 -0
  44. package/docs/benchmarks/detector-comparison.json +69 -9
  45. package/docs/benchmarks/detector-comparison.md +10 -5
  46. package/docs/benchmarks/katfish-ko-latest.json +657 -0
  47. package/docs/benchmarks/katfish-ko-latest.md +77 -0
  48. package/docs/benchmarks/latest.json +1183 -108
  49. package/docs/benchmarks/latest.md +84 -60
  50. package/docs/benchmarks/lexicon-freshness-en-2026-05-22.json +1121 -0
  51. package/docs/benchmarks/lexicon-freshness-en-2026-05-22.md +136 -0
  52. package/docs/benchmarks/rebaseline-latest.json +381 -0
  53. package/docs/benchmarks/rebaseline-latest.md +121 -0
  54. package/docs/benchmarks/register-stratified-latest.json +164 -0
  55. package/docs/benchmarks/register-stratified-latest.md +99 -0
  56. package/docs/benchmarks/register-stratified.md +43 -0
  57. package/docs/integrations/github-action.md +44 -11
  58. package/docs/integrations/playground.md +58 -0
  59. package/docs/integrations/pre-commit.md +5 -5
  60. package/docs/integrations/release.md +5 -3
  61. package/docs/integrations/static-sites.md +83 -0
  62. package/docs/research/2025-rebaseline-plan.md +71 -2
  63. package/docs/research/2026-rebaseline.md +102 -0
  64. package/docs/research/adversarial-mps.md +41 -0
  65. package/docs/research/ai-human-metrics.md +35 -23
  66. package/docs/research/human-eval-panel.md +42 -0
  67. package/docs/research/judge-agreement.md +24 -0
  68. package/docs/research/ko-2025-corpus-sources.md +135 -0
  69. package/docs/research/lexicon-freshness-audit.md +64 -0
  70. package/docs/research/zh-ja-lexicon-calibration.md +60 -0
  71. package/docs/social/patina-launch-copy.md +173 -100
  72. package/docs/social/patina-launch-execution.md +94 -0
  73. package/docs/social/patina-launch-korean-first.md +83 -0
  74. package/docs/social/signs-of-ai-writing.md +26 -0
  75. package/docs/social/signs-of-ai-writing_KR.md +26 -0
  76. package/lexicon/ai-en.md +21 -24
  77. package/lexicon/ai-ja.md +158 -0
  78. package/lexicon/ai-ko.md +9 -9
  79. package/lexicon/ai-zh.md +158 -0
  80. package/lexicon/provenance/ai-en.json +970 -0
  81. package/lexicon/provenance/ai-ja.json +542 -0
  82. package/lexicon/provenance/ai-ko.json +866 -0
  83. package/lexicon/provenance/ai-zh.json +542 -0
  84. package/package.json +49 -8
  85. package/patterns/en-communication.md +5 -0
  86. package/patterns/en-content.md +5 -0
  87. package/patterns/en-filler.md +5 -0
  88. package/patterns/en-language.md +29 -1
  89. package/patterns/en-structure.md +5 -0
  90. package/patterns/en-style.md +5 -0
  91. package/patterns/en-viral-hook.md +42 -2
  92. package/patterns/ja-communication.md +5 -0
  93. package/patterns/ja-content.md +5 -0
  94. package/patterns/ja-filler.md +5 -0
  95. package/patterns/ja-language.md +33 -1
  96. package/patterns/ja-structure.md +12 -0
  97. package/patterns/ja-style.md +5 -0
  98. package/patterns/ja-viral-hook.md +41 -2
  99. package/patterns/ko-communication.md +5 -0
  100. package/patterns/ko-content.md +5 -0
  101. package/patterns/ko-filler.md +5 -0
  102. package/patterns/ko-language.md +33 -1
  103. package/patterns/ko-structure.md +25 -6
  104. package/patterns/ko-style.md +5 -0
  105. package/patterns/ko-viral-hook.md +38 -2
  106. package/patterns/zh-communication.md +5 -0
  107. package/patterns/zh-content.md +5 -0
  108. package/patterns/zh-filler.md +5 -0
  109. package/patterns/zh-language.md +37 -1
  110. package/patterns/zh-structure.md +12 -0
  111. package/patterns/zh-style.md +5 -0
  112. package/patterns/zh-viral-hook.md +38 -2
  113. package/playground/README.md +55 -0
  114. package/playground/analytics.js +4 -0
  115. package/playground/analyzer.js +883 -0
  116. package/playground/app.js +157 -0
  117. package/playground/data/lexicons.js +343 -0
  118. package/playground/index.html +138 -0
  119. package/playground/styles.css +267 -0
  120. package/profiles/namuwiki.md +111 -0
  121. package/scripts/adversarial-mps-report.mjs +201 -0
  122. package/scripts/badge-json.mjs +79 -0
  123. package/scripts/benchmark-report.mjs +56 -9
  124. package/scripts/check-release-metadata.mjs +0 -2
  125. package/scripts/detector-comparison.mjs +7 -7
  126. package/scripts/generate-playground-data.mjs +77 -0
  127. package/scripts/katfish-calibration.mjs +464 -0
  128. package/scripts/lexicon-freshness.mjs +485 -0
  129. package/scripts/lint.mjs +1 -1
  130. package/scripts/precommit-score.mjs +4 -3
  131. package/scripts/prose-score.mjs +81 -5
  132. package/scripts/rebaseline-intake.mjs +242 -0
  133. package/scripts/rebaseline-score.mjs +268 -0
  134. package/scripts/rebaseline-summary.mjs +773 -0
  135. package/scripts/rebaseline-web-collect.mjs +410 -0
  136. package/scripts/update-benchmark-ranges.mjs +1 -0
  137. package/src/api.js +69 -105
  138. package/src/auth.js +50 -2
  139. package/src/backends/claude-cli.js +19 -4
  140. package/src/backends/codex-cli.js +19 -3
  141. package/src/backends/contract.js +230 -1
  142. package/src/backends/gemini-cli.js +18 -5
  143. package/src/backends/index.js +87 -12
  144. package/src/backends/kimi-cli.js +161 -0
  145. package/src/cli.js +577 -567
  146. package/src/commands/doctor.js +2 -2
  147. package/src/config.js +29 -0
  148. package/src/errors.js +53 -1
  149. package/src/features/discourse-tells.js +68 -0
  150. package/src/features/index.js +82 -8
  151. package/src/features/lexicon.js +40 -6
  152. package/src/features/markup-leakage.js +69 -0
  153. package/src/features/segment.js +41 -0
  154. package/src/features/signal-strength.js +81 -0
  155. package/src/features/stylometry.js +231 -1
  156. package/src/features/translationese.js +127 -0
  157. package/src/loader.js +76 -0
  158. package/src/logger.js +22 -23
  159. package/src/model-defaults.js +55 -0
  160. package/src/ouroboros.js +31 -0
  161. package/src/output.js +102 -90
  162. package/src/prompt-builder.js +103 -68
  163. package/src/providers.js +51 -4
  164. package/src/scoring.js +210 -2
  165. package/src/security.js +75 -0
  166. package/tests/fixtures/live-quality/en/public-docs-01.md +26 -0
  167. package/tests/fixtures/live-quality/ko/public-docs-01.md +26 -0
  168. package/tests/fixtures/suspect-zones/expected-ranges.json +207 -16
  169. package/tests/fixtures/suspect-zones/ja/ai/ja-ai-04-lexicon.md +11 -0
  170. package/tests/fixtures/suspect-zones/ja/natural/ja-nat-04-lexicon-cold.md +11 -0
  171. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-02.md +4 -5
  172. package/tests/fixtures/suspect-zones/ko/ai/ko-ai-07-ko-diagnostic.md +11 -0
  173. package/tests/fixtures/suspect-zones/zh/ai/zh-ai-04-lexicon.md +11 -0
  174. package/tests/fixtures/suspect-zones/zh/natural/zh-nat-04-lexicon-cold.md +11 -0
  175. package/tests/quality/README.md +188 -11
  176. package/tests/quality/adversarial-mps/fixtures.jsonl +10 -0
  177. package/tests/quality/benchmark.mjs +39 -1
  178. package/tests/quality/dogfood.mjs +5 -3
  179. package/tests/quality/live-fixtures.jsonl +2 -0
  180. package/tests/quality/live-quality.mjs +596 -0
  181. package/tests/quality/ranking-metrics.mjs +136 -0
  182. package/tests/quality/rebaseline-manifest.example.jsonl +5 -0
  183. package/vercel.json +53 -0
  184. package/SKILL-MAX.md +0 -455
  185. package/docs/internal/HARNESS.md +0 -14
  186. package/docs/internal/README.md +0 -14
  187. package/docs/internal/WARP.md +0 -23
  188. package/patina-max/SKILL.md +0 -523
  189. package/patina-max/composite.py +0 -457
  190. package/src/cache.js +0 -106
  191. package/src/commands/init.js +0 -208
  192. package/src/manifest.js +0 -162
  193. package/src/max-mode.js +0 -207
package/README_KR.md CHANGED
@@ -6,34 +6,60 @@
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
  [![Skill](https://img.shields.io/badge/Skill-Claude%20Code%20%7C%20Codex%20%7C%20Cursor%20%7C%20OpenCode-blueviolet)](#빠른-시작)
8
8
  [![Multi-language](https://img.shields.io/badge/Languages-KO%20%7C%20EN%20%7C%20ZH%20%7C%20JA-green)](https://github.com/devswha/patina)
9
- [![Version](https://img.shields.io/badge/version-3.11.0-blue)](CHANGELOG.md)
9
+ [![Version](https://img.shields.io/badge/version-4.0.0-blue)](CHANGELOG.md)
10
+
11
+ <p align="center">
12
+ <img src="assets/demo/patina-demo-ko.gif" alt="patina가 한국어 AI풍 문장을 다듬고 결과 점수를 보여주는 터미널 데모 GIF" width="780">
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="https://patina.vibetip.help/"><b>내 글로 바로 시험하기 — 설치 없음</b></a>
17
+ </p>
10
18
 
11
19
  > **AI 포장만 벗기고, 의미는 그대로.**
12
20
 
13
- patina는 한국어·영어·중국어·일본어 글에서 AI 냄새가 나는 패턴을 찾아, 원래 주장을 건드리지 않고 다듬습니다. [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [Cursor](https://cursor.sh), OpenCode 스킬로 쓰거나 독립형 Node.js CLI 로 실행할 수 있습니다.
21
+ patina는 한국어·영어·중국어·일본어 글에서 AI 듯한 표현을 찾아냅니다. 원래의 주장·수치·극성·인과관계는 유지한 문장만 다듬습니다. [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [Cursor](https://cursor.sh), OpenCode 스킬로 쓰거나 독립형 Node.js CLI로 실행할 수 있습니다.
14
22
 
15
- 블랙박스 패러프레이저가 아닙니다. patina는 **패턴 기반이고 감사 가능**해서, 무엇을 왜 바꿨는지와 원문의 주장이 보존됐는지를 보여줍니다.
23
+ 막연히 말을 바꾸는 블랙박스형 도구도, AI 탐지기를 우회하기 위한 도구도 아닙니다. patina는 **명확한 패턴 기반**으로 작동하며, 무엇을 왜 바꿨는지와 원문의 주장이 보존됐는지를 보여줍니다. `codex`, `claude`, `gemini` CLI 중 하나에 로그인되어 있으면 API 키 없이도 쓸 수 있습니다.
16
24
 
17
25
  ## 데모
18
26
 
19
- **수정 전** *(AI스러운 )*:
20
- > 커피는 세계 사회적 상호작용을 **근본적으로 변화시킨** **핵심적인 문화 현상**으로 부상했습니다. 사랑받는 음료는 커뮤니티 구축의 촉매제 역할을 하며, 의미 있는 연결을 촉진하고, 문화 대화를 이끌어냅니다.
27
+ **수정 전** *(AI스러운 글; GIF와 같은 예시)*:
28
+ > 새롭게 출시된 노션 템플릿 팩은 생산성 향상을 위한 **혁신적인 솔루션**입니다. 다양한 워크플로우에 최적화된 30개의 템플릿을 제공하며, 사용자 친화적인 디자인으로 누구나 손쉽게 활용 가능합니다. 제품은 업무 효율성을 극대화하는 **새로운 패러다임**을 제시합니다.
29
+
30
+ **수정 후** *(`/patina --lang ko --tone marketing` — 같은 내용, AI 포장만 제거)*:
31
+ > 노션을 자주 쓰지만 매번 빈 페이지에서 막힌다면 이 팩부터 열어 보세요. 업무별 템플릿 30개를 담았습니다. 복잡한 설정 없이 복제해서 바로 고치고, 팀 프로젝트든 개인 정리든 필요한 형태로 손보면 됩니다.
32
+
33
+ > **Score = 0.0%** · 템플릿 30개 ✓ · 워크플로우 적합성 ✓ · 복제 후 수정 사용 ✓
34
+
35
+ **다른 예시**
36
+
37
+ | 입력 유형 | 제거되는 AI 포장 | 보존되는 의미 |
38
+ |---|---|---|
39
+ | 한국어 마케팅 | “혁신적인 솔루션”, “새로운 패러다임” | 노션 템플릿 30개, 업무 흐름에 맞음, 복제 후 수정해서 사용 |
40
+ | 학술 문체 | “획기적인 성과”, 넓은 의의 주장 | GitHub 프로젝트 60개, 72h→10m 설정 시간, p<0.01, 한계 명시 |
41
+ | 기술 문서 | “핵심적인 역할”, 미래 표준식 과장 | GPU 관리, 명령 한 번으로 준비, 5× 결과의 주의점 |
42
+
43
+ ## 브라우저에서 바로 보기 — 설치 없음
44
+
45
+ **[patina.vibetip.help](https://patina.vibetip.help/)** 에서 KO / EN / ZH / JA 문단의 AI스러운 글쓰기 패턴을 브라우저 안에서 바로 점검할 수 있습니다.
21
46
 
22
- **수정 후** *(`/patina --lang ko` 같은 내용, AI 포장만 제거)*:
23
- > 커피는 사람들이 만나는 방식을 꽤 많이 바꿔놓았다. 누군가와 마주 앉아 이야기하다 보면 자연스럽게 관계가 생기고, 문화가 다른 사람끼리도 대화가 이어진다.
47
+ > **탐지 전용입니다.** playground는 정해진 문체 통계 분석만 사용자 브라우저에서 실행합니다. 텍스트를 다시 쓰지 않고, 외부 LLM을 호출하지 않으며, API 키를 서버로 보내지 않습니다. 실제 재작성이 필요하면 아래 CLI나 스킬을 사용하세요.
24
48
 
25
- > **MPS = 100** · 사회적 변화 · 커뮤니티 구축 · 의미 있는 연결 ✓ · 문화 간 대화 ✓
49
+ 전체 재작성 흐름은 [30초 터미널 데모](docs/DEMO.md)에서 있습니다. 많은 예시는 [Before/After Gallery](docs/EXAMPLES_KR.md) ([English](docs/EXAMPLES.md))에 있습니다.
50
+ 브랜드 리소스: [로고](assets/brand/patina-logo.svg), [마크](assets/brand/patina-mark.svg), [아이콘](assets/brand/patina-icon.svg), [소셜 프리뷰](assets/social/patina-og.svg), [before/after 카드](assets/social/patina-before-after.svg). 사용 가이드라인은 [BRANDING.md](docs/BRANDING.md)를 참고하세요.
26
51
 
27
52
  ## 한눈에 보기
28
53
 
29
54
  | | |
30
55
  |---|---|
31
- | **160개 패턴** | 한국어 40 + 영어 40 + 중국어 40 + 일본어 40 ( 8 스코어 전용 viral-hook 포함) — [PATTERNS.md](docs/PATTERNS.md) |
32
- | **편집 핫스팟 재현율** | 한국어 91% [84.0–95.4%] (n=100) / 영어 76% [66.783.3%] (n=100), binomial 95% CI |
33
- | **오탐율** | 사람 register별 13–25% 점추정 범위 *(CI 아님; 백과사전체의 본질적 한계, [문서화](core/stylometry.md))* |
34
- | **모드** | rewrite · audit · score · diff · ouroboros |
35
- | **무료 사용** | 가능 `codex` CLI 로그인 API 불필요 |
36
- | **결정성** | 스코어링 공식은 결정적이지만 LLM severity 부여 단계는 ±8–10pt 변동 ([scoring.md §8](core/scoring.md)) |
56
+ | **168개 패턴** | 언어별 33개 재작성 패턴 + 9개 스코어 전용 바이럴 패턴(KO/EN/ZH/JA 각각 42개) — [PATTERNS.md](docs/PATTERNS.md) |
57
+ | **편집 핫스팟 재현율** | 2026-05-22 최신 모델 리베이스라인: GPT-5.5 / Claude Sonnet 4.6 / Gemini 2.5 Pro 기준 전체 탐지율 67.3% [63.571.0%] (n=600, KO+EN) |
58
+ | **벤치마크 리포트** | 재현 가능한 ko/en/zh/ja 의심 구간 벤치마크: [overview](docs/benchmarks/README.md) · [latest.md](docs/benchmarks/latest.md) · [latest.json](docs/benchmarks/latest.json) · [2026 rebaseline](docs/benchmarks/rebaseline-latest.md) · [detector comparison](docs/benchmarks/detector-comparison.md) |
59
+ | **오탐율** | 2026-05-22 KO+EN 사람 컨트롤에서 16.0% [11.6–21.7%] (n=200). 문체별 경계는 [stylometry.md](core/stylometry.md)에 문서화되어 있습니다 — [오탐 제보](https://github.com/devswha/patina/issues/new?template=false_positive.yml) |
60
+ | **모드** | 재작성 · 탐지 · 점수 · diff · ouroboros |
61
+ | **무료 사용** | 로그인된 `codex`, `claude`, `gemini` CLI 하나로 API 없이 실행 |
62
+ | **결정성** | 스코어링 공식은 결정적이지만 LLM severity 판정 단계에는 ±8–10pt 변동이 있습니다 ([scoring.md §8](core/scoring.md)) |
37
63
  | **라이선스** | MIT |
38
64
 
39
65
  ## 빠른 시작
@@ -44,7 +70,7 @@ patina는 한국어·영어·중국어·일본어 글에서 AI 냄새가 나는
44
70
  curl -fsSL https://raw.githubusercontent.com/devswha/patina/main/install.sh | bash
45
71
  ```
46
72
 
47
- 설치 스크립트가 Claude Code, [Codex CLI](https://github.com/openai/codex), Cursor, OpenCode 에 한 번에 연결합니다. 체크아웃 전에 repository HEAD를 구체적인 commit으로 해석하므로, 완전히 고정된 설치가 필요하면 `PATINA_REF=<tag-or-full-sha>`를 설정하세요. 그런 다음:
73
+ 설치 스크립트가 Claude Code, [Codex CLI](https://github.com/openai/codex), Cursor, OpenCode에 patina를 한 번에 연결합니다. 설치할 원격 HEAD를 실제 커밋으로 고정하므로, 특정 버전만 쓰고 싶다면 `PATINA_REF=<tag-or-full-sha>`를 지정하세요. 그런 다음:
48
74
 
49
75
  ```
50
76
  /patina --lang ko
@@ -68,9 +94,16 @@ curl -fsSL https://raw.githubusercontent.com/devswha/patina/main/install.sh | ba
68
94
  [텍스트를 여기에 붙여넣기]
69
95
  ```
70
96
 
71
- ### 독립형 CLI
97
+ ### 독립형 CLI로
72
98
 
73
- Node.js 18 필요.
99
+ Node.js 18 이상이 필요합니다. npm 패키지가 공개되어 있어 바로 실행할 수 있습니다:
100
+
101
+ ```bash
102
+ npx patina-cli doctor
103
+ npx patina-cli --lang ko input.txt
104
+ ```
105
+
106
+ 저장소를 직접 받아 고쳐 보려면:
74
107
 
75
108
  ```bash
76
109
  git clone https://github.com/devswha/patina.git
@@ -78,35 +111,59 @@ cd patina && npm install && npm link
78
111
  patina --lang ko input.txt
79
112
  ```
80
113
 
81
- link stdin으로도 시험할 수 있습니다:
114
+ `npm link` 후에는 stdin으로도 시험할 수 있습니다:
82
115
 
83
116
  ```bash
84
117
  printf '%s\n' '커피는 전 세계의 사회적 상호작용을 근본적으로 바꾼 중요한 문화 현상으로 부상했다.' \
85
118
  | patina --lang ko --backend codex-cli
86
119
  ```
87
120
 
88
- > 🆓 **API 키 없이 무료 사용 가능** — [`codex`](https://github.com/openai/codex), [`claude`](https://docs.anthropic.com/en/docs/claude-code), [`gemini`](https://github.com/google-gemini/gemini-cli) CLI 중 하나만 로그인되어 있으면 됩니다. `--backend codex-cli | claude-cli | gemini-cli` 직접 선택하거나 `--model claude-*` / `--model gemini-*` 처럼 모델명으로 라우팅됩니다. 전체 백엔드는 [AUTHENTICATION.md](docs/AUTHENTICATION.md) 참조.
121
+ > 🆓 **API 키 없이 무료 사용 가능** — [`codex`](https://github.com/openai/codex), [`claude`](https://docs.anthropic.com/en/docs/claude-code), [`gemini`](https://github.com/google-gemini/gemini-cli), [`kimi`](https://moonshotai.github.io/kimi-cli/) CLI 중 하나에 로그인되어 있으면 됩니다. `--backend codex-cli | claude-cli | gemini-cli | kimi-cli`로 직접 고르거나, `--backend claude-cli,codex-cli`처럼 백업 순서를 지정할 수 있습니다. `--model claude-*` / `--model gemini-*` / `--model kimi-*`처럼 모델명으로 라우팅하는 것도 가능합니다. `--model`을 생략하면 backend별 기본 모델(`gpt-5.5`, `claude-sonnet-4-6`, `gemini-2.5-pro`, `kimi-code/kimi-for-coding`)을 넘깁니다. 전체 백엔드는 [AUTHENTICATION.md](docs/AUTHENTICATION.md) 참고하세요.
89
122
 
90
- ### CI integrations
123
+ ### CI 연동
91
124
 
92
- Patina는 live model key 없이도 prose review용 결정론적 CI 체크를 제공합니다:
125
+ Patina는 모델 없이도 문서 리뷰용 결정론적 CI 체크를 제공합니다:
93
126
 
94
127
  ```yaml
95
128
  # .github/workflows/patina.yml
96
- steps:
97
- - uses: actions/checkout@v6
98
- - uses: devswha/patina-action@main # npm publish + Action 태그 후 @v1 사용
99
- with:
100
- patina-package: github:devswha/patina # patina-cli@latest npm 공개 후 제거
101
- report-threshold: 30
102
- comment: true
129
+ name: Patina prose score
130
+
131
+ on:
132
+ pull_request:
133
+ paths:
134
+ - '**/*.md'
135
+ - '**/*.mdx'
136
+
137
+ permissions:
138
+ contents: read
139
+ pull-requests: read
140
+ issues: write
141
+
142
+ jobs:
143
+ patina:
144
+ runs-on: ubuntu-latest
145
+ steps:
146
+ - uses: actions/checkout@v6
147
+ - uses: devswha/patina-action@v1
148
+ with:
149
+ score-threshold: 30
150
+ lang: auto
151
+ comment: true
152
+ ```
153
+
154
+ Docker 이미지는 npm 릴리스와 별도로 추적합니다. GHCR 이미지가 공개되기 전에는 컨테이너가 필요할 때 로컬 이미지를 빌드하세요:
155
+
156
+ ```bash
157
+ docker build -t patina:local .
158
+ printf '%s\n' '커피는 전 세계의 사회적 상호작용을 근본적으로 바꾼 중요한 문화 현상으로 부상했다.' \
159
+ | docker run --rm -i -e PATINA_API_KEY patina:local --lang ko --provider openai
103
160
  ```
104
161
 
105
- Pre-commit, Husky, Lefthook, Docker, release workflow 메모는 [docs/integrations/](docs/integrations/)에 있습니다.
162
+ Pre-commit, Husky, Lefthook, Docker, 릴리스 워크플로우 메모는 [docs/integrations/](docs/integrations/)에 있습니다.
106
163
 
107
- ## 의도한 사용
164
+ ## 올바른 사용 목적
108
165
 
109
- Patina는 작성자가 AI 지원을 써도 되는 상황에서 AI 이후 편집, audit trail, voice cleanup을 돕는 도구입니다. 텍스트가 "원래 사람이 쓴 것"이라는 약속은 아니며, 학업 honor-code 회피, 출판사 disclosure 우회, 표절 세탁, detector-bypass 주장에 사용해서는 안 됩니다. [ETHICS.md](docs/ETHICS.md)를 참고하세요.
166
+ Patina는 AI 도움을 받아도 되는 상황에서 초안을 다듬기 위한 도구입니다. 어떤 부분을 바꿨는지 확인하고, 원문의 의미를 유지한 채 문체만 자연스럽게 고치는 데 초점을 둡니다. 텍스트가 "원래 사람이 쓴 것"이라는 보증은 아니며, 학업 윤리 규정 회피, 출판사 고지 의무 우회, 표절 세탁, 탐지기 우회 주장에 사용해서는 안 됩니다. 점수는 글을 고치기 위한 참고 신호일 뿐, 작성자가 AI인지 사람인지 판정하는 근거가 아닙니다. [ETHICS.md](docs/ETHICS.md)를 참고하세요.
110
167
 
111
168
  ## 모드
112
169
 
@@ -119,52 +176,48 @@ patina --lang <ko|en|zh|ja> [모드] [--profile <이름>] input.txt
119
176
  | *(기본)* | 재작성 |
120
177
  | `--audit` | AI 패턴 탐지만 수행 |
121
178
  | `--score` | 0–100 AI 유사도 점수 + 카테고리별 분석 |
122
- | `--score --exit-on <n>` | CI를 엄격하게 유지: `overall > n`이면 종료 코드 `3` (`--gate`는 alias) |
179
+ | `--score --exit-on <n>` | CI를 엄격하게 유지: `overall > n`이면 종료 코드 `3` |
123
180
  | `--diff` | 변경 사항을 패턴별로 표시 |
124
181
  | `--ouroboros` | 점수가 수렴할 때까지 반복 (MPS 롤백 포함) |
125
182
  | `--lang <ko\|en\|zh\|ja>` | 언어 선택 (기본값: `ko`) |
126
- | `--profile <이름>` | 톤 프리셋: `blog`, `academic`, `technical`, `formal`, `social`, `email`, `legal`, `medical`, `marketing`, `narrative`, `instructional`, `casual-conversation` |
183
+ | `--profile <이름>` | 톤 프리셋: `blog`, `academic`, `technical`, `formal`, `social`, `email`, `legal`, `medical`, `marketing`, `narrative`, `instructional`, `casual-conversation`, `code-comment`, `commit-message`, `release-notes`, `namuwiki` |
127
184
  | `--tone <이름>` | 톤 카테고리: `casual`, `professional`, `academic`, `narrative`, `marketing`, `instructional`, `auto` |
128
185
  | `--batch` | 위치 인자를 파일 목록으로 처리 (예: `--batch docs/*.md`) |
129
186
  | `--format json\|text\|markdown` | JSON, 일반 텍스트, 기본 Markdown 출력 선택 |
130
- | `--prompt-mode strict\|minimal\|auto` | 전체 패턴 프롬프트, 압축 프롬프트, 백엔드별 자동 선택 |
131
- | `--variants <1-5>` | 사실과 의미 앵커를 유지한 여러 rewrite 변형 생성 |
132
-
133
- 전체 옵션은 `patina --help`.
134
-
135
- ### 스코어 전용 패턴
136
-
137
- `--score`와 `--audit`는 `--rewrite`보다 약간 더 넓은 신호를 측정합니다. viral-hook 팩(`ko/en/zh/ja-viral-hook`, 각 8개 패턴: 숫자 충격 훅, 클릭베이트 종결, 출처 회피 권위 주장, 호흡 최적화 단문 배열, 과장된 참여 유도 어휘, 가짜 통계 인용, 권위 타이틀 쌓기, 미래의 나/친밀한 2인칭 약속)은 **탐지 전용**입니다.
187
+ | `--quiet` | stderr의 상태, 경고, 진행 로그를 숨김 |
138
188
 
139
- 신호들은 score와 audit에만 나타나 언어의 SNS 마케팅 카피에 대한 사용자 직관과 벤치마크를 맞춥니다. `--rewrite`/`--diff`/`--ouroboros`는 이런 표현이 의도된 수사일 있어 건너뜁니다. 실제 데모: [`examples/viral-hook/`](examples/viral-hook/).
189
+ 전체 옵션은 `patina --help`를 참고하세요. `patina doctor --json`은 LLM 호출 없이 Node/backend/tmux/API-key 준비 상태를 점검합니다. 프로젝트 설정은 선택 사항이며, 일회성 실행은 플래그를 쓰고 고정 기본값이 필요할 때만 `.patina.yaml`을 추가하세요.
140
190
 
141
- ### 프롬프트 모드 튜닝 (v3.11)
191
+ Markdown 중심 개발 흐름에는 개발자용 프로필도 있습니다.
192
+ `code-comment`는 인라인 주석과 docstring을 줄이고, `commit-message`는 의도와 검증이 드러나는 커밋 메시지로 다듬습니다. `release-notes`는 변경 로그 항목을 사용자 영향과 마이그레이션 위험이 보이는 릴리스 노트로 바꿉니다. `namuwiki`는 한국어 전용 위키풍 프로필이며, 실제 나무위키 문서 텍스트를 복사하지 않는 license-safe 가이드만 포함합니다.
142
193
 
143
- `--prompt-mode strict|minimal|auto` 전체 패턴 팩(약 34KB 구조화 프롬프트)과 압축된 캐주얼 지시문(약 3KB) 사이의 균형을 선택합니다. `auto` 는 백엔드별로 선택합니다 — Gemini는 minimal에서 더 잘 동작하고(긴 구조화 프롬프트에 과도하게 제약됨), Claude는 전체 팩을 활용하며, Codex는 대체로 차이가 작습니다. case-05가 A/B 결과를 문서화합니다.
194
+ ### 스코어 전용 패턴
144
195
 
145
- ### 여러 스타일 변형 (v3.11)
196
+ `--score`와 `--audit`는 `--rewrite`보다 조금 더 넓은 신호를 봅니다. 바이럴 훅 팩(`ko/en/zh/ja-viral-hook`, 각 9개 패턴: 숫자 충격 훅, 클릭베이트 종결, 출처 회피 권위 주장, 호흡 최적화 단문 배열, 과장된 참여 유도 어휘, 가짜 통계 인용, 권위 타이틀 쌓기, 미래의 나/친밀한 2인칭 약속, 경구형 펀치라인)은 **탐지 전용**입니다.
146
197
 
147
- `--variants <1-5>` 번의 호출에서 N개의 보이스 변형을 요청합니다(예: V1 캐주얼, V2 직설적, V3 절제됨). 사실, 수치, 인과관계는 모든 변형에서 동일하게 유지됩니다. 결과는 `## Variant N` 형식으로 돌아오므로 원하는 보이스를 고를 수 있습니다.
198
+ 신호들은 score와 audit에만 나타납니다. 언어의 SNS 마케팅 카피를 평가할 사용자 직관과 벤치마크를 맞추기 위한 장치입니다. `--rewrite`/`--diff`/`--ouroboros`는 이런 표현이 의도된 수사일 있어 건너뜁니다. 실제 데모: [`examples/viral-hook/`](examples/viral-hook/).
148
199
 
149
200
  ### 짧은 텍스트 점수 보정 (v3.11)
150
201
 
151
- 입력이 200자 이하이거나 3문단 이하이면 레지스터에 민감한 카테고리(`language`, `style`, `viral-hook`)에 1.5배 severity multiplier를 적용해 단일 문단의 보이스 변화도 점수에 드러나게 합니다. case-04에서 긴 글 기준 공식이 이런 신호를 과소계산한다는 점을 확인했습니다.
202
+ 입력이 200자 이하이거나 3문단 이하이면 문장 스타일에 민감한 카테고리(`language`, `style`, `viral-hook`)에 1.5배 가중치를 줍니다. 짧은 단락의 미세한 어조 변화도 점수에 반영하기 위해서입니다. case-04에서 긴 글 기준 공식이 이런 신호를 과소계산한다는 점을 확인했습니다.
152
203
 
153
204
  ### 자기검수 분리 (v3.11)
154
205
 
155
- rewrite 모드에서 모델은 `[BODY]`/`[/BODY]` 블록(또는 `--variants > 1`일 때 `[VARIANT n]` 블록)을 감싸는 `[SELF_AUDIT]`/`[/SELF_AUDIT]` 태그 안에 자기검수 메모를 냅니다. patina는 사용자에게 보여주기 전에 audit을 제거하므로 원시 출력이 깔끔합니다 이전 버전에서는 "남아 있는 AI 티"나 "Phase 3" 같은 프리앰블이 사용자-facing 텍스트에 새어 나오는 경우가 있었습니다.
206
+ rewrite 모드에서 모델은 `[BODY]`/`[/BODY]` 블록을 감싸는 `[SELF_AUDIT]`/`[/SELF_AUDIT]` 태그 안에 자기검수 메모를 냅니다. patina는 사용자에게 보여주기 전에 audit을 제거하므로 원시 출력이 깔끔합니다. 이전 버전에서는 "남아 있는 AI 티"나 "Phase 3" 같은 프리앰블이 사용자에게 보이는 텍스트에 새어 나오는 경우가 있었습니다.
156
207
 
157
- ### Machine-readable output and exit codes
208
+ ### 기계가 읽기 쉬운 출력과 종료 코드
158
209
 
159
- `--format json`은 모든 모드를 `overall`, `categories[]`, `tone`, `mps`, `gateResult`, 정리된 `output` 본문을 담은 안정적인 envelope로 감쌉니다. `--format markdown`이 기본값이고, `--format text`는 YAML tone footer 없는 사용자-facing 본문만 유지합니다. 종료 코드는 [EXIT-CODES.md](docs/EXIT-CODES.md)에 정리되어 있습니다: `0` 성공, `1` runtime/backend, `2` input/usage, `3` score gate 초과, `4` MAX MPS fallback/all-candidates-failed.
210
+ `--format json`은 모든 모드를 `overall`, `categories[]`, `tone`, `mps`, `gateResult`, 정리된 `output` 본문이 들어 있는 일관된 JSON envelope로 감싸 반환합니다. `--quiet`는 stdout만 필요한 스크립트를 위해 상태·경고·진행 로그를 숨깁니다. `--format markdown`이 기본값이고, `--format text`는 YAML tone footer 없이 사용자가 보게 될 본문만 남깁니다. 종료 코드는 [EXIT-CODES.md](docs/EXIT-CODES.md)에 정리되어 있습니다: `0` 성공, `1` runtime/backend, `2` input/usage, `3` score gate 초과.
160
211
 
161
212
  ### 점수 가중치 드리프트 감지 (v3.11)
162
213
 
163
- `--score` 실행은 모델이 출력한 Weight 열을 설정의 `category-weights`와 교차 확인합니다. 모델이 존재하지 않는 카테고리(예: `discord`)를 만들거나 다른 숫자로 바꾸면 `[patina]` 경고가 stderr에 출력됩니다 관측용일 점수 자체는 바꾸지 않습니다.
214
+ `--score` 실행은 모델이 출력한 Weight 열을 설정의 `category-weights`와 대조합니다. 모델이 존재하지 않는 카테고리(예: `discord`)를 만들거나 다른 숫자로 바꾸면 stderr에 `[patina]` 경고가 나옵니다. 관측용 검사라서 weight check 자체가 점수를 바꾸지는 않습니다. `src/features/*`의 결정론적 shadow score도 함께 기록되며, LLM 점수와 20점 넘게 벌어지면 patina가 경고를 내고 gate에는 더 보수적인 값을 사용합니다.
215
+
216
+ `--voice-sample <path>` 또는 설정의 `voice-sample: <path>`로 본인이 쓴 1~3문단을 rewrite 기준으로 줄 수 있습니다. profile과 tone은 여전히 register를 정하고, sample은 문장 리듬, 구체성, 시점, 문장 질감만 참고합니다. prompt는 sample의 사실을 가져오지 말라고 명시합니다.
164
217
 
165
218
  ## 톤
166
219
 
167
- `--tone` 패턴 재작성 위에 적용되는 명명된 보이스 축입니다. 우선순위: `--tone` CLI > `tone:` 설정 > `profile:` 설정.
220
+ `--tone`은 패턴 기반 재작성과 함께 적용할 있는 톤(어조) 프리셋입니다. 우선순위: `--tone` CLI > `tone:` 설정 > `profile:` 설정.
168
221
 
169
222
  | 톤 | 용도 | 주요 특성 |
170
223
  |----|------|-----------|
@@ -175,17 +228,7 @@ rewrite 모드에서 모델은 `[BODY]`/`[/BODY]` 블록(또는 `--variants > 1`
175
228
  | `marketing` | 광고 카피, 랜딩 페이지, 제품 알림 | 짧고 강한 문장, 설득력, CTA 친화 |
176
229
  | `instructional` | 튜토리얼, 하우투, 기술 문서 | 명령형 동사, 번호 매김 구조, 추측 표현 억제 |
177
230
 
178
- `--tone auto` 휴리스틱(어휘 + 구조 신호)으로 가장 적합한 톤을 자동 선택합니다. zh/ja 에서는 `auto` 포함 모든 톤 지정 시 경고를 내고 프로필 전용 모드로 폴백합니다 Phase 4.5b 휴리스틱이 ko/en만 지원하기 때문입니다.
179
-
180
- ### MAX 모드
181
-
182
- 같은 텍스트를 Claude, Codex, Gemini 에 독립적으로 돌립니다. MPS ≥ 70 을 통과한 결과 중 AI 점수가 가장 낮은 (가장 사람다운) 결과가 선택됩니다:
183
-
184
- ```
185
- /patina-max
186
-
187
- [텍스트를 여기에 붙여넣기]
188
- ```
231
+ `--tone auto`는 휴리스틱(어휘 + 구조 신호)으로 가장 적합한 톤을 자동 선택합니다. zh/ja에서는 `auto`를 포함한 모든 톤 지정 시 경고를 내고 프로필 전용 모드로 폴백합니다. Phase 4.5b 휴리스틱이 ko/en만 지원하기 때문입니다.
189
232
 
190
233
  ## 동작 원리
191
234
 
@@ -193,8 +236,8 @@ rewrite 모드에서 모델은 `[BODY]`/`[/BODY]` 블록(또는 `--variants > 1`
193
236
  입력
194
237
 
195
238
  [4.5단계] 의미 앵커 추출 (주장, 극성, 인과관계, 수치)
196
- [4.6단계] 문체 통계 전처리 (burstiness CV + MATTR)
197
- [4.7단계] AI 어휘 오버랩 (영어 ~108 / 한국어 102 항목)
239
+ [4.6단계] 문체 통계 전처리 (burstiness CV + MATTR; zh/ja 문자 토큰 fallback)
240
+ [4.7단계] AI 어휘 오버랩 (영어 88 / 한국어 102 / 중국어 60 / 일본어 60 항목)
198
241
  [Phase 1] 구조 스캔 + 앵커 검증
199
242
  [Phase 2] 문장 재작성 + 앵커 검증
200
243
  [Phase 3] 자기검수 (극성, 회귀, MPS)
@@ -204,39 +247,54 @@ rewrite 모드에서 모델은 `[BODY]`/`[/BODY]` 블록(또는 `--variants > 1`
204
247
 
205
248
  각 검증 단계에서 의미가 손상되면 재시도하거나 롤백합니다.
206
249
 
207
- **캘리브레이션** *(500단락 코퍼스, `.omc/research/v3_8_remeasure.py` 재현 가능)*: HC3 ChatGPT (en) 편집 핫스팟 재현율 76% [66.783.3%], paired ko/AI 코퍼스 91% [84.095.4%] (n=100, binomial 95% CI). 사람 글 오탐은 register별 13–25% 점추정 범위로 별도 보고합니다. 수용 기준: AI 75%, 최대 FP 25%. 알고리즘은 [stylometry.md](core/stylometry.md).
250
+ **캘리브레이션** *(2026-05-22 최신 모델 리베이스라인; 방법론은 [2026-rebaseline.md](docs/research/2026-rebaseline.md))*: GPT-5.5, Claude Sonnet 4.6, Gemini 2.5 Pro CLI 샘플에서 결정론적 편집 핫스팟 catch는 67.3% [63.571.0%] (n=600, 한국어+영어)입니다. 사람 컨트롤 오탐은 16.0% [11.621.7%] (n=200)입니다. 언어×모델별 수치는 [rebaseline-latest.md](docs/benchmarks/rebaseline-latest.md) 따로 보고합니다. 값은 편집 신호이지 작성자 판정이나 탐지기 우회 약속이 아닙니다.
208
251
 
209
252
  ## 설정
210
253
 
211
254
  ```yaml
212
255
  # .patina.default.yaml
213
- version: "3.11.0"
256
+ version: "4.0.0"
214
257
  language: ko # ko | en | zh | ja
215
258
  profile: default
216
259
  output: rewrite # rewrite | diff | audit | score
217
260
  tone: # casual | professional | academic | narrative | marketing | instructional | auto
218
- max-models: [claude, gemini]
219
261
  ```
220
262
 
221
- 패턴 팩은 언어 접두사로 자동 탐색됩니다. 작업 디렉토리의 `.patina.yaml` 이 기본값을 오버라이드합니다. 탐지를 확장하는 목록 키(`blocklist`, `allowlist`, `skip-patterns`)는 default/global/project 설정 사이에서 추가 병합되고, `max-models` 같은 provider 목록은 사용자가 정확한 백엔드 세트를 선택할 수 있도록 대체됩니다.
263
+ 패턴 팩은 언어 접두사로 자동 탐색됩니다. 작업 디렉토리의 `.patina.yaml` 이 기본값을 오버라이드합니다. 탐지를 확장하는 목록 키(`blocklist`, `allowlist`, `skip-patterns`)는 default/global/project 설정 사이에서 누적 병합(additively merge)되며, 다른 배열 값은 사용자가 정확한 값을 고를 수 있도록 대체됩니다.
222
264
 
223
265
  ## 문서
224
266
 
267
+ - **[Cookbook](docs/COOKBOOK.md)** — Hugo 배치 스코어링, GitHub Actions, 오탐 triage, 커스텀 프로필, pre-commit recipe
225
268
  - **[Glossary](docs/GLOSSARY.md)** — MPS, fidelity, burstiness, MATTR, 모드 등 반복 용어의 짧은 정의
226
269
  - **[Demo](docs/DEMO.md)** — 터미널 transcript와 여러 장르의 before/after 스냅샷
227
- - **[Patterns](docs/PATTERNS.md)** — 160개 패턴 카탈로그
270
+ - **[Patterns](docs/PATTERNS.md)** — 168개 패턴 카탈로그
228
271
  - **[Authentication](docs/AUTHENTICATION_KR.md)** ([English](docs/AUTHENTICATION.md)) — 백엔드, 프로바이더, 무료 티어 설정
229
- - **[CLI Contract](docs/CLI.md)** — score gate, exit code, 자동화에 안전한 표면
230
- - **[Flag Parity](docs/FLAG-PARITY.md)** — standalone CLI, `/patina`, `/patina-max` 옵션 지원 범위
231
- - **[Ethics](docs/ETHICS.md)** — 의도한 사용, 금지 사용, disclosure 입장
272
+ - **[GitHub Action](docs/integrations/github-action.md)** — live model key 없이 PR hotspot comment와 README score badge 생성
273
+ - **[Pre-commit](docs/integrations/pre-commit.md)** — pre-commit, Husky, Lefthook score-only recipe
274
+ - **[Static-site Stencils](docs/integrations/static-sites.md)** — Hugo, Astro, Next.js MDX build-time scoring recipe
275
+ - **[Docker](docs/integrations/docker.md)** — GHCR image 사용법과 release tag
276
+ - **[Release workflow](docs/integrations/release.md)** — npm provenance + GHCR publishing checklist
277
+ - **[CLI Contract](docs/CLI.md)** — score gate, JSON/text/Markdown output, 자동화에 안전한 표면
278
+ - **[API Reference](docs/API.md)** — programmatic import와 scoring helper용 생성 JSDoc reference
279
+ - **[Flag Parity](docs/FLAG-PARITY.md)** — standalone CLI와 `/patina`의 옵션 지원 범위
280
+ - **[Exit Codes](docs/EXIT-CODES.md)** — CI와 editor integration용 process code contract
281
+ - **[Ethics](docs/ETHICS.md)** — 올바른 사용 목적, 금지 사용, disclosure 입장
232
282
  - **[FAQ](docs/FAQ_KR.md)** ([English](docs/FAQ.md)) — detector-bypass 우려, MPS, 오탐, 기여 시작점
283
+ - **[False-positive Gallery](docs/FALSE-POSITIVES.md)** — 작성자 비난이 아니라 편집 힌트로 보아야 하는 register 예시
233
284
  - **[Comparison](docs/COMPARISON.md)** — 일반 paraphraser/humanizer 도구와의 사실 기반 비교
234
285
  - **[Branding](docs/BRANDING.md)** — canonical 로고/소셜 asset과 OG 설정 메모
235
286
  - **[Design](DESIGN.md)** — repo-native SVG와 README surface의 제품/브랜드 기준
236
287
  - **[Roadmap](docs/ROADMAP.md)** — 품질, 벤치마크, 제품, 커뮤니티, 런칭 우선순위
288
+ - **[Docs Platform RFC](docs/RESEARCH-DOCS-PLATFORM.md)** — Docusaurus, Astro Starlight, MkDocs, GitHub Pages 조사
289
+ - **[Benchmark Reports](docs/benchmarks/README.md)** — 체크인된 벤치마크 산출물, 갱신 명령, public-claim gate
237
290
  - **[Benchmark Report](docs/benchmarks/latest.md)** — 최신 재현 가능 suspect-zone 벤치마크 요약
291
+ - **[Detector Comparison Harness](docs/benchmarks/detector-comparison.md)** — third-party detector를 오프라인/수동 비교하는 프로토콜
238
292
  - **[AI/Human Metrics Research](docs/research/ai-human-metrics.md)** — AI-like writing signal 측정용 벤치마크 설계 메모
239
- - **[Launch Copy](docs/social/patina-launch-copy.md)** — Show HN, Reddit, X, 한국 커뮤니티 초안
293
+ - **[2026 Modern-model Rebaseline](docs/research/2026-rebaseline.md)** — 현재 날짜가 찍힌 KO+EN catch/FP claim
294
+ - **[2025+ Re-baseline Plan](docs/research/2025-rebaseline-plan.md)** — 더 넓은 model-era claim 전 evidence gate
295
+ - **[zh/ja Lexicon Calibration](docs/research/zh-ja-lexicon-calibration.md)** — starter lexicon gate와 남은 corpus risk
296
+ - **[Launch Copy](docs/social/patina-launch-copy.md)** — launch sequence, score gate, Show HN/Product Hunt/Reddit/X/Korean drafts
297
+ - **[Signs of AI Writing](docs/social/signs-of-ai-writing_KR.md)** ([English](docs/social/signs-of-ai-writing.md)) — cited example이 붙은 공유용 편집 checklist
240
298
  - **[Stylometry](core/stylometry.md)** — burstiness + MATTR + AI 어휘 알고리즘
241
299
  - **[Scoring](core/scoring.md)** — AI 유사도 + 충실도 + MPS
242
300
  - **[Changelog](CHANGELOG.md)** — 릴리스 노트와 방법론