app
Prose Lint
Public Made by Adomby adom
Deterministic house-style linter for Adom copy. Flags em-dashes and the tics that make AI-written text read as AI-written (tell-words, boilerplate cadence, filler), with line:col, plain-language suggestions, --fix for safe swaps, and a --json envelope. Markdown/code-aware: never flags a --flag in a code span, a number range, or a URL.
← Commit history
Publish 0.1.4
5 files changed
+17−12
README.md+1−1@@ -37,7 +37,7 @@ Exit codes: `0` clean or soft-only, `1` hard findings (em-dashes / spaced `--`), | Severity | Rule | Example | |---|---|---|-| hard | em-dash, en-dash-in-prose, spaced `--` | `a game-changer — really` |+| hard | em-dash, en-dash-in-prose, spaced `--` (literal or as `—`/`–` entities) | `a game-changer — really` | | warn | tell-words | delve, seamless, robust, leverage, utilize, showcase, in-depth, myriad | | warn | boilerplate cadence | "it's not just X, it's Y", "in today's world", "when it comes to", "plays a pivotal role" | | info | filler | "in order to", "a variety of", empty intensifiers |
SKILL.md+1−1@@ -31,7 +31,7 @@ Default exit codes: `0` clean or soft-only, `1` hard findings (em-dashes / space <!-- prose-lint-disable (this list names the banned words on purpose) --> -- **Hard (error):** em-dashes, en-dashes in prose, and spaced double-hyphens.+- **Hard (error):** em-dashes, en-dashes in prose, and spaced double-hyphens. Entity forms (`—`, `–`, `—`, `—`) count: what the reader sees rendered is what gets linted. - **Tells (warn):** AI-favorite words (delve, seamless, robust, leverage, utilize, showcase, in-depth, cutting-edge, myriad, ...) and boilerplate cadence ("it's not just X, it's Y", "in today's ... world", "when it comes to", "whether
bin/prose-lint+10−5@@ -119,8 +119,12 @@ const RULES = [ { id: 'em-dash', severity: 'error',- re: /—/g,- msg: () => 'Em-dash (—) in prose — replace with a comma, colon, period, or parentheses',+ // The literal, the horizontal bar (U+2015, renders the same), and the HTML entity+ // forms of both. Hand-written readme.html pages write dashes as entities as a matter+ // of course, and an entity is what the reader sees rendered (adom/prose-lint#1).+ // Matching the entity in the source keeps line:col pointing at the thing to edit.+ re: /[—―]|&(?:mdash|horbar|#8212|#8213|#x201[45]);/gi,+ msg: (m) => `Em-dash (${m[0]}) in prose — replace with a comma, colon, period, or parentheses`, }, { id: 'ascii-em-dash',@@ -131,9 +135,10 @@ const RULES = [ { id: 'en-dash', severity: 'warn',- // en-dash NOT between digits (a real number range like 2–5 is fine)- re: /(?<!\d)–(?!\d)|(?<=\s)–(?=\s)/g,- msg: () => 'En-dash (–) in prose — use a hyphen for compounds or rewrite',+ // en-dash NOT between digits (a real number range like 2–5 or 2–5 is fine);+ // entity forms get the same exemption.+ re: /(?<!\d)(?:–|&(?:ndash|#8211|#x2013);)(?!\d)|(?<=\s)(?:–|&(?:ndash|#8211|#x2013);)(?=\s)/gi,+ msg: (m) => `En-dash (${m[0]}) in prose — use a hyphen for compounds or rewrite`, }, tellWordRule(), // --- warn: AI cadence / boilerplate structures ---
package.json+3−3@@ -2,7 +2,7 @@ "slug": "prose-lint", "title": "Prose Lint", "type": "app",- "version": "0.1.3",+ "version": "0.1.4", "description": "Deterministic house-style linter for Adom copy. Flags em-dashes and the tics that make AI-written text read as AI-written (tell-words, boilerplate cadence, filler), with line:col, plain-language suggestions, --fix for safe swaps, and a --json envelope. Markdown/code-aware: never flags a --flag in a code span, a number range, or a URL.", "tags": [ "cli",@@ -19,7 +19,7 @@ "make this read less AI", "prose lint" ],- "discovery_pitch": "Reach for prose-lint before shipping any user-facing copy — READMEs, wiki pages, release notes, UI strings — to catch em-dashes and AI-tells deterministically.",+ "discovery_pitch": "Reach for prose-lint before shipping any user-facing copy \u2014 READMEs, wiki pages, release notes, UI strings \u2014 to catch em-dashes and AI-tells deterministically.", "sample_prompts": [ { "label": "Lint a wiki page",@@ -51,5 +51,5 @@ "subhead": "No em-dashes. No AI slop. Deterministic.", "screenshot": "docs/hero.png" },- "changelog": "0.1.3: restore clean README (0.1.2 was a publish-advisory test)."+ "changelog": "0.1.4: em/en-dash rules also match the HTML entity forms (— – ― and the numeric/hex codes) and the U+2015 horizontal bar, with line:col on the entity in the source; a hand-written readme.html no longer passes clean while rendering dashes (adom/prose-lint#1). 0.1.3: restore clean README (0.1.2 was a publish-advisory test)." }
page.json+2−2@@ -2,7 +2,7 @@ "slug": "prose-lint", "title": "Prose Lint", "type": "app",- "version": "0.1.3",+ "version": "0.1.4", "description": "Deterministic house-style linter for Adom copy. Flags em-dashes and the tics that make AI-written text read as AI-written (tell-words, boilerplate cadence, filler), with line:col, plain-language suggestions, --fix for safe swaps, and a --json envelope. Markdown/code-aware: never flags a --flag in a code span, a number range, or a URL.", "tags": [ "cli",@@ -58,5 +58,5 @@ "name": "Ray", "email": "[email protected]" },- "changelog": "0.1.3: restore clean README (0.1.2 was a publish-advisory test)."+ "changelog": "0.1.4: em/en-dash rules also match the HTML entity forms (— – ― and the numeric/hex codes) and the U+2015 horizontal bar, with line:col on the entity in the source; a hand-written readme.html no longer passes clean while rendering dashes (adom/prose-lint#1). 0.1.3: restore clean README (0.1.2 was a publish-advisory test)." }