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
@@ -0,0 +1,542 @@
1
+ [
2
+ {
3
+ "kind": "phrase",
4
+ "entry": "总而言之",
5
+ "added": "2026-05-20",
6
+ "source": "zh-v1.0-2026-05-20-starter",
7
+ "last_validated": null,
8
+ "lift": null,
9
+ "status": "needs-external-calibration"
10
+ },
11
+ {
12
+ "kind": "phrase",
13
+ "entry": "综上所述",
14
+ "added": "2026-05-20",
15
+ "source": "zh-v1.0-2026-05-20-starter",
16
+ "last_validated": null,
17
+ "lift": null,
18
+ "status": "needs-external-calibration"
19
+ },
20
+ {
21
+ "kind": "phrase",
22
+ "entry": "总的来说",
23
+ "added": "2026-05-20",
24
+ "source": "zh-v1.0-2026-05-20-starter",
25
+ "last_validated": null,
26
+ "lift": null,
27
+ "status": "needs-external-calibration"
28
+ },
29
+ {
30
+ "kind": "phrase",
31
+ "entry": "概括而言",
32
+ "added": "2026-05-20",
33
+ "source": "zh-v1.0-2026-05-20-starter",
34
+ "last_validated": null,
35
+ "lift": null,
36
+ "status": "needs-external-calibration"
37
+ },
38
+ {
39
+ "kind": "phrase",
40
+ "entry": "不难看出",
41
+ "added": "2026-05-20",
42
+ "source": "zh-v1.0-2026-05-20-starter",
43
+ "last_validated": null,
44
+ "lift": null,
45
+ "status": "needs-external-calibration"
46
+ },
47
+ {
48
+ "kind": "phrase",
49
+ "entry": "值得注意的是",
50
+ "added": "2026-05-20",
51
+ "source": "zh-v1.0-2026-05-20-starter",
52
+ "last_validated": null,
53
+ "lift": null,
54
+ "status": "needs-external-calibration"
55
+ },
56
+ {
57
+ "kind": "phrase",
58
+ "entry": "需要指出的是",
59
+ "added": "2026-05-20",
60
+ "source": "zh-v1.0-2026-05-20-starter",
61
+ "last_validated": null,
62
+ "lift": null,
63
+ "status": "needs-external-calibration"
64
+ },
65
+ {
66
+ "kind": "phrase",
67
+ "entry": "重要的是",
68
+ "added": "2026-05-20",
69
+ "source": "zh-v1.0-2026-05-20-starter",
70
+ "last_validated": null,
71
+ "lift": null,
72
+ "status": "needs-external-calibration"
73
+ },
74
+ {
75
+ "kind": "phrase",
76
+ "entry": "至关重要的是",
77
+ "added": "2026-05-20",
78
+ "source": "zh-v1.0-2026-05-20-starter",
79
+ "last_validated": null,
80
+ "lift": null,
81
+ "status": "needs-external-calibration"
82
+ },
83
+ {
84
+ "kind": "phrase",
85
+ "entry": "在当今社会",
86
+ "added": "2026-05-20",
87
+ "source": "zh-v1.0-2026-05-20-starter",
88
+ "last_validated": null,
89
+ "lift": null,
90
+ "status": "needs-external-calibration"
91
+ },
92
+ {
93
+ "kind": "phrase",
94
+ "entry": "在数字时代",
95
+ "added": "2026-05-20",
96
+ "source": "zh-v1.0-2026-05-20-starter",
97
+ "last_validated": null,
98
+ "lift": null,
99
+ "status": "needs-external-calibration"
100
+ },
101
+ {
102
+ "kind": "phrase",
103
+ "entry": "随着科技的发展",
104
+ "added": "2026-05-20",
105
+ "source": "zh-v1.0-2026-05-20-starter",
106
+ "last_validated": null,
107
+ "lift": null,
108
+ "status": "needs-external-calibration"
109
+ },
110
+ {
111
+ "kind": "phrase",
112
+ "entry": "随着社会的进步",
113
+ "added": "2026-05-20",
114
+ "source": "zh-v1.0-2026-05-20-starter",
115
+ "last_validated": null,
116
+ "lift": null,
117
+ "status": "needs-external-calibration"
118
+ },
119
+ {
120
+ "kind": "phrase",
121
+ "entry": "在这个过程中",
122
+ "added": "2026-05-20",
123
+ "source": "zh-v1.0-2026-05-20-starter",
124
+ "last_validated": null,
125
+ "lift": null,
126
+ "status": "needs-external-calibration"
127
+ },
128
+ {
129
+ "kind": "phrase",
130
+ "entry": "从多个角度来看",
131
+ "added": "2026-05-20",
132
+ "source": "zh-v1.0-2026-05-20-starter",
133
+ "last_validated": null,
134
+ "lift": null,
135
+ "status": "needs-external-calibration"
136
+ },
137
+ {
138
+ "kind": "phrase",
139
+ "entry": "从长远来看",
140
+ "added": "2026-05-20",
141
+ "source": "zh-v1.0-2026-05-20-starter",
142
+ "last_validated": null,
143
+ "lift": null,
144
+ "status": "needs-external-calibration"
145
+ },
146
+ {
147
+ "kind": "phrase",
148
+ "entry": "不仅~而且",
149
+ "added": "2026-05-20",
150
+ "source": "zh-v1.0-2026-05-20-starter",
151
+ "last_validated": null,
152
+ "lift": null,
153
+ "status": "needs-external-calibration"
154
+ },
155
+ {
156
+ "kind": "phrase",
157
+ "entry": "一方面~另一方面",
158
+ "added": "2026-05-20",
159
+ "source": "zh-v1.0-2026-05-20-starter",
160
+ "last_validated": null,
161
+ "lift": null,
162
+ "status": "needs-external-calibration"
163
+ },
164
+ {
165
+ "kind": "phrase",
166
+ "entry": "对于~而言",
167
+ "added": "2026-05-20",
168
+ "source": "zh-v1.0-2026-05-20-starter",
169
+ "last_validated": null,
170
+ "lift": null,
171
+ "status": "needs-external-calibration"
172
+ },
173
+ {
174
+ "kind": "phrase",
175
+ "entry": "从某种程度上说",
176
+ "added": "2026-05-20",
177
+ "source": "zh-v1.0-2026-05-20-starter",
178
+ "last_validated": null,
179
+ "lift": null,
180
+ "status": "needs-external-calibration"
181
+ },
182
+ {
183
+ "kind": "phrase",
184
+ "entry": "可以说",
185
+ "added": "2026-05-20",
186
+ "source": "zh-v1.0-2026-05-20-starter",
187
+ "last_validated": null,
188
+ "lift": null,
189
+ "status": "needs-external-calibration"
190
+ },
191
+ {
192
+ "kind": "phrase",
193
+ "entry": "不言而喻",
194
+ "added": "2026-05-20",
195
+ "source": "zh-v1.0-2026-05-20-starter",
196
+ "last_validated": null,
197
+ "lift": null,
198
+ "status": "needs-external-calibration"
199
+ },
200
+ {
201
+ "kind": "phrase",
202
+ "entry": "显得尤为重要",
203
+ "added": "2026-05-20",
204
+ "source": "zh-v1.0-2026-05-20-starter",
205
+ "last_validated": null,
206
+ "lift": null,
207
+ "status": "needs-external-calibration"
208
+ },
209
+ {
210
+ "kind": "phrase",
211
+ "entry": "具有重要意义",
212
+ "added": "2026-05-20",
213
+ "source": "zh-v1.0-2026-05-20-starter",
214
+ "last_validated": null,
215
+ "lift": null,
216
+ "status": "needs-external-calibration"
217
+ },
218
+ {
219
+ "kind": "phrase",
220
+ "entry": "发挥着重要作用",
221
+ "added": "2026-05-20",
222
+ "source": "zh-v1.0-2026-05-20-starter",
223
+ "last_validated": null,
224
+ "lift": null,
225
+ "status": "needs-external-calibration"
226
+ },
227
+ {
228
+ "kind": "phrase",
229
+ "entry": "起着至关重要的作用",
230
+ "added": "2026-05-20",
231
+ "source": "zh-v1.0-2026-05-20-starter",
232
+ "last_validated": null,
233
+ "lift": null,
234
+ "status": "needs-external-calibration"
235
+ },
236
+ {
237
+ "kind": "phrase",
238
+ "entry": "为~提供了新的可能",
239
+ "added": "2026-05-20",
240
+ "source": "zh-v1.0-2026-05-20-starter",
241
+ "last_validated": null,
242
+ "lift": null,
243
+ "status": "needs-external-calibration"
244
+ },
245
+ {
246
+ "kind": "phrase",
247
+ "entry": "带来了新的机遇",
248
+ "added": "2026-05-20",
249
+ "source": "zh-v1.0-2026-05-20-starter",
250
+ "last_validated": null,
251
+ "lift": null,
252
+ "status": "needs-external-calibration"
253
+ },
254
+ {
255
+ "kind": "phrase",
256
+ "entry": "面临新的挑战",
257
+ "added": "2026-05-20",
258
+ "source": "zh-v1.0-2026-05-20-starter",
259
+ "last_validated": null,
260
+ "lift": null,
261
+ "status": "needs-external-calibration"
262
+ },
263
+ {
264
+ "kind": "phrase",
265
+ "entry": "注入新的活力",
266
+ "added": "2026-05-20",
267
+ "source": "zh-v1.0-2026-05-20-starter",
268
+ "last_validated": null,
269
+ "lift": null,
270
+ "status": "needs-external-calibration"
271
+ },
272
+ {
273
+ "kind": "phrase",
274
+ "entry": "赋予~新的内涵",
275
+ "added": "2026-05-20",
276
+ "source": "zh-v1.0-2026-05-20-starter",
277
+ "last_validated": null,
278
+ "lift": null,
279
+ "status": "needs-external-calibration"
280
+ },
281
+ {
282
+ "kind": "phrase",
283
+ "entry": "打造更加",
284
+ "added": "2026-05-20",
285
+ "source": "zh-v1.0-2026-05-20-starter",
286
+ "last_validated": null,
287
+ "lift": null,
288
+ "status": "needs-external-calibration"
289
+ },
290
+ {
291
+ "kind": "phrase",
292
+ "entry": "推动~高质量发展",
293
+ "added": "2026-05-20",
294
+ "source": "zh-v1.0-2026-05-20-starter",
295
+ "last_validated": null,
296
+ "lift": null,
297
+ "status": "needs-external-calibration"
298
+ },
299
+ {
300
+ "kind": "phrase",
301
+ "entry": "提升用户体验",
302
+ "added": "2026-05-20",
303
+ "source": "zh-v1.0-2026-05-20-starter",
304
+ "last_validated": null,
305
+ "lift": null,
306
+ "status": "needs-external-calibration"
307
+ },
308
+ {
309
+ "kind": "phrase",
310
+ "entry": "优化整体流程",
311
+ "added": "2026-05-20",
312
+ "source": "zh-v1.0-2026-05-20-starter",
313
+ "last_validated": null,
314
+ "lift": null,
315
+ "status": "needs-external-calibration"
316
+ },
317
+ {
318
+ "kind": "phrase",
319
+ "entry": "实现可持续发展",
320
+ "added": "2026-05-20",
321
+ "source": "zh-v1.0-2026-05-20-starter",
322
+ "last_validated": null,
323
+ "lift": null,
324
+ "status": "needs-external-calibration"
325
+ },
326
+ {
327
+ "kind": "phrase",
328
+ "entry": "构建完整生态",
329
+ "added": "2026-05-20",
330
+ "source": "zh-v1.0-2026-05-20-starter",
331
+ "last_validated": null,
332
+ "lift": null,
333
+ "status": "needs-external-calibration"
334
+ },
335
+ {
336
+ "kind": "phrase",
337
+ "entry": "形成良性循环",
338
+ "added": "2026-05-20",
339
+ "source": "zh-v1.0-2026-05-20-starter",
340
+ "last_validated": null,
341
+ "lift": null,
342
+ "status": "needs-external-calibration"
343
+ },
344
+ {
345
+ "kind": "phrase",
346
+ "entry": "助力~发展",
347
+ "added": "2026-05-20",
348
+ "source": "zh-v1.0-2026-05-20-starter",
349
+ "last_validated": null,
350
+ "lift": null,
351
+ "status": "needs-external-calibration"
352
+ },
353
+ {
354
+ "kind": "phrase",
355
+ "entry": "让我们一起",
356
+ "added": "2026-05-20",
357
+ "source": "zh-v1.0-2026-05-20-starter",
358
+ "last_validated": null,
359
+ "lift": null,
360
+ "status": "needs-external-calibration"
361
+ },
362
+ {
363
+ "kind": "phrase",
364
+ "entry": "深入探讨",
365
+ "added": "2026-05-20",
366
+ "source": "zh-v1.0-2026-05-20-starter",
367
+ "last_validated": null,
368
+ "lift": null,
369
+ "status": "needs-external-calibration"
370
+ },
371
+ {
372
+ "kind": "phrase",
373
+ "entry": "全面了解",
374
+ "added": "2026-05-20",
375
+ "source": "zh-v1.0-2026-05-20-starter",
376
+ "last_validated": null,
377
+ "lift": null,
378
+ "status": "needs-external-calibration"
379
+ },
380
+ {
381
+ "kind": "phrase",
382
+ "entry": "多维度分析",
383
+ "added": "2026-05-20",
384
+ "source": "zh-v1.0-2026-05-20-starter",
385
+ "last_validated": null,
386
+ "lift": null,
387
+ "status": "needs-external-calibration"
388
+ },
389
+ {
390
+ "kind": "phrase",
391
+ "entry": "本文将带你",
392
+ "added": "2026-05-20",
393
+ "source": "zh-v1.0-2026-05-20-starter",
394
+ "last_validated": null,
395
+ "lift": null,
396
+ "status": "needs-external-calibration"
397
+ },
398
+ {
399
+ "kind": "phrase",
400
+ "entry": "接下来我们将",
401
+ "added": "2026-05-20",
402
+ "source": "zh-v1.0-2026-05-20-starter",
403
+ "last_validated": null,
404
+ "lift": null,
405
+ "status": "needs-external-calibration"
406
+ },
407
+ {
408
+ "kind": "phrase",
409
+ "entry": "不断推进",
410
+ "added": "2026-05-20",
411
+ "source": "zh-v1.0-2026-05-20-starter",
412
+ "last_validated": null,
413
+ "lift": null,
414
+ "status": "needs-external-calibration"
415
+ },
416
+ {
417
+ "kind": "phrase",
418
+ "entry": "持续赋能",
419
+ "added": "2026-05-20",
420
+ "source": "zh-v1.0-2026-05-20-starter",
421
+ "last_validated": null,
422
+ "lift": null,
423
+ "status": "needs-external-calibration"
424
+ },
425
+ {
426
+ "kind": "phrase",
427
+ "entry": "精准触达",
428
+ "added": "2026-05-20",
429
+ "source": "zh-v1.0-2026-05-20-starter",
430
+ "last_validated": null,
431
+ "lift": null,
432
+ "status": "needs-external-calibration"
433
+ },
434
+ {
435
+ "kind": "phrase",
436
+ "entry": "有效提升",
437
+ "added": "2026-05-20",
438
+ "source": "zh-v1.0-2026-05-20-starter",
439
+ "last_validated": null,
440
+ "lift": null,
441
+ "status": "needs-external-calibration"
442
+ },
443
+ {
444
+ "kind": "phrase",
445
+ "entry": "最大限度地",
446
+ "added": "2026-05-20",
447
+ "source": "zh-v1.0-2026-05-20-starter",
448
+ "last_validated": null,
449
+ "lift": null,
450
+ "status": "needs-external-calibration"
451
+ },
452
+ {
453
+ "kind": "phrase",
454
+ "entry": "进一步增强",
455
+ "added": "2026-05-20",
456
+ "source": "zh-v1.0-2026-05-20-starter",
457
+ "last_validated": null,
458
+ "lift": null,
459
+ "status": "needs-external-calibration"
460
+ },
461
+ {
462
+ "kind": "phrase",
463
+ "entry": "为未来奠定基础",
464
+ "added": "2026-05-20",
465
+ "source": "zh-v1.0-2026-05-20-starter",
466
+ "last_validated": null,
467
+ "lift": null,
468
+ "status": "needs-external-calibration"
469
+ },
470
+ {
471
+ "kind": "phrase",
472
+ "entry": "开启新的篇章",
473
+ "added": "2026-05-20",
474
+ "source": "zh-v1.0-2026-05-20-starter",
475
+ "last_validated": null,
476
+ "lift": null,
477
+ "status": "needs-external-calibration"
478
+ },
479
+ {
480
+ "kind": "phrase",
481
+ "entry": "迈向新的阶段",
482
+ "added": "2026-05-20",
483
+ "source": "zh-v1.0-2026-05-20-starter",
484
+ "last_validated": null,
485
+ "lift": null,
486
+ "status": "needs-external-calibration"
487
+ },
488
+ {
489
+ "kind": "phrase",
490
+ "entry": "释放巨大潜力",
491
+ "added": "2026-05-20",
492
+ "source": "zh-v1.0-2026-05-20-starter",
493
+ "last_validated": null,
494
+ "lift": null,
495
+ "status": "needs-external-calibration"
496
+ },
497
+ {
498
+ "kind": "phrase",
499
+ "entry": "展现出独特价值",
500
+ "added": "2026-05-20",
501
+ "source": "zh-v1.0-2026-05-20-starter",
502
+ "last_validated": null,
503
+ "lift": null,
504
+ "status": "needs-external-calibration"
505
+ },
506
+ {
507
+ "kind": "phrase",
508
+ "entry": "成为不可或缺的一部分",
509
+ "added": "2026-05-20",
510
+ "source": "zh-v1.0-2026-05-20-starter",
511
+ "last_validated": null,
512
+ "lift": null,
513
+ "status": "needs-external-calibration"
514
+ },
515
+ {
516
+ "kind": "phrase",
517
+ "entry": "以人为本的理念",
518
+ "added": "2026-05-20",
519
+ "source": "zh-v1.0-2026-05-20-starter",
520
+ "last_validated": null,
521
+ "lift": null,
522
+ "status": "needs-external-calibration"
523
+ },
524
+ {
525
+ "kind": "phrase",
526
+ "entry": "兼顾效率与体验",
527
+ "added": "2026-05-20",
528
+ "source": "zh-v1.0-2026-05-20-starter",
529
+ "last_validated": null,
530
+ "lift": null,
531
+ "status": "needs-external-calibration"
532
+ },
533
+ {
534
+ "kind": "phrase",
535
+ "entry": "为读者提供参考",
536
+ "added": "2026-05-20",
537
+ "source": "zh-v1.0-2026-05-20-starter",
538
+ "last_validated": null,
539
+ "lift": null,
540
+ "status": "needs-external-calibration"
541
+ }
542
+ ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "patina-cli",
3
- "version": "3.11.0",
3
+ "version": "4.0.0",
4
4
  "description": "AI text humanizer CLI — detects and removes AI writing patterns",
5
5
  "type": "module",
6
6
  "main": "src/cli.js",
@@ -14,16 +14,32 @@
14
14
  "test:e2e": "node --test tests/e2e/*.test.js",
15
15
  "benchmark": "node tests/quality/benchmark.mjs",
16
16
  "benchmark:report": "node scripts/benchmark-report.mjs",
17
+ "benchmark:rebaseline": "node scripts/rebaseline-summary.mjs",
18
+ "benchmark:rebaseline:report": "node scripts/rebaseline-summary.mjs --write",
19
+ "benchmark:register-pilot": "node scripts/rebaseline-summary.mjs --input artifacts/rebaseline-2025/human-controls.public.jsonl",
20
+ "quality:adversarial-mps": "node scripts/adversarial-mps-report.mjs --check",
17
21
  "dogfood": "node tests/quality/dogfood.mjs",
22
+ "badge": "node scripts/badge-json.mjs",
18
23
  "lint": "npm run lint:syntax && npm run lint:eslint && npm run typecheck && npm run spellcheck",
19
24
  "release:check": "node scripts/check-release-metadata.mjs",
20
- "prepublishOnly": "npm run release:check && npm test && npm run benchmark:report && npm run dogfood",
25
+ "check:no-private-assets": "node scripts/check-no-private-assets.mjs",
26
+ "prepublishOnly": "npm run release:check && npm run check:no-private-assets && npm test && npm run benchmark:report && npm run dogfood",
21
27
  "benchmark:ranges": "node scripts/update-benchmark-ranges.mjs",
22
28
  "benchmark:compare": "node scripts/detector-comparison.mjs",
23
29
  "lint:syntax": "node scripts/lint.mjs",
24
30
  "lint:eslint": "eslint .",
25
31
  "typecheck": "node scripts/typecheck.mjs",
26
- "spellcheck": "cspell \"patterns/**/*.md\" \"lexicon/**/*.md\""
32
+ "spellcheck": "cspell \"patterns/**/*.md\" \"lexicon/**/*.md\"",
33
+ "docs:api": "node scripts/generate-api-docs.mjs",
34
+ "playground:data": "node scripts/generate-playground-data.mjs",
35
+ "quality:live": "node tests/quality/live-quality.mjs",
36
+ "benchmark:rebaseline:intake": "node scripts/rebaseline-intake.mjs",
37
+ "benchmark:rebaseline:score": "node scripts/rebaseline-score.mjs",
38
+ "benchmark:rebaseline:web": "node scripts/rebaseline-web-collect.mjs",
39
+ "benchmark:katfish-ko": "node scripts/katfish-calibration.mjs",
40
+ "lexicon:freshness": "node scripts/lexicon-freshness.mjs --check",
41
+ "benchmark:rebaseline:generate-modern": "node scripts/rebaseline-generate-modern.mjs",
42
+ "benchmark:rebaseline:claim-manifest": "node scripts/rebaseline-build-claim-manifest.mjs"
27
43
  },
28
44
  "dependencies": {
29
45
  "js-yaml": "^4.1.0"
@@ -62,11 +78,15 @@
62
78
  "profiles/",
63
79
  "lexicon/",
64
80
  "docs/",
65
- "assets/",
81
+ "!docs/internal/**",
82
+ "assets/brand/",
83
+ "assets/social/",
84
+ "assets/demo/README.md",
66
85
  "scripts/benchmark-report.mjs",
67
86
  "tests/quality/dogfood.mjs",
68
87
  "scripts/lint.mjs",
69
88
  "tests/quality/benchmark.mjs",
89
+ "tests/quality/ranking-metrics.mjs",
70
90
  "tests/quality/README.md",
71
91
  "tests/fixtures/suspect-zones/",
72
92
  "README.md",
@@ -74,18 +94,38 @@
74
94
  "README_ZH.md",
75
95
  "README_JA.md",
76
96
  "SKILL.md",
77
- "SKILL-MAX.md",
78
- "patina-max/SKILL.md",
79
- "patina-max/composite.py",
80
97
  ".patina.default.yaml",
81
98
  "LICENSE",
99
+ "NOTICE",
82
100
  "CHANGELOG.md",
83
101
  "scripts/check-release-metadata.mjs",
84
102
  "scripts/prose-score.mjs",
103
+ "scripts/badge-json.mjs",
85
104
  "scripts/precommit-score.mjs",
86
105
  "scripts/update-benchmark-ranges.mjs",
87
106
  "scripts/detector-comparison.mjs",
88
- "tests/quality/detectors.manual.example.json"
107
+ "tests/quality/detectors.manual.example.json",
108
+ "playground/",
109
+ "vercel.json",
110
+ "scripts/generate-playground-data.mjs",
111
+ "tests/quality/live-quality.mjs",
112
+ "tests/quality/live-fixtures.jsonl",
113
+ "tests/fixtures/live-quality/",
114
+ "scripts/rebaseline-summary.mjs",
115
+ "scripts/adversarial-mps-report.mjs",
116
+ "scripts/rebaseline-intake.mjs",
117
+ "scripts/rebaseline-score.mjs",
118
+ "tests/quality/adversarial-mps/",
119
+ "tests/quality/rebaseline-manifest.example.jsonl",
120
+ "artifacts/rebaseline-2025/README.md",
121
+ "artifacts/rebaseline-2025/intake.example.jsonl",
122
+ "artifacts/rebaseline-2025/prompts.template.jsonl",
123
+ "artifacts/rebaseline-2025/intake.local.example.jsonl",
124
+ "artifacts/rebaseline-2025/human-controls.public.jsonl",
125
+ "scripts/rebaseline-web-collect.mjs",
126
+ "scripts/katfish-calibration.mjs",
127
+ "scripts/lexicon-freshness.mjs",
128
+ "artifacts/rebaseline-2025/sources.ko-public.jsonl"
89
129
  ],
90
130
  "publishConfig": {
91
131
  "access": "public"
@@ -95,6 +135,7 @@
95
135
  "@types/node": "^18.19.130",
96
136
  "cspell": "^8.19.4",
97
137
  "eslint": "^8.57.1",
138
+ "jsdoc-to-markdown": "^9.1.3",
98
139
  "typescript": "^5.4.5"
99
140
  }
100
141
  }
@@ -4,6 +4,11 @@ language: en
4
4
  name: Communication Patterns
5
5
  version: 1.1.0
6
6
  patterns: 4
7
+ corpus-snapshot:
8
+ id: bootstrap-patterns-pre-provenance
9
+ status: needs-quarterly-refresh
10
+ source: maintainer-curated pattern packs before quarterly corpus snapshot tracking
11
+ last_validated: null
7
12
  ---
8
13
 
9
14
  # Communication Patterns
@@ -4,6 +4,11 @@ language: en
4
4
  name: Content Patterns
5
5
  version: 1.0.0
6
6
  patterns: 6
7
+ corpus-snapshot:
8
+ id: bootstrap-patterns-pre-provenance
9
+ status: needs-quarterly-refresh
10
+ source: maintainer-curated pattern packs before quarterly corpus snapshot tracking
11
+ last_validated: null
7
12
  ---
8
13
 
9
14
  # Content Patterns
@@ -4,6 +4,11 @@ language: en
4
4
  name: Filler & Hedging Patterns
5
5
  version: 1.1.0
6
6
  patterns: 4
7
+ corpus-snapshot:
8
+ id: bootstrap-patterns-pre-provenance
9
+ status: needs-quarterly-refresh
10
+ source: maintainer-curated pattern packs before quarterly corpus snapshot tracking
11
+ last_validated: null
7
12
  ---
8
13
 
9
14
  # Filler & Hedging Patterns