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
package/docs/FAQ_KR.md ADDED
@@ -0,0 +1,65 @@
1
+ # FAQ
2
+
3
+ 용어가 낯설다면 먼저 [Glossary](GLOSSARY.md)를 보세요. MPS, fidelity, burstiness, MATTR, 모드 등 반복해서 나오는 용어를 짧게 설명합니다.
4
+
5
+ ## patina는 AI detector 우회 도구인가요?
6
+
7
+ 아닙니다. patina는 편집과 audit을 위한 도구입니다.
8
+
9
+ AI detector는 잡음이 많습니다. patina는 어떤 score도 텍스트가 사람이나 AI가 썼다는 증거로 보지 않습니다. 유용한 산출물은 audit, diff, meaning-preservation check입니다. 무엇이 바뀌었는지, 왜 바뀌었는지, 원래 주장이 살아남았는지를 보는 데 씁니다.
10
+
11
+ ## "Strip the AI packaging"은 무슨 뜻인가요?
12
+
13
+ 모델 출력에는 비슷한 겉습관이 자주 나타납니다. 부풀린 중요도, 흐릿한 균형감, 장점 나열, 기업식 추상어, 박자감이 일정한 문단, filler transition 같은 것들입니다. patina는 이런 패턴을 찾아 해당 구간을 더 담백한 문장으로 바꿉니다.
14
+
15
+ 목표는 텍스트를 속이기 좋게 만드는 것이 아닙니다. 실제 메시지는 유지하면서 일반적인 모델 말투를 걷어내는 것입니다.
16
+
17
+ ## patina는 의미를 어떻게 보존하나요?
18
+
19
+ patina는 rewrite 전에 semantic anchor를 뽑습니다. 주장, 극성, 인과, 숫자, 부정, 그 밖의 위험도가 높은 세부 정보를 추적합니다. 각 rewrite 단계 뒤에는 그 anchor가 여전히 있는지, 극성이 그대로인지 확인합니다.
20
+
21
+ rewrite가 anchor를 약화하거나 삭제하거나 뒤집으면, patina는 해당 구간을 다시 시도하거나 되돌립니다.
22
+
23
+ ## MPS가 무엇인가요?
24
+
25
+ MPS는 Meaning Preservation Score입니다. rewrite 쪽 안전 신호로, 추출한 anchor 중 얼마나 많이 편집 후에도 살아남았는지 추정합니다.
26
+
27
+ MPS가 높다고 해서 문장이 완벽하다는 뜻은 아닙니다. patina가 추적하던 주장을 rewrite가 명백히 떨어뜨리거나 뒤집지 않았다는 뜻입니다.
28
+
29
+ ## AI-likeness score는 무엇을 뜻하나요?
30
+
31
+ score는 0부터 100까지의 대략적인 편집 신호입니다. 낮을수록 AI처럼 덜 들립니다.
32
+
33
+ 이 값은 진실 판정기가 아닙니다. scoring formula는 deterministic이지만 severity assignment는 모델 실행 사이에 대략 8-10점 정도 달라질 수 있습니다. 정확한 숫자보다 범위와 하이라이트된 패턴을 더 중요하게 보세요.
34
+
35
+ ## 정확도는 어느 정도인가요?
36
+
37
+ 현재 calibration은 한국어 AI 텍스트에서 91% editing-hotspot recall [84.0-95.4%], HC3 English ChatGPT 샘플에서 76% [66.7-83.3%]를 보고합니다. 각각 n=100, binomial 95% CI입니다. 사람 글 오탐은 문체별 13-25% point-estimate range로 따로 추적합니다.
38
+
39
+ 오탐은 예상되는 일입니다. 특히 백과사전식, 기업 문서, 학술 문서, 강하게 편집된 글에서 그렇습니다. patina는 수상한 구간을 편집하는 데 쓰는 도구이지, 작성자를 비난하는 도구가 아닙니다.
40
+
41
+ 의도한 사용 입장은 [ETHICS.md](ETHICS.md)를 참고하세요.
42
+
43
+ ## API key 없이도 동작하나요?
44
+
45
+ 네. 이미 Codex CLI를 설치하고 로그인했다면 가능합니다. installer는 patina를 Codex CLI backend에 연결할 수 있으므로 이 경로에서는 별도 API key가 필요하지 않습니다.
46
+
47
+ 다른 provider는 문서화된 backend/provider 설정으로 구성할 수 있습니다.
48
+
49
+ ## Claude Code에서만 동작하나요?
50
+
51
+ 아닙니다. patina는 Claude Code, Codex CLI, Cursor, OpenCode용 skill로 동작하고, standalone Node.js CLI로도 사용할 수 있습니다.
52
+
53
+ ## 어떤 언어를 지원하나요?
54
+
55
+ 한국어, 영어, 중국어, 일본어를 지원합니다. 패턴 팩은 언어 접두사로 자동 탐색되므로 새 언어는 새 패턴 파일을 기여해 추가할 수 있습니다.
56
+
57
+ ## 내 문체나 패턴을 추가할 수 있나요?
58
+
59
+ 네. voice preference에는 custom profile을, 로컬 규칙에는 custom pattern pack을 사용하세요. repo는 built-in pattern과 사용자 custom 설정을 분리합니다.
60
+
61
+ ## 기여자는 무엇부터 시작하면 좋나요?
62
+
63
+ 가장 쉬운 기여는 근거가 있는 작은 예시입니다. before/after 쌍, 오탐 사례, 빠진 AI-writing pattern, 모델 출력에 반복해서 보이는 언어별 표현이 좋습니다.
64
+
65
+ 좋은 패턴 기여에는 실패 예시와 성공적인 rewrite가 둘 다 있어야 합니다.
@@ -0,0 +1,53 @@
1
+ # CLI / Skill Flag Parity
2
+
3
+ Basis: local checkout `2e1fc04` plus `node bin/patina.js --help`, `SKILL.md`, and `patina-max/SKILL.md` reviewed on 2026-05-20. This table separates the standalone CLI surface from the prompt-based `/patina` and `/patina-max` skill surfaces; a missing check is not always a bug when the flag is backend-, auth-, or CLI-automation-only.
4
+
5
+ | Flag / command | Standalone CLI | `/patina` (`SKILL.md`) | `/patina-max` | Notes |
6
+ |---|:---:|:---:|:---:|---|
7
+ | *(default rewrite)* | ✓ | ✓ | ✓ | CLI and `/patina` rewrite one candidate; `/patina-max` chooses the best candidate across models. |
8
+ | `--diff` | ✓ | ✓ | — | Single-candidate pattern-by-pattern diff. |
9
+ | `--audit` | ✓ | ✓ | — | Detection-only mode. |
10
+ | `--score` | ✓ | ✓ | internal | MAX scores candidates internally rather than exposing score mode. |
11
+ | `--gate <n>` | ✓ | — | — | CLI score-gate alias; automation-only. |
12
+ | `--exit-on <n>` | ✓ | — | — | Preferred CLI score-gate spelling for CI. |
13
+ | `--ouroboros` | ✓ | ✓ | documented compatible | `/patina-max` can feed its winner into the existing convergence loop when used with `/patina` behavior. |
14
+ | `--format <markdown\|text\|json>` | ✓ | — | — | CLI output-envelope feature. |
15
+ | `--json` | ✓ | — | — | CLI alias for `--format json`; `patina doctor --json` also exists. |
16
+ | `--quiet` | ✓ | — | — | CLI stderr log suppression for scripts. |
17
+ | `--json-logs` | ✓ | — | — | CLI structured stderr logs for automation. |
18
+ | `--batch` | ✓ | ✓ | — | Multi-file CLI/skill rewrite flow. |
19
+ | `--in-place` | ✓ | ✓ | — | Batch-only write mode. |
20
+ | `--suffix <ext>` | ✓ | ✓ | — | Batch-only alternate output naming. |
21
+ | `--outdir <dir>` | ✓ | ✓ | — | Batch-only output directory. |
22
+ | `--save-run <dir>` | ✓ | — | — | CLI reproducibility manifest and outputs. |
23
+ | `--no-interactive` | ✓ | — | — | CLI input safety for non-TTY automation. |
24
+ | `--lang <code>` | ✓ | ✓ | ✓ | `ko`, `en`, `zh`, `ja`. |
25
+ | `--profile <name>` | ✓ | ✓ | ✓ | Profile override. |
26
+ | `--tone <name>` | ✓ | ✓ | — | `/patina-max` inherits profile/pattern behavior but does not expose tone parsing directly. |
27
+ | `--model <id>` | ✓ | — | — | CLI single-backend model selection. |
28
+ | `--models <list>` | ✓ | — | ✓ | CLI MAX mode and `/patina-max` model fanout. |
29
+ | `--max-concurrency <n>` | ✓ | — | — | CLI HTTP MAX fanout cap; `/patina-max` uses tmux/direct dispatch instead. |
30
+ | `--api-key <key>` | ✓ | — | — | Deprecated CLI auth escape hatch; prefer env/file. |
31
+ | `--api-key-file <path>` | ✓ | — | — | CLI auth. |
32
+ | `--base-url <url>` | ✓ | — | — | CLI provider/backend config. |
33
+ | `--backend <name[,name]>` | ✓ | — | — | CLI backend selection and explicit fallback chains (`openai-http`, `codex-cli`, `claude-cli`, `gemini-cli`). |
34
+ | `--list-backends` | ✓ | — | — | CLI diagnostics. |
35
+ | `--provider <name>` | ✓ | — | — | CLI provider preset. |
36
+ | `--list-providers` | ✓ | — | — | CLI diagnostics. |
37
+ | `--config <path>` | ✓ | — | — | CLI config override. |
38
+ | `--prompt-mode <strict\|minimal\|auto>` | ✓ | ✓ | — | User-visible v3.11 prompt loading control. |
39
+ | `--variants <n>` | ✓ | ✓ | — | User-visible v3.11 rewrite variants; not supported with CLI MAX mode. |
40
+ | `--allow-insecure-base-url` | ✓ | — | — | CLI network safety override. |
41
+ | `--allow-private-base-url` | ✓ | — | — | CLI SSRF/metadata-address safety override. |
42
+ | `-h`, `--help` | ✓ | — | — | CLI help. |
43
+ | `-v`, `--version` | ✓ | — | — | CLI version. |
44
+ | `patina init` | ✓ | — | — | CLI project config writer. |
45
+ | `patina doctor` | ✓ | — | — | CLI environment diagnostic. |
46
+ | `patina auth status/login` | ✓ | — | — | CLI authentication guidance. |
47
+ | `--dispatch <omc\|direct>` | — | — | ✓ | `/patina-max` dispatch selection; not a standalone CLI flag. |
48
+
49
+ ## Audit notes
50
+
51
+ - `--prompt-mode` and `--variants` are the main user-facing omissions that must be visible in `SKILL.md` as well as the CLI.
52
+ - `--save-run`, `--max-concurrency`, auth/provider/base-url flags, and `doctor`/`auth` commands are CLI automation or transport controls; they do not map cleanly to prompt-only skills.
53
+ - `/patina-max` intentionally exposes only the flags needed for local multi-model dispatch: language/profile, model list, and dispatch mode.
@@ -0,0 +1,123 @@
1
+ # Glossary
2
+
3
+ Short definitions for recurring patina terms. Each entry links to the
4
+ deeper reference where the term is used in context.
5
+
6
+ ## AI-likeness
7
+
8
+ A 0-100 editing signal for how strongly a text matches patina's AI-writing
9
+ patterns. Lower means less AI-sounding; it is not proof of authorship. See
10
+ [the scoring overview](../core/scoring.md#ai-likeness-scoring-algorithm) and
11
+ [the FAQ](FAQ.md#what-does-the-ai-likeness-score-mean).
12
+
13
+ ## Audit mode
14
+
15
+ The mode that detects and reports AI-writing patterns without rewriting the
16
+ text. Use it when you want to inspect what patina would flag before changing
17
+ anything. See the [mode table](../README.md#modes) and [examples guide](EXAMPLES.md).
18
+
19
+ ## Burstiness
20
+
21
+ The variation in sentence length inside a paragraph, measured with coefficient
22
+ of variation. Very uniform sentence lengths are one signal that a paragraph may
23
+ need closer inspection. See [Stylometry](../core/stylometry.md#4-burstiness-metric).
24
+
25
+ ## Diff mode
26
+
27
+ The mode that shows changes pattern by pattern, making the edit auditable
28
+ instead of a black-box paraphrase. See the [mode table](../README.md#modes)
29
+ and [examples checklist](EXAMPLES.md#what-patina-is-checking).
30
+
31
+ ## Fidelity
32
+
33
+ A meaning-accuracy score comparing original text with the output. Higher is
34
+ better: it checks whether claims, facts, tone, and length stayed faithful. See
35
+ [Fidelity Scoring](../core/scoring.md#9-fidelity-scoring--overview).
36
+
37
+ ## Meaning preservation
38
+
39
+ The safety goal that rewritten text should keep the original claims, polarity,
40
+ causal links, numbers, and other high-risk details. See
41
+ [the FAQ](FAQ.md#how-does-patina-preserve-meaning) and
42
+ [MPS overview](../core/scoring.md#14-mps-meaning-preservation-score--overview).
43
+
44
+ ## MATTR
45
+
46
+ Moving Average Type-Token Ratio, a lexical-diversity metric that reduces the
47
+ length bias of simple TTR. Patina uses it as one stylometry signal, with known
48
+ language limitations. See [Stylometry](../core/stylometry.md#5-ttr-via-mattr).
49
+
50
+ ## Mode
51
+
52
+ A CLI output path such as rewrite, audit, score, diff, or ouroboros. Modes
53
+ control whether patina edits text, reports findings, scores text, or loops
54
+ until quality gates are met. See the [mode table](../README.md#modes).
55
+
56
+ ## MPS
57
+
58
+ Meaning Preservation Score. MPS checks whether extracted semantic anchors
59
+ survive the rewrite pipeline and whether polarity is preserved. See
60
+ [the FAQ](FAQ.md#what-is-mps) and
61
+ [MPS scoring](../core/scoring.md#16-mps-scoring-formula).
62
+
63
+ ## Ouroboros mode
64
+
65
+ An iterative rewrite loop that keeps trying to lower AI-likeness while obeying
66
+ meaning-preservation gates. It stops when the combined score is acceptable or
67
+ when fidelity or MPS drops too far. See
68
+ [Ouroboros Termination](../core/scoring.md#ouroboros-termination).
69
+
70
+ ## Pattern
71
+
72
+ A named AI-writing signal with a fire condition, exclusion condition, problem
73
+ description, and before/after example. Patterns are the unit patina audits and
74
+ rewrites against. See [PATTERNS.md](PATTERNS.md).
75
+
76
+ ## Pattern pack
77
+
78
+ A language and category file such as `patterns/en-style.md` or
79
+ `patterns/ko-content.md`. Packs group related patterns and provide counts used
80
+ by scoring. See [PATTERNS.md](PATTERNS.md#language-specific-patterns).
81
+
82
+ ## Profile
83
+
84
+ A voice preset that can amplify, reduce, or suppress specific patterns for a
85
+ use case such as blog, academic, technical, or legal writing. See
86
+ [profile override adjustments](../core/scoring.md#5-profile-override-adjustments).
87
+
88
+ ## Rewrite mode
89
+
90
+ The default mode that removes matched AI-writing patterns while checking that
91
+ meaning survived the edit. See the [Quick Start](../README.md#quick-start) and
92
+ [MPS integration points](../core/scoring.md#17-mps-integration-points).
93
+
94
+ ## Score mode
95
+
96
+ The mode that returns a 0-100 AI-likeness score with category breakdowns and,
97
+ when original text is available, fidelity and MPS signals. See
98
+ [Score Interpretation](../core/scoring.md#7-score-interpretation).
99
+
100
+ ## Semantic anchor
101
+
102
+ A meaning unit extracted before rewriting, such as a claim, negation, number,
103
+ causal link, quantifier, or polarity marker. Anchors are later verified by MPS.
104
+ See [MPS Anchor Verification Criteria](../core/scoring.md#15-mps-anchor-verification-criteria).
105
+
106
+ ## Suspect zone
107
+
108
+ A paragraph or sentence group marked for closer inspection by stylometry,
109
+ usually because burstiness, MATTR, or lexicon signals fired. See
110
+ [the stylometry delivery format](../core/stylometry.md#9-llm-delivery-format).
111
+
112
+ ## Tone
113
+
114
+ A named voice axis, such as casual, professional, academic, narrative,
115
+ marketing, instructional, or auto. Tone is applied on top of pattern rewriting.
116
+ See [Tones](../README.md#tones).
117
+
118
+ ## Viral hook
119
+
120
+ A score-only pattern class for SNS and marketing signals such as shock numbers,
121
+ clickbait closes, source-skipping authority claims, short-sentence stacking,
122
+ and hyperbolic engagement language. See
123
+ [Score-only viral hooks](PATTERNS.md#score-only-viral-hooks-v3110).