Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{
"name": "patina",
"source": "./",
"version": "8.7.0",
"version": "8.7.1",
"description": "Strip the AI packaging, keep the meaning. Detect and rewrite AI writing patterns across KO/EN/ZH/JA with MPS/fidelity checks. Runs the root SKILL.md as the /patina skill.",
"homepage": "https://github.com/devswha/patina",
"repository": "https://github.com/devswha/patina",
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://www.schemastore.org/claude-code-plugin-manifest.json",
"name": "patina",
"version": "8.7.0",
"version": "8.7.1",
"description": "Detect and rewrite AI writing patterns in Korean, English, Chinese, and Japanese so text reads as if a human wrote it. Meaning-preservation (MPS) verified, audit-friendly. The root SKILL.md is loaded as the /patina skill.",
"author": {
"name": "devswha",
Expand Down
2 changes: 1 addition & 1 deletion .patina.default.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: "8.7.0"
version: "8.7.1"
language: ko # Korean (default) -- auto-loads all ko-*.md patterns
# language: en -- English -- auto-loads all en-*.md patterns
# language: zh -- Chinese -- auto-loads all zh-*.md patterns
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

All notable changes to patina. Dates are release dates (YYYY-MM-DD).

## 8.7.1 — 2026-09-16

Semver rationale: patch — a backend authentication fix and release-tooling hardening; no new user-facing surface, no default or scoring change.

- **Fixes.** Bound the macOS Keychain credential presence probe with a hard timeout and fail-closed error handling so a hung `security` call can no longer stall backend detection (#847); after a publish, the release tooling polls the npm registry until the exact artifact is served, closing the publish-verification gap (#843).
- **Release/CI.** npm publication now uses Trusted Publishing (OIDC) with no stored token (#840); the real-Redis quota regression executes in every hosted `quality` run and a silent skip is a hard failure (#850); release and dataset jobs carry explicit timeouts (#853); routine dependency updates route through `dev` (#846).
- **Tests.** Credential classification tests run isolated from the host home directory (#851).
- **Benchmarks/claims.** The public rebaseline claim manifest is re-scored with the current analyzer (#855): overall accuracy 71.5% → 73.6%, FPR 16% → 11%, ko GPT-family catch 44% → 52% with the reviewed 48-miss set carried over unchanged.
- **Records.** Package-surface audit refreshed on the converged tree, conclusion KEEP (#848); maintainer rules reconciled (#849); observability computation-contract review (#854); same-host perf variance baseline, warning-first (#857); H-RHETORIC §7.B pilot recorded — exploration rule not met, §7.C stays gated, the 8.7.0 default unchanged (#856); public `-latest` reports regenerated (#844); ARCHITECTURE anchor repair (#852).

## 8.7.0 — 2026-09-15

Semver rationale: minor — adds a new backend (agy-cli) and an advisory smoothness floor, and changes the default rewrite rhetoric policy (H-RHETORIC). Existing invocations behave as before, and the previous rhetoric text can be restored with an environment flag.
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<a href="https://opensource.org/licenses/MIT"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
<a href="#quick-start"><img alt="Skill: Claude Code | Codex | Cursor | OpenCode" src="https://img.shields.io/badge/Skill-Claude%20Code%20%7C%20Codex%20%7C%20Cursor%20%7C%20OpenCode-blueviolet"></a>
<a href="https://github.com/devswha/patina"><img alt="Languages: KO | EN | ZH | JA" src="https://img.shields.io/badge/Languages-KO%20%7C%20EN%20%7C%20ZH%20%7C%20JA-green"></a>
<a href="CHANGELOG.md"><img alt="Version 8.7.0" src="https://img.shields.io/badge/version-8.7.0-blue"></a>
<a href="CHANGELOG.md"><img alt="Version 8.7.1" src="https://img.shields.io/badge/version-8.7.1-blue"></a>
</p>

<p align="center">
Expand Down Expand Up @@ -49,7 +49,7 @@ patina is a deterministic, pattern-based humanizer for Korean, English, Chinese,

## Quick Start

**Version: 8.7.0.** npm publication has resumed; the registry serves 8.7.0 for both `patina-cli` and `patina-humanizer`. See [release channels](docs/integrations/release.md).
**Version: 8.7.1.** npm publication has resumed; the registry serves 8.7.1 for both `patina-cli` and `patina-humanizer`. See [release channels](docs/integrations/release.md).

**Browser — nothing to install.** Open **[patina.vibetip.help](https://patina.vibetip.help/?lang=en&utm_source=github&utm_campaign=multilingual-20260907)** and paste text. Rewrites run server-side with the MPS/fidelity gates; API mode forwards your own key per request (never stored or logged).

Expand Down Expand Up @@ -115,7 +115,7 @@ Model evidence: [writing/scoring guide (Korean)](docs/research/model-guide-20260
Project config lives in `.patina.yaml`:

```yaml
version: "8.7.0"
version: "8.7.1"
language: ko # ko | en | zh | ja
document-type: default # genre/purpose + pattern policy
persona: # optional reusable voice; omit to preserve source
Expand Down
4 changes: 2 additions & 2 deletions README_JA.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Skill](https://img.shields.io/badge/Skill-Claude%20Code%20%7C%20Codex%20%7C%20Cursor%20%7C%20OpenCode-blueviolet)](#クイックスタート)
[![Multi-language](https://img.shields.io/badge/Languages-KO%20%7C%20EN%20%7C%20ZH%20%7C%20JA-green)](https://github.com/devswha/patina)
[![Version](https://img.shields.io/badge/version-8.7.0-blue)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/version-8.7.1-blue)](CHANGELOG.md)

> **AIっぽさだけを落として、意味はそのまま。**

Expand Down Expand Up @@ -104,7 +104,7 @@ patina --batch docs/*.md --outdir cleaned/

```yaml
# .patina.default.yaml
version: "8.7.0"
version: "8.7.1"
language: ko # ko | en | zh | ja
document-type: default # ジャンル/用途 + パターン方針
persona: # 任意。省略時は原文ボイスを保持
Expand Down
4 changes: 2 additions & 2 deletions README_KR.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Skill](https://img.shields.io/badge/Skill-Claude%20Code%20%7C%20Codex%20%7C%20Cursor%20%7C%20OpenCode-blueviolet)](#빠른-시작)
[![Multi-language](https://img.shields.io/badge/Languages-KO%20%7C%20EN%20%7C%20ZH%20%7C%20JA-green)](https://github.com/devswha/patina)
[![Version](https://img.shields.io/badge/version-8.7.0-blue)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/version-8.7.1-blue)](CHANGELOG.md)

<p align="center">
<a href="https://patina.vibetip.help/?lang=ko&amp;utm_source=github&amp;utm_campaign=multilingual-20260907"><b>브라우저에서 바로 써보기 — 설치 없음</b></a>
Expand Down Expand Up @@ -110,7 +110,7 @@ patina --batch docs/*.md --outdir cleaned/

```yaml
# .patina.default.yaml
version: "8.7.0"
version: "8.7.1"
language: ko # ko | en | zh | ja
document-type: default # 장르·용도 + 패턴 정책
persona: # 선택 사항; 생략하면 원문 보이스 보존
Expand Down
4 changes: 2 additions & 2 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Skill](https://img.shields.io/badge/Skill-Claude%20Code%20%7C%20Codex%20%7C%20Cursor%20%7C%20OpenCode-blueviolet)](#快速开始)
[![Multi-language](https://img.shields.io/badge/Languages-KO%20%7C%20EN%20%7C%20ZH%20%7C%20JA-green)](https://github.com/devswha/patina)
[![Version](https://img.shields.io/badge/version-8.7.0-blue)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/version-8.7.1-blue)](CHANGELOG.md)

<p align="center">
<strong>去掉 AI 味,保留原意。</strong>
Expand Down Expand Up @@ -106,7 +106,7 @@ patina --batch docs/*.md --outdir cleaned/

```yaml
# .patina.default.yaml
version: "8.7.0"
version: "8.7.1"
language: ko # ko | en | zh | ja
document-type: default # 体裁/用途 + 模式策略
persona: # 可选;省略时保留原文声音
Expand Down
2 changes: 1 addition & 1 deletion SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: patina
version: "8.7.0"
version: "8.7.1"
description: Detect and rewrite AI writing patterns in Korean, English, Chinese, and Japanese text so it reads as if a human wrote it. Meaning-preservation (MPS) verified.
allowed-tools:
- Read
Expand Down
2 changes: 1 addition & 1 deletion docs/integrations/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ npm publication uses Trusted Publishing (OIDC), verified end-to-end for both
## Source and web deployment

The npm publication hold ended with the 8.7.0 release: the registry serves
8.7.0 for both `patina-cli` and `patina-humanizer`. The npm package version
8.7.1 for both `patina-cli` and `patina-humanizer`. The npm package version
does not establish which version is deployed on the website; verify the
production version after each web deployment.

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "patina-cli",
"version": "8.7.0",
"version": "8.7.1",
"description": "AI text humanizer CLI — detects and removes AI writing patterns",
"type": "module",
"main": "src/cli.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/patina-humanizer/package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"name": "patina-humanizer",
"version": "8.7.0",
"version": "8.7.1",
"description": "SEO-friendly alias for patina-cli",
"type": "module",
"bin": {
"patina-humanizer": "bin/patina-humanizer.js"
},
"dependencies": {
"patina-cli": "8.7.0"
"patina-cli": "8.7.1"
},
"license": "MIT",
"repository": {
Expand Down
4 changes: 2 additions & 2 deletions playground/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ <h2 class="cta__title">Paste your own and see</h2>
</section>

<footer class="foot">
<div class="foot__brand"><img class="foot__icon" src="/assets/brand/patina-mark.svg" alt="" width="20" height="20" /> patina <span class="ver-badge">v8.7.0</span></div>
<div class="foot__brand"><img class="foot__icon" src="/assets/brand/patina-mark.svg" alt="" width="20" height="20" /> patina <span class="ver-badge">v8.7.1</span></div>
<nav class="foot__links" aria-label="Footer">
<a href="https://github.com/devswha/patina">GitHub</a>
<a href="#pricing">Pricing</a>
Expand All @@ -270,7 +270,7 @@ <h2 class="cta__title">Paste your own and see</h2>
</div>
<nav class="sidebar__history" id="history" aria-label="Conversations"></nav>
<div class="sidebar__foot">
<div class="brandmark"><img class="brandmark__icon" src="/assets/brand/patina-mark.svg" alt="" width="22" height="22" /> patina <span class="ver-badge">v8.7.0</span></div>
<div class="brandmark"><img class="brandmark__icon" src="/assets/brand/patina-mark.svg" alt="" width="22" height="22" /> patina <span class="ver-badge">v8.7.1</span></div>
<div class="sidebar__note">Same claim, numbers, voice —<br />naturally rewritten.</div>
</div>
</aside>
Expand Down
26 changes: 13 additions & 13 deletions scripts/check-retired-concepts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@ const LIFECYCLE_MARKER_PREFIX = '<!-- maintenance-lifecycle:';
const REQUIRED_LIFECYCLE_FIELDS = ['owner', 'review', 'remove-after'];
const HISTORICAL_EXPECTATIONS = new Map([
['CHANGELOG.md', new Map([
['a1aa4b471c432c2582586204d20566967533254171fbbd790a9da36a81412086', [415]],
['d82c21439e957bf40f694b896d8eadd49a433fb66af9cca49495111604b69d75', [417]],
['83f5e36d2ba73ed824cfec62e9f8fb72e569f26f3ab6c42604d1ef34f5b98e9b', [432]],
['0e80229112d7d40105c64406604dbcd0312d5ae370ec871fa3258bb787af7bd1', [438]],
['0bd7e2489f54e1e87a3efaae8e38df5c1a2878fa438c5f13775fc24b551440c7', [458]],
['aa223b28b35c246b21ff99d20281bfa980bf01820845308948311c81e98a0de9', [463]],
['12016238717b99f22a55d26b490943b50f82aef4a7ab27b6d662a1cdc5094dda', [512]],
['af36a82757b517832706c84fc3d2b7dc93915243d8ce7b6ee80d65ecfdb6f31c', [521]],
['51baf38ef6a43340c026a25e627e1544c70fc2c1dd99da3500ff2f11d8732e56', [526]],
['61ff8778bd3e54e59a01636618c1de3c7d42659eb513a6385e71e161ec944c87', [536]],
['272cba65bd46320ff28f5344fb3844c4b4ba08a95064db0009efd6bc145c2557', [584]],
['45be57ebe8b5ba976d59551aef7c201a4205c4f86c1cf7952f15d3697b48d664', [587]],
['226653d656455e6c74f4ae6216209470f05942ec9c0a275d1639a44d09bd0385', [880]],
['a1aa4b471c432c2582586204d20566967533254171fbbd790a9da36a81412086', [425]],
['d82c21439e957bf40f694b896d8eadd49a433fb66af9cca49495111604b69d75', [427]],
['83f5e36d2ba73ed824cfec62e9f8fb72e569f26f3ab6c42604d1ef34f5b98e9b', [442]],
['0e80229112d7d40105c64406604dbcd0312d5ae370ec871fa3258bb787af7bd1', [448]],
['0bd7e2489f54e1e87a3efaae8e38df5c1a2878fa438c5f13775fc24b551440c7', [468]],
['aa223b28b35c246b21ff99d20281bfa980bf01820845308948311c81e98a0de9', [473]],
['12016238717b99f22a55d26b490943b50f82aef4a7ab27b6d662a1cdc5094dda', [522]],
['af36a82757b517832706c84fc3d2b7dc93915243d8ce7b6ee80d65ecfdb6f31c', [531]],
['51baf38ef6a43340c026a25e627e1544c70fc2c1dd99da3500ff2f11d8732e56', [536]],
['61ff8778bd3e54e59a01636618c1de3c7d42659eb513a6385e71e161ec944c87', [546]],
['272cba65bd46320ff28f5344fb3844c4b4ba08a95064db0009efd6bc145c2557', [594]],
['45be57ebe8b5ba976d59551aef7c201a4205c4f86c1cf7952f15d3697b48d664', [597]],
['226653d656455e6c74f4ae6216209470f05942ec9c0a275d1639a44d09bd0385', [890]],
])],
]);

Expand Down