-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy path.patina.default.yaml
More file actions
197 lines (185 loc) · 7.08 KB
/
.patina.default.yaml
File metadata and controls
197 lines (185 loc) · 7.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
version: "3.11.0"
language: ko # Korean (default) -- auto-loads all ko-*.md patterns
# language: en -- English -- auto-loads all en-*.md patterns
# language: zh -- Chinese -- auto-loads all zh-*.md patterns
# language: ja -- Japanese -- auto-loads all ja-*.md patterns
# Override with CLI: --lang en / --lang zh / --lang ja
profile: default
output: rewrite # rewrite | diff | audit | score
# Tone categorization (v3.10): named voice axis. Six v1 tones for ko/en.
# Resolution: explicit --tone > config tone > config profile.
# auto = heuristic single-tone detection at SKILL.md Phase 4.5b.
# Unset = profile-only legacy behavior (regression-safe default).
tone: # one of: casual, professional, academic, narrative, marketing, instructional, auto
# Override with CLI: --tone <name>
# zh/ja with explicit tone: warns and falls back to profile.
# Supported languages: ko, en, zh, ja
# patterns 목록은 기본 언어(ko)의 팩을 문서화합니다.
# 실제 로딩은 Glob patterns/{lang}-*.md로 자동 탐색합니다.
# 특정 팩을 제외하려면 skip-patterns를 사용하세요.
patterns:
- ko-structure
- ko-content
- ko-language
- ko-style
- ko-communication
- ko-filler
- ko-viral-hook # score-only — detection without rewrite
# English packs (auto-discovered when language: en):
# - en-structure (5 patterns: #25-28, #30)
# - en-content
# - en-language
# - en-style
# - en-communication
# - en-filler (4 patterns: #22-24, #31)
# Chinese packs (auto-discovered when language: zh):
# - zh-structure (5 patterns: #25-28, #30)
# - zh-content
# - zh-language
# - zh-style
# - zh-communication
# - zh-filler (4 patterns: #22-24, #31)
# Japanese packs (auto-discovered when language: ja):
# - ja-structure (5 patterns: #25-28, #30)
# - ja-content
# - ja-language
# - ja-style
# - ja-communication
# - ja-filler (4 patterns: #22-24, #31)
skip-patterns: []
blocklist: [] # 추가로 감지할 어휘
allowlist: [] # 감지에서 제외할 어휘
# MAX mode: multi-model humanization
# claude uses `claude -p`, gemini uses `gemini -p '' --output-format text`,
# codex uses `codex exec --skip-git-repo-check --output-last-message <file>`
# Supported models: claude, codex, gemini
# Override with CLI: --models claude,gemini,codex
max-models:
- claude
- gemini
# Dispatch mode for MAX mode CLI execution
# omc: tmux pane parallel dispatch (recommended, requires oh-my-claudecode + tmux)
# - Uses a unique temp dir per run
# - Waits only for selected models and marks timed-out runs as failed
# - All providers receive the prompt via stdin
# direct: sequential stdin dispatch (fallback; apply the same per-model timeout)
# api: HTTP API dispatch (no local CLI needed; requires PATINA_API_KEY env var)
# - Uses OpenAI-compatible chat completions endpoint
# - Works with Anthropic, OpenAI, Google AI Studio, OpenRouter, etc.
# - Requires curl and jq
# - Model IDs configurable via PATINA_MODEL_* env vars
dispatch: omc
# Ouroboros: iterative self-improvement loop
# Runs the full humanization pipeline repeatedly until the AI score converges.
# Enable via config or CLI flag: --ouroboros
ouroboros:
enabled: false # opt-in; --ouroboros CLI flag overrides to true
target-score: 30 # stop when overall score <= this value (0-100)
max-iterations: 3 # hard limit on loop iterations
plateau-threshold: 10 # stop if score improves by less than this between iterations
category-weights:
ko:
content: 0.18
language: 0.18
style: 0.18
communication: 0.13
filler: 0.08
structure: 0.15
viral-hook: 0.10 # score-only pack (excluded from rewrite)
en:
content: 0.20
language: 0.20
style: 0.20
communication: 0.12
filler: 0.08
structure: 0.10
viral-hook: 0.10 # score-only pack (excluded from rewrite)
zh:
content: 0.18
language: 0.18
style: 0.18
communication: 0.13
filler: 0.08
structure: 0.15
viral-hook: 0.10 # score-only pack (excluded from rewrite)
ja:
content: 0.18
language: 0.18
style: 0.18
communication: 0.13
filler: 0.08
structure: 0.15
viral-hook: 0.10 # score-only pack (excluded from rewrite)
fidelity-floor: 70 # stop ouroboros if fidelity drops below this
mps-floor: 70 # stop ouroboros if MPS (meaning preservation) drops below this
combined-weights:
default:
ai-likeness: 0.60
fidelity: 0.40
academic:
ai-likeness: 0.40
fidelity: 0.60
blog:
ai-likeness: 0.70
fidelity: 0.30
technical:
ai-likeness: 0.35
fidelity: 0.65
social:
ai-likeness: 0.75
fidelity: 0.25
email:
ai-likeness: 0.50
fidelity: 0.50
legal:
ai-likeness: 0.35
fidelity: 0.65
medical:
ai-likeness: 0.35
fidelity: 0.65
marketing:
ai-likeness: 0.65
fidelity: 0.35
severity-points:
high: 3
medium: 2
low: 1
# Stylometry: deterministic statistical preprocessing (SKILL.md Step 4.6)
# Calculates burstiness (sentence-length CV) and MATTR (lexical diversity) per
# paragraph, marks suspect zones, and feeds them into 5a/5b as internal memory.
# See core/stylometry.md for the full algorithm reference.
stylometry:
enabled: true # set false to bypass 4.6단계 entirely
languages: [ko, en] # only languages where v1 stylometry runs
burstiness:
bands:
low: 0.30 # CV < 0.30 → low (suspect). Calibrated v3.5.1 from
# 0.25 against 300 external paragraphs (HC3 + Wikipedia).
high: 0.50 # CV > 0.50 → high
ttr:
window: 50 # MATTR window in tokens
bands:
low: 0.55 # MATTR < 0.55 → low (suspect)
high: 0.70 # MATTR > 0.70 → high
sentence_zoom:
similarity_threshold: 0.20 # adjacent sentences within ±20% token count → grouped as sub-flag
skip:
min_paragraphs: 2
min_sentences: 2
# AI-Lexicon Overlap (SKILL.md Step 4.7)
# Matches paragraphs against an AI-favored phrase dictionary not covered
# by the 28-pattern catalog. Computes density per 1000 tokens; high
# density paragraphs are flagged SUSPECT under the 3-signal OR rule
# (burstiness OR MATTR OR lexicon_density).
# See core/stylometry.md §16 for the full algorithm.
lexicon:
enabled: true
languages: [en, ko] # zh/ja deferred (no curated lexicon yet)
density_threshold: 2.0 # matches per 1000 tokens; > threshold → SUSPECT
# Lexicon files auto-discovered via Glob lexicon/ai-{lang}.md
# See lexicon/ai-en.md (108 entries) and lexicon/ai-ko.md (90 entries).
# Calibrated against 400 paragraphs (HC3 + Wikipedia + NamuWiki):
# AI catch 66% → 76% with Wikipedia FP staying at 25% boundary.
skip:
min_paragraphs: 2
min_sentences: 2