string-audit v0.3.0 — copy-hygiene suite + data-driven AI-tells
string-audit v0.3.0 — copy-hygiene suite + data-driven AI-tells
Adds a deterministic copy-hygiene layer to the auditor — the cold-read editorial
rules, run on every symbol, free and offline — and makes severity first-class.
New prose checks (zero-API, uncached, every symbol)
- ai-isms — formulaic machine-written tells:
it isn't X — it's Yantithesis,
the easy part … the hard part, rule-of-three triads + gerund tricolons, em-dash
cadence, rhetorical teaser fragments, chatbot artifacts/placeholders, and buzzword
filler. Patterns + lexicon are data inai-tells.json(seeded from the
vale-signs-of-ai-writingcorpus), so they track upstream instead of living in code. - overclaims — absolute, unprovable language bound to a coverage term (
every privileged effect,always enforced); the prose analogue of the grounding check. - proofread — mechanical slips spell/grammar miss: doubled words, stray/missing
spaces, space-before-punctuation, repeated punctuation, mixed straight + curly quotes. - readability — over-long sentences and (for
body/meta) dense prose by Flesch
reading-ease — a proxy for "why am I reading this?".
First-class severity
Every finding now carries { level, msg } — error ✗ (correctness/honesty) ·
warn ⚠ (ai-ism/proofread) · suggestion ·. audit.mjs renders the glyph from
level (à la Vale severities). The keyed Anthropic auditor is told the same rules.
Quality
spellCheckno longer flags English contractions (isn't,we're) as misspellings.
Prior art (issue #6)
Vale + vale-signs-of-ai-writing cover AI-tell linting at scale; our lexicon is seeded
from it. spikes/ holds the data-driven port (now promoted) and an optional vale
shell-out provider. The differentiator stays: typed-symbol catalog, content-hash cache,
and grounding/overclaim checking.