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.
- package/.patina.default.yaml +29 -29
- package/CHANGELOG.md +53 -0
- package/NOTICE +21 -0
- package/README.md +117 -224
- package/README_JA.md +134 -77
- package/README_KR.md +132 -74
- package/README_ZH.md +137 -80
- package/SKILL.md +11 -20
- package/artifacts/rebaseline-2025/README.md +147 -0
- package/artifacts/rebaseline-2025/human-controls.public.jsonl +250 -0
- package/artifacts/rebaseline-2025/intake.example.jsonl +2 -0
- package/artifacts/rebaseline-2025/intake.local.example.jsonl +25 -0
- package/artifacts/rebaseline-2025/prompts.template.jsonl +7 -0
- package/artifacts/rebaseline-2025/sources.ko-public.jsonl +39 -0
- package/assets/brand/patina-badge.svg +18 -0
- package/assets/brand/patina-mark.svg +8 -0
- package/assets/demo/README.md +79 -0
- package/core/scoring.md +12 -12
- package/core/standalone-prompt.md +3 -1
- package/core/stylometry.md +93 -22
- package/docs/API.md +1554 -0
- package/docs/AUTHENTICATION.md +50 -26
- package/docs/AUTHENTICATION_KR.md +54 -29
- package/docs/BRANDING.md +9 -8
- package/docs/CLI.md +55 -14
- package/docs/COOKBOOK.md +8 -21
- package/docs/DEMO.md +32 -5
- package/docs/EXIT-CODES.md +2 -3
- package/docs/FALSE-POSITIVES.md +63 -0
- package/docs/FAQ.md +9 -1
- package/docs/FAQ_KR.md +3 -1
- package/docs/FLAG-PARITY.md +33 -47
- package/docs/ISSUE-WAVES.md +57 -0
- package/docs/PATTERNS-EN.md +67 -3
- package/docs/PATTERNS-JA.md +68 -2
- package/docs/PATTERNS-KO.md +70 -7
- package/docs/PATTERNS-ZH.md +67 -3
- package/docs/PATTERNS.md +5 -5
- package/docs/RESEARCH-DOCS-PLATFORM.md +54 -0
- package/docs/ROADMAP.md +46 -66
- package/docs/TRANSLATIONESE-KO.md +51 -0
- package/docs/audits/2026-05-deep-research.md +3 -1
- package/docs/benchmarks/README.md +51 -0
- package/docs/benchmarks/detector-comparison.json +69 -9
- package/docs/benchmarks/detector-comparison.md +10 -5
- package/docs/benchmarks/katfish-ko-latest.json +657 -0
- package/docs/benchmarks/katfish-ko-latest.md +77 -0
- package/docs/benchmarks/latest.json +1183 -108
- package/docs/benchmarks/latest.md +84 -60
- package/docs/benchmarks/lexicon-freshness-en-2026-05-22.json +1121 -0
- package/docs/benchmarks/lexicon-freshness-en-2026-05-22.md +136 -0
- package/docs/benchmarks/rebaseline-latest.json +381 -0
- package/docs/benchmarks/rebaseline-latest.md +121 -0
- package/docs/benchmarks/register-stratified-latest.json +164 -0
- package/docs/benchmarks/register-stratified-latest.md +99 -0
- package/docs/benchmarks/register-stratified.md +43 -0
- package/docs/integrations/github-action.md +44 -11
- package/docs/integrations/playground.md +58 -0
- package/docs/integrations/pre-commit.md +5 -5
- package/docs/integrations/release.md +5 -3
- package/docs/integrations/static-sites.md +83 -0
- package/docs/research/2025-rebaseline-plan.md +71 -2
- package/docs/research/2026-rebaseline.md +102 -0
- package/docs/research/adversarial-mps.md +41 -0
- package/docs/research/ai-human-metrics.md +35 -23
- package/docs/research/human-eval-panel.md +42 -0
- package/docs/research/judge-agreement.md +24 -0
- package/docs/research/ko-2025-corpus-sources.md +135 -0
- package/docs/research/lexicon-freshness-audit.md +64 -0
- package/docs/research/zh-ja-lexicon-calibration.md +60 -0
- package/docs/social/patina-launch-copy.md +173 -100
- package/docs/social/patina-launch-execution.md +94 -0
- package/docs/social/patina-launch-korean-first.md +83 -0
- package/docs/social/signs-of-ai-writing.md +26 -0
- package/docs/social/signs-of-ai-writing_KR.md +26 -0
- package/lexicon/ai-en.md +21 -24
- package/lexicon/ai-ja.md +158 -0
- package/lexicon/ai-ko.md +9 -9
- package/lexicon/ai-zh.md +158 -0
- package/lexicon/provenance/ai-en.json +970 -0
- package/lexicon/provenance/ai-ja.json +542 -0
- package/lexicon/provenance/ai-ko.json +866 -0
- package/lexicon/provenance/ai-zh.json +542 -0
- package/package.json +49 -8
- package/patterns/en-communication.md +5 -0
- package/patterns/en-content.md +5 -0
- package/patterns/en-filler.md +5 -0
- package/patterns/en-language.md +29 -1
- package/patterns/en-structure.md +5 -0
- package/patterns/en-style.md +5 -0
- package/patterns/en-viral-hook.md +42 -2
- package/patterns/ja-communication.md +5 -0
- package/patterns/ja-content.md +5 -0
- package/patterns/ja-filler.md +5 -0
- package/patterns/ja-language.md +33 -1
- package/patterns/ja-structure.md +12 -0
- package/patterns/ja-style.md +5 -0
- package/patterns/ja-viral-hook.md +41 -2
- package/patterns/ko-communication.md +5 -0
- package/patterns/ko-content.md +5 -0
- package/patterns/ko-filler.md +5 -0
- package/patterns/ko-language.md +33 -1
- package/patterns/ko-structure.md +25 -6
- package/patterns/ko-style.md +5 -0
- package/patterns/ko-viral-hook.md +38 -2
- package/patterns/zh-communication.md +5 -0
- package/patterns/zh-content.md +5 -0
- package/patterns/zh-filler.md +5 -0
- package/patterns/zh-language.md +37 -1
- package/patterns/zh-structure.md +12 -0
- package/patterns/zh-style.md +5 -0
- package/patterns/zh-viral-hook.md +38 -2
- package/playground/README.md +55 -0
- package/playground/analytics.js +4 -0
- package/playground/analyzer.js +883 -0
- package/playground/app.js +157 -0
- package/playground/data/lexicons.js +343 -0
- package/playground/index.html +138 -0
- package/playground/styles.css +267 -0
- package/profiles/namuwiki.md +111 -0
- package/scripts/adversarial-mps-report.mjs +201 -0
- package/scripts/badge-json.mjs +79 -0
- package/scripts/benchmark-report.mjs +56 -9
- package/scripts/check-release-metadata.mjs +0 -2
- package/scripts/detector-comparison.mjs +7 -7
- package/scripts/generate-playground-data.mjs +77 -0
- package/scripts/katfish-calibration.mjs +464 -0
- package/scripts/lexicon-freshness.mjs +485 -0
- package/scripts/lint.mjs +1 -1
- package/scripts/precommit-score.mjs +4 -3
- package/scripts/prose-score.mjs +81 -5
- package/scripts/rebaseline-intake.mjs +242 -0
- package/scripts/rebaseline-score.mjs +268 -0
- package/scripts/rebaseline-summary.mjs +773 -0
- package/scripts/rebaseline-web-collect.mjs +410 -0
- package/scripts/update-benchmark-ranges.mjs +1 -0
- package/src/api.js +69 -105
- package/src/auth.js +50 -2
- package/src/backends/claude-cli.js +19 -4
- package/src/backends/codex-cli.js +19 -3
- package/src/backends/contract.js +230 -1
- package/src/backends/gemini-cli.js +18 -5
- package/src/backends/index.js +87 -12
- package/src/backends/kimi-cli.js +161 -0
- package/src/cli.js +577 -567
- package/src/commands/doctor.js +2 -2
- package/src/config.js +29 -0
- package/src/errors.js +53 -1
- package/src/features/discourse-tells.js +68 -0
- package/src/features/index.js +82 -8
- package/src/features/lexicon.js +40 -6
- package/src/features/markup-leakage.js +69 -0
- package/src/features/segment.js +41 -0
- package/src/features/signal-strength.js +81 -0
- package/src/features/stylometry.js +231 -1
- package/src/features/translationese.js +127 -0
- package/src/loader.js +76 -0
- package/src/logger.js +22 -23
- package/src/model-defaults.js +55 -0
- package/src/ouroboros.js +31 -0
- package/src/output.js +102 -90
- package/src/prompt-builder.js +103 -68
- package/src/providers.js +51 -4
- package/src/scoring.js +210 -2
- package/src/security.js +75 -0
- package/tests/fixtures/live-quality/en/public-docs-01.md +26 -0
- package/tests/fixtures/live-quality/ko/public-docs-01.md +26 -0
- package/tests/fixtures/suspect-zones/expected-ranges.json +207 -16
- package/tests/fixtures/suspect-zones/ja/ai/ja-ai-04-lexicon.md +11 -0
- package/tests/fixtures/suspect-zones/ja/natural/ja-nat-04-lexicon-cold.md +11 -0
- package/tests/fixtures/suspect-zones/ko/ai/ko-ai-02.md +4 -5
- package/tests/fixtures/suspect-zones/ko/ai/ko-ai-07-ko-diagnostic.md +11 -0
- package/tests/fixtures/suspect-zones/zh/ai/zh-ai-04-lexicon.md +11 -0
- package/tests/fixtures/suspect-zones/zh/natural/zh-nat-04-lexicon-cold.md +11 -0
- package/tests/quality/README.md +188 -11
- package/tests/quality/adversarial-mps/fixtures.jsonl +10 -0
- package/tests/quality/benchmark.mjs +39 -1
- package/tests/quality/dogfood.mjs +5 -3
- package/tests/quality/live-fixtures.jsonl +2 -0
- package/tests/quality/live-quality.mjs +596 -0
- package/tests/quality/ranking-metrics.mjs +136 -0
- package/tests/quality/rebaseline-manifest.example.jsonl +5 -0
- package/vercel.json +53 -0
- package/SKILL-MAX.md +0 -455
- package/docs/internal/HARNESS.md +0 -14
- package/docs/internal/README.md +0 -14
- package/docs/internal/WARP.md +0 -23
- package/patina-max/SKILL.md +0 -523
- package/patina-max/composite.py +0 -457
- package/src/cache.js +0 -106
- package/src/commands/init.js +0 -208
- package/src/manifest.js +0 -162
- package/src/max-mode.js +0 -207
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# KatFish Korean Calibration
|
|
2
|
+
|
|
3
|
+
| field | value |
|
|
4
|
+
|---|---:|
|
|
5
|
+
| Generated at | 2026-05-21T16:25:42.849Z |
|
|
6
|
+
| KatFish input | `artifacts/rebaseline-2025/private/katfish` |
|
|
7
|
+
| Human-control input | `artifacts/rebaseline-2025/private/web-human-controls.generated.private.jsonl` |
|
|
8
|
+
| KatFish rows | 2094 |
|
|
9
|
+
| Public-web human-control rows | 250 |
|
|
10
|
+
| Raw text committed | 0 |
|
|
11
|
+
|
|
12
|
+
This report is aggregate-only. KatFish rows and public-web extracts stay in ignored private files because the external dataset and source pages have not been relicensed into this repository.
|
|
13
|
+
|
|
14
|
+
## Headline
|
|
15
|
+
|
|
16
|
+
| metric | value |
|
|
17
|
+
|---|---:|
|
|
18
|
+
| KatFish catch rate, Patina without KO diagnostics | 58.9% |
|
|
19
|
+
| KatFish catch rate, Patina current | 74.8% |
|
|
20
|
+
| Delta | +15.9 pp |
|
|
21
|
+
| Public-web human-control FP delta | +0.0 pp (0 rows) |
|
|
22
|
+
|
|
23
|
+
## KatFish metrics
|
|
24
|
+
|
|
25
|
+
| mode | n | accuracy | precision | recall / catch | F1 | FP rate | TP/FP/FN/TN |
|
|
26
|
+
|---|---:|---:|---:|---:|---:|---:|---:|
|
|
27
|
+
| burstiness_mattr_only | 2094 | 58.3% | 87.5% | 53.9% | 0.667 | 26.6% | 875/125/749/345 |
|
|
28
|
+
| patina_without_ko_diagnostics | 2094 | 61.6% | 87.5% | 58.9% | 0.704 | 29.1% | 957/137/667/333 |
|
|
29
|
+
| patina_current | 2094 | 69.8% | 84.4% | 74.8% | 0.793 | 47.7% | 1215/224/409/246 |
|
|
30
|
+
|
|
31
|
+
## Public-web Korean human controls
|
|
32
|
+
|
|
33
|
+
| mode | n | accuracy | precision | recall / catch | F1 | FP rate | TP/FP/FN/TN |
|
|
34
|
+
|---|---:|---:|---:|---:|---:|---:|---:|
|
|
35
|
+
| burstiness_mattr_only | 250 | 87.2% | 0.0% | 0.0% | 0.000 | 12.8% | 0/32/0/218 |
|
|
36
|
+
| patina_without_ko_diagnostics | 250 | 83.2% | 0.0% | 0.0% | 0.000 | 16.8% | 0/42/0/208 |
|
|
37
|
+
| patina_current | 250 | 83.2% | 0.0% | 0.0% | 0.000 | 16.8% | 0/42/0/208 |
|
|
38
|
+
|
|
39
|
+
## KatFish by genre
|
|
40
|
+
|
|
41
|
+
| genre | mode | n | recall / catch | FP rate | TP/FP/FN/TN |
|
|
42
|
+
|---|---|---:|---:|---:|---:|
|
|
43
|
+
| abstract | burstiness_mattr_only | 378 | 61.5% | 53.0% | 171/53/107/47 |
|
|
44
|
+
| abstract | patina_without_ko_diagnostics | 378 | 66.5% | 58.0% | 185/58/93/42 |
|
|
45
|
+
| abstract | patina_current | 378 | 71.6% | 67.0% | 199/67/79/33 |
|
|
46
|
+
| essay | burstiness_mattr_only | 771 | 35.6% | 8.8% | 210/16/380/165 |
|
|
47
|
+
| essay | patina_without_ko_diagnostics | 771 | 47.1% | 12.7% | 278/23/312/158 |
|
|
48
|
+
| essay | patina_current | 771 | 80.3% | 45.3% | 474/82/116/99 |
|
|
49
|
+
| poetry | burstiness_mattr_only | 945 | 65.3% | 29.6% | 494/56/262/133 |
|
|
50
|
+
| poetry | patina_without_ko_diagnostics | 945 | 65.3% | 29.6% | 494/56/262/133 |
|
|
51
|
+
| poetry | patina_current | 945 | 71.7% | 39.7% | 542/75/214/114 |
|
|
52
|
+
|
|
53
|
+
## Public-web controls by register
|
|
54
|
+
|
|
55
|
+
| register | mode | n | recall / catch | FP rate | TP/FP/FN/TN |
|
|
56
|
+
|---|---|---:|---:|---:|---:|
|
|
57
|
+
| academic-summary | burstiness_mattr_only | 50 | 0.0% | 4.0% | 0/2/0/48 |
|
|
58
|
+
| academic-summary | patina_without_ko_diagnostics | 50 | 0.0% | 14.0% | 0/7/0/43 |
|
|
59
|
+
| academic-summary | patina_current | 50 | 0.0% | 14.0% | 0/7/0/43 |
|
|
60
|
+
| blog | burstiness_mattr_only | 50 | 0.0% | 20.0% | 0/10/0/40 |
|
|
61
|
+
| blog | patina_without_ko_diagnostics | 50 | 0.0% | 20.0% | 0/10/0/40 |
|
|
62
|
+
| blog | patina_current | 50 | 0.0% | 20.0% | 0/10/0/40 |
|
|
63
|
+
| chat-update | burstiness_mattr_only | 50 | 0.0% | 0.0% | 0/0/0/50 |
|
|
64
|
+
| chat-update | patina_without_ko_diagnostics | 50 | 0.0% | 4.0% | 0/2/0/48 |
|
|
65
|
+
| chat-update | patina_current | 50 | 0.0% | 4.0% | 0/2/0/48 |
|
|
66
|
+
| product-doc | burstiness_mattr_only | 50 | 0.0% | 12.0% | 0/6/0/44 |
|
|
67
|
+
| product-doc | patina_without_ko_diagnostics | 50 | 0.0% | 12.0% | 0/6/0/44 |
|
|
68
|
+
| product-doc | patina_current | 50 | 0.0% | 12.0% | 0/6/0/44 |
|
|
69
|
+
| technical-how-to | burstiness_mattr_only | 50 | 0.0% | 28.0% | 0/14/0/36 |
|
|
70
|
+
| technical-how-to | patina_without_ko_diagnostics | 50 | 0.0% | 34.0% | 0/17/0/33 |
|
|
71
|
+
| technical-how-to | patina_current | 50 | 0.0% | 34.0% | 0/17/0/33 |
|
|
72
|
+
|
|
73
|
+
## Interpretation
|
|
74
|
+
|
|
75
|
+
- The KO diagnostics layer is evaluated against `patina_without_ko_diagnostics`, so the delta isolates the spacing/comma/suffix proxy path from existing lexicon behavior.
|
|
76
|
+
- The human-control non-regression gate uses the 250-row hash-only public-web Korean control set from #157.
|
|
77
|
+
- KatFish human rows are reported in the KatFish table as an OOD caveat; do not turn this binary catch-rate report into an authorship or public AUROC claim.
|