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,988 @@
1
+ {
2
+ "reportVersion": 2,
3
+ "benchmarkCommand": "node tests/quality/benchmark.mjs --quiet",
4
+ "benchmarkStatus": 0,
5
+ "note": "Deterministic suspect-zone benchmark; not an authorship detector.",
6
+ "regressionRanges": "tests/fixtures/suspect-zones/expected-ranges.json",
7
+ "schemaVersion": 2,
8
+ "fixtureSchemaVersion": 1,
9
+ "nodeVersion": "v22.17.1",
10
+ "generatedAt": "2026-05-20T11:14:22.284Z",
11
+ "fixtureCount": 34,
12
+ "overallAccuracy": 1,
13
+ "overall": {
14
+ "accuracy": 1,
15
+ "n": 34,
16
+ "ci_low": 0.898,
17
+ "ci_high": 1,
18
+ "confidence_method": "Wilson score interval, 95%"
19
+ },
20
+ "perLanguage": {
21
+ "en": {
22
+ "tp": 6,
23
+ "fp": 0,
24
+ "fn": 0,
25
+ "tn": 5,
26
+ "total": 11,
27
+ "accuracy": 1,
28
+ "precision": 1,
29
+ "recall": 1,
30
+ "f1": 1,
31
+ "n": 11,
32
+ "ci_low": 0.741,
33
+ "ci_high": 1,
34
+ "confidence_method": "Wilson score interval, 95%",
35
+ "byDetector": {
36
+ "burstiness": {
37
+ "tp": 6,
38
+ "fp": 0,
39
+ "fn": 0,
40
+ "tn": 5,
41
+ "total": 11,
42
+ "accuracy": 1,
43
+ "precision": 1,
44
+ "recall": 1,
45
+ "f1": 1,
46
+ "n": 11,
47
+ "ci_low": 0.741,
48
+ "ci_high": 1,
49
+ "confidence_method": "Wilson score interval, 95%"
50
+ },
51
+ "mattr": {
52
+ "tp": 0,
53
+ "fp": 0,
54
+ "fn": 6,
55
+ "tn": 5,
56
+ "total": 11,
57
+ "accuracy": 0.455,
58
+ "precision": 0,
59
+ "recall": 0,
60
+ "f1": 0,
61
+ "n": 11,
62
+ "ci_low": 0.213,
63
+ "ci_high": 0.72,
64
+ "confidence_method": "Wilson score interval, 95%"
65
+ },
66
+ "lexicon": {
67
+ "tp": 0,
68
+ "fp": 0,
69
+ "fn": 6,
70
+ "tn": 5,
71
+ "total": 11,
72
+ "accuracy": 0.455,
73
+ "precision": 0,
74
+ "recall": 0,
75
+ "f1": 0,
76
+ "n": 11,
77
+ "ci_low": 0.213,
78
+ "ci_high": 0.72,
79
+ "confidence_method": "Wilson score interval, 95%"
80
+ }
81
+ }
82
+ },
83
+ "ja": {
84
+ "tp": 3,
85
+ "fp": 0,
86
+ "fn": 0,
87
+ "tn": 3,
88
+ "total": 6,
89
+ "accuracy": 1,
90
+ "precision": 1,
91
+ "recall": 1,
92
+ "f1": 1,
93
+ "n": 6,
94
+ "ci_low": 0.61,
95
+ "ci_high": 1,
96
+ "confidence_method": "Wilson score interval, 95%",
97
+ "byDetector": {
98
+ "burstiness": {
99
+ "tp": 3,
100
+ "fp": 0,
101
+ "fn": 0,
102
+ "tn": 3,
103
+ "total": 6,
104
+ "accuracy": 1,
105
+ "precision": 1,
106
+ "recall": 1,
107
+ "f1": 1,
108
+ "n": 6,
109
+ "ci_low": 0.61,
110
+ "ci_high": 1,
111
+ "confidence_method": "Wilson score interval, 95%"
112
+ },
113
+ "mattr": {
114
+ "tp": 0,
115
+ "fp": 0,
116
+ "fn": 3,
117
+ "tn": 3,
118
+ "total": 6,
119
+ "accuracy": 0.5,
120
+ "precision": 0,
121
+ "recall": 0,
122
+ "f1": 0,
123
+ "n": 6,
124
+ "ci_low": 0.188,
125
+ "ci_high": 0.812,
126
+ "confidence_method": "Wilson score interval, 95%"
127
+ },
128
+ "lexicon": {
129
+ "tp": 0,
130
+ "fp": 0,
131
+ "fn": 3,
132
+ "tn": 3,
133
+ "total": 6,
134
+ "accuracy": 0.5,
135
+ "precision": 0,
136
+ "recall": 0,
137
+ "f1": 0,
138
+ "n": 6,
139
+ "ci_low": 0.188,
140
+ "ci_high": 0.812,
141
+ "confidence_method": "Wilson score interval, 95%"
142
+ }
143
+ }
144
+ },
145
+ "ko": {
146
+ "tp": 6,
147
+ "fp": 0,
148
+ "fn": 0,
149
+ "tn": 5,
150
+ "total": 11,
151
+ "accuracy": 1,
152
+ "precision": 1,
153
+ "recall": 1,
154
+ "f1": 1,
155
+ "n": 11,
156
+ "ci_low": 0.741,
157
+ "ci_high": 1,
158
+ "confidence_method": "Wilson score interval, 95%",
159
+ "byDetector": {
160
+ "burstiness": {
161
+ "tp": 6,
162
+ "fp": 0,
163
+ "fn": 0,
164
+ "tn": 5,
165
+ "total": 11,
166
+ "accuracy": 1,
167
+ "precision": 1,
168
+ "recall": 1,
169
+ "f1": 1,
170
+ "n": 11,
171
+ "ci_low": 0.741,
172
+ "ci_high": 1,
173
+ "confidence_method": "Wilson score interval, 95%"
174
+ },
175
+ "mattr": {
176
+ "tp": 0,
177
+ "fp": 0,
178
+ "fn": 6,
179
+ "tn": 5,
180
+ "total": 11,
181
+ "accuracy": 0.455,
182
+ "precision": 0,
183
+ "recall": 0,
184
+ "f1": 0,
185
+ "n": 11,
186
+ "ci_low": 0.213,
187
+ "ci_high": 0.72,
188
+ "confidence_method": "Wilson score interval, 95%"
189
+ },
190
+ "lexicon": {
191
+ "tp": 4,
192
+ "fp": 0,
193
+ "fn": 2,
194
+ "tn": 5,
195
+ "total": 11,
196
+ "accuracy": 0.818,
197
+ "precision": 1,
198
+ "recall": 0.667,
199
+ "f1": 0.8,
200
+ "n": 11,
201
+ "ci_low": 0.523,
202
+ "ci_high": 0.949,
203
+ "confidence_method": "Wilson score interval, 95%"
204
+ }
205
+ }
206
+ },
207
+ "zh": {
208
+ "tp": 3,
209
+ "fp": 0,
210
+ "fn": 0,
211
+ "tn": 3,
212
+ "total": 6,
213
+ "accuracy": 1,
214
+ "precision": 1,
215
+ "recall": 1,
216
+ "f1": 1,
217
+ "n": 6,
218
+ "ci_low": 0.61,
219
+ "ci_high": 1,
220
+ "confidence_method": "Wilson score interval, 95%",
221
+ "byDetector": {
222
+ "burstiness": {
223
+ "tp": 3,
224
+ "fp": 0,
225
+ "fn": 0,
226
+ "tn": 3,
227
+ "total": 6,
228
+ "accuracy": 1,
229
+ "precision": 1,
230
+ "recall": 1,
231
+ "f1": 1,
232
+ "n": 6,
233
+ "ci_low": 0.61,
234
+ "ci_high": 1,
235
+ "confidence_method": "Wilson score interval, 95%"
236
+ },
237
+ "mattr": {
238
+ "tp": 0,
239
+ "fp": 0,
240
+ "fn": 3,
241
+ "tn": 3,
242
+ "total": 6,
243
+ "accuracy": 0.5,
244
+ "precision": 0,
245
+ "recall": 0,
246
+ "f1": 0,
247
+ "n": 6,
248
+ "ci_low": 0.188,
249
+ "ci_high": 0.812,
250
+ "confidence_method": "Wilson score interval, 95%"
251
+ },
252
+ "lexicon": {
253
+ "tp": 0,
254
+ "fp": 0,
255
+ "fn": 3,
256
+ "tn": 3,
257
+ "total": 6,
258
+ "accuracy": 0.5,
259
+ "precision": 0,
260
+ "recall": 0,
261
+ "f1": 0,
262
+ "n": 6,
263
+ "ci_low": 0.188,
264
+ "ci_high": 0.812,
265
+ "confidence_method": "Wilson score interval, 95%"
266
+ }
267
+ }
268
+ }
269
+ },
270
+ "fixtures": [
271
+ {
272
+ "fixture_id": "en-ai-01",
273
+ "lang": "en",
274
+ "class": "ai",
275
+ "expected_hot": true,
276
+ "predicted_hot": true,
277
+ "correct": true,
278
+ "detectors": {
279
+ "burstiness": true,
280
+ "mattr": false,
281
+ "lexicon": false
282
+ },
283
+ "cv": 0.058,
284
+ "cv_band": "low",
285
+ "mattr": 0.928,
286
+ "mattr_band": "high",
287
+ "lexicon_density": 0,
288
+ "lexicon_hits": [],
289
+ "expected_metrics": null
290
+ },
291
+ {
292
+ "fixture_id": "en-ai-02",
293
+ "lang": "en",
294
+ "class": "ai",
295
+ "expected_hot": true,
296
+ "predicted_hot": true,
297
+ "correct": true,
298
+ "detectors": {
299
+ "burstiness": true,
300
+ "mattr": false,
301
+ "lexicon": false
302
+ },
303
+ "cv": 0.09,
304
+ "cv_band": "low",
305
+ "mattr": 0.841,
306
+ "mattr_band": "high",
307
+ "lexicon_density": 0,
308
+ "lexicon_hits": [],
309
+ "expected_metrics": null
310
+ },
311
+ {
312
+ "fixture_id": "en-ai-03",
313
+ "lang": "en",
314
+ "class": "ai",
315
+ "expected_hot": true,
316
+ "predicted_hot": true,
317
+ "correct": true,
318
+ "detectors": {
319
+ "burstiness": true,
320
+ "mattr": false,
321
+ "lexicon": false
322
+ },
323
+ "cv": 0.065,
324
+ "cv_band": "low",
325
+ "mattr": 0.828,
326
+ "mattr_band": "high",
327
+ "lexicon_density": 0,
328
+ "lexicon_hits": [],
329
+ "expected_metrics": null
330
+ },
331
+ {
332
+ "fixture_id": "en-ai-04",
333
+ "lang": "en",
334
+ "class": "ai",
335
+ "expected_hot": true,
336
+ "predicted_hot": true,
337
+ "correct": true,
338
+ "detectors": {
339
+ "burstiness": true,
340
+ "mattr": false,
341
+ "lexicon": false
342
+ },
343
+ "cv": 0.07,
344
+ "cv_band": "low",
345
+ "mattr": 0.84,
346
+ "mattr_band": "high",
347
+ "lexicon_density": 0,
348
+ "lexicon_hits": [],
349
+ "expected_metrics": null
350
+ },
351
+ {
352
+ "fixture_id": "en-ai-05",
353
+ "lang": "en",
354
+ "class": "ai",
355
+ "expected_hot": true,
356
+ "predicted_hot": true,
357
+ "correct": true,
358
+ "detectors": {
359
+ "burstiness": true,
360
+ "mattr": false,
361
+ "lexicon": false
362
+ },
363
+ "cv": 0.093,
364
+ "cv_band": "low",
365
+ "mattr": 0.879,
366
+ "mattr_band": "high",
367
+ "lexicon_density": 0,
368
+ "lexicon_hits": [],
369
+ "expected_metrics": null
370
+ },
371
+ {
372
+ "fixture_id": "en-ai-06-chat-register",
373
+ "lang": "en",
374
+ "class": "ai",
375
+ "expected_hot": true,
376
+ "predicted_hot": true,
377
+ "correct": true,
378
+ "detectors": {
379
+ "burstiness": true,
380
+ "mattr": false,
381
+ "lexicon": false
382
+ },
383
+ "cv": 0.034,
384
+ "cv_band": "low",
385
+ "mattr": 0.814,
386
+ "mattr_band": "high",
387
+ "lexicon_density": 0,
388
+ "lexicon_hits": [],
389
+ "expected_metrics": {
390
+ "cv_band": "low",
391
+ "mattr_band": "high",
392
+ "lexicon_density_min": 0,
393
+ "lexicon_density_max": 80
394
+ }
395
+ },
396
+ {
397
+ "fixture_id": "en-nat-01",
398
+ "lang": "en",
399
+ "class": "natural",
400
+ "expected_hot": false,
401
+ "predicted_hot": false,
402
+ "correct": true,
403
+ "detectors": {
404
+ "burstiness": false,
405
+ "mattr": false,
406
+ "lexicon": false
407
+ },
408
+ "cv": 0.881,
409
+ "cv_band": "high",
410
+ "mattr": 0.898,
411
+ "mattr_band": "high",
412
+ "lexicon_density": 0,
413
+ "lexicon_hits": [],
414
+ "expected_metrics": null
415
+ },
416
+ {
417
+ "fixture_id": "en-nat-02",
418
+ "lang": "en",
419
+ "class": "natural",
420
+ "expected_hot": false,
421
+ "predicted_hot": false,
422
+ "correct": true,
423
+ "detectors": {
424
+ "burstiness": false,
425
+ "mattr": false,
426
+ "lexicon": false
427
+ },
428
+ "cv": 0.886,
429
+ "cv_band": "high",
430
+ "mattr": 0.884,
431
+ "mattr_band": "high",
432
+ "lexicon_density": 0,
433
+ "lexicon_hits": [],
434
+ "expected_metrics": null
435
+ },
436
+ {
437
+ "fixture_id": "en-nat-03",
438
+ "lang": "en",
439
+ "class": "natural",
440
+ "expected_hot": false,
441
+ "predicted_hot": false,
442
+ "correct": true,
443
+ "detectors": {
444
+ "burstiness": false,
445
+ "mattr": false,
446
+ "lexicon": false
447
+ },
448
+ "cv": 0.914,
449
+ "cv_band": "high",
450
+ "mattr": 0.882,
451
+ "mattr_band": "high",
452
+ "lexicon_density": 0,
453
+ "lexicon_hits": [],
454
+ "expected_metrics": null
455
+ },
456
+ {
457
+ "fixture_id": "en-nat-04",
458
+ "lang": "en",
459
+ "class": "natural",
460
+ "expected_hot": false,
461
+ "predicted_hot": false,
462
+ "correct": true,
463
+ "detectors": {
464
+ "burstiness": false,
465
+ "mattr": false,
466
+ "lexicon": false
467
+ },
468
+ "cv": 0.494,
469
+ "cv_band": "mid",
470
+ "mattr": 0.854,
471
+ "mattr_band": "high",
472
+ "lexicon_density": 0,
473
+ "lexicon_hits": [],
474
+ "expected_metrics": null
475
+ },
476
+ {
477
+ "fixture_id": "en-nat-05",
478
+ "lang": "en",
479
+ "class": "natural",
480
+ "expected_hot": false,
481
+ "predicted_hot": false,
482
+ "correct": true,
483
+ "detectors": {
484
+ "burstiness": false,
485
+ "mattr": false,
486
+ "lexicon": false
487
+ },
488
+ "cv": 0.853,
489
+ "cv_band": "high",
490
+ "mattr": 0.875,
491
+ "mattr_band": "high",
492
+ "lexicon_density": 0,
493
+ "lexicon_hits": [],
494
+ "expected_metrics": null
495
+ },
496
+ {
497
+ "fixture_id": "ja-ai-01",
498
+ "lang": "ja",
499
+ "class": "ai",
500
+ "expected_hot": true,
501
+ "predicted_hot": true,
502
+ "correct": true,
503
+ "detectors": {
504
+ "burstiness": true,
505
+ "mattr": false,
506
+ "lexicon": false
507
+ },
508
+ "cv": 0.045,
509
+ "cv_band": "low",
510
+ "mattr": 0.833,
511
+ "mattr_band": "high",
512
+ "lexicon_density": 0,
513
+ "lexicon_hits": [],
514
+ "expected_metrics": null
515
+ },
516
+ {
517
+ "fixture_id": "ja-ai-02",
518
+ "lang": "ja",
519
+ "class": "ai",
520
+ "expected_hot": true,
521
+ "predicted_hot": true,
522
+ "correct": true,
523
+ "detectors": {
524
+ "burstiness": true,
525
+ "mattr": false,
526
+ "lexicon": false
527
+ },
528
+ "cv": 0.23,
529
+ "cv_band": "low",
530
+ "mattr": 0.785,
531
+ "mattr_band": "high",
532
+ "lexicon_density": 0,
533
+ "lexicon_hits": [],
534
+ "expected_metrics": null
535
+ },
536
+ {
537
+ "fixture_id": "ja-ai-03",
538
+ "lang": "ja",
539
+ "class": "ai",
540
+ "expected_hot": true,
541
+ "predicted_hot": true,
542
+ "correct": true,
543
+ "detectors": {
544
+ "burstiness": true,
545
+ "mattr": false,
546
+ "lexicon": false
547
+ },
548
+ "cv": 0.063,
549
+ "cv_band": "low",
550
+ "mattr": 0.795,
551
+ "mattr_band": "high",
552
+ "lexicon_density": 0,
553
+ "lexicon_hits": [],
554
+ "expected_metrics": null
555
+ },
556
+ {
557
+ "fixture_id": "ja-nat-01",
558
+ "lang": "ja",
559
+ "class": "natural",
560
+ "expected_hot": false,
561
+ "predicted_hot": false,
562
+ "correct": true,
563
+ "detectors": {
564
+ "burstiness": false,
565
+ "mattr": false,
566
+ "lexicon": false
567
+ },
568
+ "cv": 0.487,
569
+ "cv_band": "mid",
570
+ "mattr": 0.719,
571
+ "mattr_band": "high",
572
+ "lexicon_density": 0,
573
+ "lexicon_hits": [],
574
+ "expected_metrics": null
575
+ },
576
+ {
577
+ "fixture_id": "ja-nat-02",
578
+ "lang": "ja",
579
+ "class": "natural",
580
+ "expected_hot": false,
581
+ "predicted_hot": false,
582
+ "correct": true,
583
+ "detectors": {
584
+ "burstiness": false,
585
+ "mattr": false,
586
+ "lexicon": false
587
+ },
588
+ "cv": 0.65,
589
+ "cv_band": "high",
590
+ "mattr": 0.796,
591
+ "mattr_band": "high",
592
+ "lexicon_density": 0,
593
+ "lexicon_hits": [],
594
+ "expected_metrics": null
595
+ },
596
+ {
597
+ "fixture_id": "ja-nat-03",
598
+ "lang": "ja",
599
+ "class": "natural",
600
+ "expected_hot": false,
601
+ "predicted_hot": false,
602
+ "correct": true,
603
+ "detectors": {
604
+ "burstiness": false,
605
+ "mattr": false,
606
+ "lexicon": false
607
+ },
608
+ "cv": 0.395,
609
+ "cv_band": "mid",
610
+ "mattr": 0.807,
611
+ "mattr_band": "high",
612
+ "lexicon_density": 0,
613
+ "lexicon_hits": [],
614
+ "expected_metrics": null
615
+ },
616
+ {
617
+ "fixture_id": "ko-ai-01",
618
+ "lang": "ko",
619
+ "class": "ai",
620
+ "expected_hot": true,
621
+ "predicted_hot": true,
622
+ "correct": true,
623
+ "detectors": {
624
+ "burstiness": true,
625
+ "mattr": false,
626
+ "lexicon": true
627
+ },
628
+ "cv": 0.093,
629
+ "cv_band": "low",
630
+ "mattr": 0.977,
631
+ "mattr_band": "high",
632
+ "lexicon_density": 23.256,
633
+ "lexicon_hits": [
634
+ "추세"
635
+ ],
636
+ "expected_metrics": null
637
+ },
638
+ {
639
+ "fixture_id": "ko-ai-02",
640
+ "lang": "ko",
641
+ "class": "ai",
642
+ "expected_hot": true,
643
+ "predicted_hot": true,
644
+ "correct": true,
645
+ "detectors": {
646
+ "burstiness": true,
647
+ "mattr": false,
648
+ "lexicon": true
649
+ },
650
+ "cv": 0.073,
651
+ "cv_band": "low",
652
+ "mattr": 0.82,
653
+ "mattr_band": "high",
654
+ "lexicon_density": 19.608,
655
+ "lexicon_hits": [
656
+ "환경"
657
+ ],
658
+ "expected_metrics": null
659
+ },
660
+ {
661
+ "fixture_id": "ko-ai-03",
662
+ "lang": "ko",
663
+ "class": "ai",
664
+ "expected_hot": true,
665
+ "predicted_hot": true,
666
+ "correct": true,
667
+ "detectors": {
668
+ "burstiness": true,
669
+ "mattr": false,
670
+ "lexicon": true
671
+ },
672
+ "cv": 0.073,
673
+ "cv_band": "low",
674
+ "mattr": 0.79,
675
+ "mattr_band": "high",
676
+ "lexicon_density": 19.608,
677
+ "lexicon_hits": [
678
+ "추세"
679
+ ],
680
+ "expected_metrics": null
681
+ },
682
+ {
683
+ "fixture_id": "ko-ai-04",
684
+ "lang": "ko",
685
+ "class": "ai",
686
+ "expected_hot": true,
687
+ "predicted_hot": true,
688
+ "correct": true,
689
+ "detectors": {
690
+ "burstiness": true,
691
+ "mattr": false,
692
+ "lexicon": false
693
+ },
694
+ "cv": 0.098,
695
+ "cv_band": "low",
696
+ "mattr": 0.853,
697
+ "mattr_band": "high",
698
+ "lexicon_density": 0,
699
+ "lexicon_hits": [],
700
+ "expected_metrics": null
701
+ },
702
+ {
703
+ "fixture_id": "ko-ai-05",
704
+ "lang": "ko",
705
+ "class": "ai",
706
+ "expected_hot": true,
707
+ "predicted_hot": true,
708
+ "correct": true,
709
+ "detectors": {
710
+ "burstiness": true,
711
+ "mattr": false,
712
+ "lexicon": false
713
+ },
714
+ "cv": 0.098,
715
+ "cv_band": "low",
716
+ "mattr": 0.853,
717
+ "mattr_band": "high",
718
+ "lexicon_density": 0,
719
+ "lexicon_hits": [],
720
+ "expected_metrics": null
721
+ },
722
+ {
723
+ "fixture_id": "ko-ai-06-chat-register",
724
+ "lang": "ko",
725
+ "class": "ai",
726
+ "expected_hot": true,
727
+ "predicted_hot": true,
728
+ "correct": true,
729
+ "detectors": {
730
+ "burstiness": true,
731
+ "mattr": false,
732
+ "lexicon": true
733
+ },
734
+ "cv": 0.081,
735
+ "cv_band": "low",
736
+ "mattr": 1,
737
+ "mattr_band": "high",
738
+ "lexicon_density": 21.739,
739
+ "lexicon_hits": [
740
+ "흐름"
741
+ ],
742
+ "expected_metrics": {
743
+ "cv_band": "low",
744
+ "mattr_band": "high",
745
+ "lexicon_density_min": 0,
746
+ "lexicon_density_max": 80
747
+ }
748
+ },
749
+ {
750
+ "fixture_id": "ko-nat-01",
751
+ "lang": "ko",
752
+ "class": "natural",
753
+ "expected_hot": false,
754
+ "predicted_hot": false,
755
+ "correct": true,
756
+ "detectors": {
757
+ "burstiness": false,
758
+ "mattr": false,
759
+ "lexicon": false
760
+ },
761
+ "cv": 0.717,
762
+ "cv_band": "high",
763
+ "mattr": 1,
764
+ "mattr_band": "high",
765
+ "lexicon_density": 0,
766
+ "lexicon_hits": [],
767
+ "expected_metrics": null
768
+ },
769
+ {
770
+ "fixture_id": "ko-nat-02",
771
+ "lang": "ko",
772
+ "class": "natural",
773
+ "expected_hot": false,
774
+ "predicted_hot": false,
775
+ "correct": true,
776
+ "detectors": {
777
+ "burstiness": false,
778
+ "mattr": false,
779
+ "lexicon": false
780
+ },
781
+ "cv": 0.552,
782
+ "cv_band": "high",
783
+ "mattr": 1,
784
+ "mattr_band": "high",
785
+ "lexicon_density": 0,
786
+ "lexicon_hits": [],
787
+ "expected_metrics": null
788
+ },
789
+ {
790
+ "fixture_id": "ko-nat-03",
791
+ "lang": "ko",
792
+ "class": "natural",
793
+ "expected_hot": false,
794
+ "predicted_hot": false,
795
+ "correct": true,
796
+ "detectors": {
797
+ "burstiness": false,
798
+ "mattr": false,
799
+ "lexicon": false
800
+ },
801
+ "cv": 0.68,
802
+ "cv_band": "high",
803
+ "mattr": 1,
804
+ "mattr_band": "high",
805
+ "lexicon_density": 0,
806
+ "lexicon_hits": [],
807
+ "expected_metrics": null
808
+ },
809
+ {
810
+ "fixture_id": "ko-nat-04",
811
+ "lang": "ko",
812
+ "class": "natural",
813
+ "expected_hot": false,
814
+ "predicted_hot": false,
815
+ "correct": true,
816
+ "detectors": {
817
+ "burstiness": false,
818
+ "mattr": false,
819
+ "lexicon": false
820
+ },
821
+ "cv": 0.771,
822
+ "cv_band": "high",
823
+ "mattr": 0.975,
824
+ "mattr_band": "high",
825
+ "lexicon_density": 0,
826
+ "lexicon_hits": [],
827
+ "expected_metrics": null
828
+ },
829
+ {
830
+ "fixture_id": "ko-nat-05",
831
+ "lang": "ko",
832
+ "class": "natural",
833
+ "expected_hot": false,
834
+ "predicted_hot": false,
835
+ "correct": true,
836
+ "detectors": {
837
+ "burstiness": false,
838
+ "mattr": false,
839
+ "lexicon": false
840
+ },
841
+ "cv": 0.996,
842
+ "cv_band": "high",
843
+ "mattr": 0.998,
844
+ "mattr_band": "high",
845
+ "lexicon_density": 0,
846
+ "lexicon_hits": [],
847
+ "expected_metrics": null
848
+ },
849
+ {
850
+ "fixture_id": "zh-ai-01",
851
+ "lang": "zh",
852
+ "class": "ai",
853
+ "expected_hot": true,
854
+ "predicted_hot": true,
855
+ "correct": true,
856
+ "detectors": {
857
+ "burstiness": true,
858
+ "mattr": false,
859
+ "lexicon": false
860
+ },
861
+ "cv": 0.062,
862
+ "cv_band": "low",
863
+ "mattr": 0.902,
864
+ "mattr_band": "high",
865
+ "lexicon_density": 0,
866
+ "lexicon_hits": [],
867
+ "expected_metrics": null
868
+ },
869
+ {
870
+ "fixture_id": "zh-ai-02",
871
+ "lang": "zh",
872
+ "class": "ai",
873
+ "expected_hot": true,
874
+ "predicted_hot": true,
875
+ "correct": true,
876
+ "detectors": {
877
+ "burstiness": true,
878
+ "mattr": false,
879
+ "lexicon": false
880
+ },
881
+ "cv": 0.28,
882
+ "cv_band": "low",
883
+ "mattr": 0.734,
884
+ "mattr_band": "high",
885
+ "lexicon_density": 0,
886
+ "lexicon_hits": [],
887
+ "expected_metrics": null
888
+ },
889
+ {
890
+ "fixture_id": "zh-ai-03",
891
+ "lang": "zh",
892
+ "class": "ai",
893
+ "expected_hot": true,
894
+ "predicted_hot": true,
895
+ "correct": true,
896
+ "detectors": {
897
+ "burstiness": true,
898
+ "mattr": false,
899
+ "lexicon": false
900
+ },
901
+ "cv": 0.083,
902
+ "cv_band": "low",
903
+ "mattr": 0.933,
904
+ "mattr_band": "high",
905
+ "lexicon_density": 0,
906
+ "lexicon_hits": [],
907
+ "expected_metrics": null
908
+ },
909
+ {
910
+ "fixture_id": "zh-nat-01",
911
+ "lang": "zh",
912
+ "class": "natural",
913
+ "expected_hot": false,
914
+ "predicted_hot": false,
915
+ "correct": true,
916
+ "detectors": {
917
+ "burstiness": false,
918
+ "mattr": false,
919
+ "lexicon": false
920
+ },
921
+ "cv": 0.506,
922
+ "cv_band": "high",
923
+ "mattr": 0.875,
924
+ "mattr_band": "high",
925
+ "lexicon_density": 0,
926
+ "lexicon_hits": [],
927
+ "expected_metrics": null
928
+ },
929
+ {
930
+ "fixture_id": "zh-nat-02",
931
+ "lang": "zh",
932
+ "class": "natural",
933
+ "expected_hot": false,
934
+ "predicted_hot": false,
935
+ "correct": true,
936
+ "detectors": {
937
+ "burstiness": false,
938
+ "mattr": false,
939
+ "lexicon": false
940
+ },
941
+ "cv": 0.528,
942
+ "cv_band": "high",
943
+ "mattr": 0.936,
944
+ "mattr_band": "high",
945
+ "lexicon_density": 0,
946
+ "lexicon_hits": [],
947
+ "expected_metrics": null
948
+ },
949
+ {
950
+ "fixture_id": "zh-nat-03",
951
+ "lang": "zh",
952
+ "class": "natural",
953
+ "expected_hot": false,
954
+ "predicted_hot": false,
955
+ "correct": true,
956
+ "detectors": {
957
+ "burstiness": false,
958
+ "mattr": false,
959
+ "lexicon": false
960
+ },
961
+ "cv": 0.58,
962
+ "cv_band": "high",
963
+ "mattr": 0.907,
964
+ "mattr_band": "high",
965
+ "lexicon_density": 0,
966
+ "lexicon_hits": [],
967
+ "expected_metrics": null
968
+ }
969
+ ],
970
+ "sampleSizes": {
971
+ "en": {
972
+ "ai": 6,
973
+ "natural": 5
974
+ },
975
+ "ja": {
976
+ "ai": 3,
977
+ "natural": 3
978
+ },
979
+ "ko": {
980
+ "ai": 6,
981
+ "natural": 5
982
+ },
983
+ "zh": {
984
+ "ai": 3,
985
+ "natural": 3
986
+ }
987
+ }
988
+ }