aibreze 0.1.16 → 0.1.17

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/README.md CHANGED
@@ -1,55 +1,11 @@
1
- <p align="center">
2
- <img src="site/static/logo.svg" alt="aiBreze" width="128" />
3
- </p>
1
+ # aibreze
4
2
 
5
- # aiBreze
6
-
7
- An installable writing rule set for AI agents.
8
-
9
- Editorial rules for prose that says something instead of sounding like it.
10
- AI-assisted or not. Written **aiBreze**. npm **`aibreze`**. A spray, not a
11
- breeze.
12
-
13
- Spray the prose, not the author. Earn the word.
14
-
15
- **Docs:** [aibreze.com/docs](https://aibreze.com/docs) · **Site:** [aibreze.com](https://aibreze.com)
16
-
17
- ## Install
18
-
19
- ```bash
20
- pnpm add -D aibreze
21
- ```
22
-
23
- Copy `node_modules/aibreze/rules/cursor.mdc` to `.cursor/rules/aibreze.mdc`.
24
- Keep a short overlay. Full wiring: [docs](https://aibreze.com/docs/install).
25
-
26
- Or skip npm and [install the skill](https://aibreze.com/skill) as a folder.
27
-
28
- ## Not a humanizer
29
-
30
- aiBreze does not determine whether a human or a model wrote something, and it
31
- does not try to fool AI detectors. Same standard either way. If the prose
32
- smells, spray it.
33
-
34
- <!-- xfacts-nutrition-label -->
35
-
36
- ## Nutrition label
37
-
38
- - **AppFacts:** [viewer](https://appfacts.dev/v#af1.eNp1kU1rAyEQhv_KMmeTpVePDRRa0l42t1LKrE6Mjaui4xYb8t-Lu6GQQ29-PO_H6AVmkA8CPE4EEtA-JvohEMA1tgNnx4SpgoDMyCU3RrGdG-KsIp8b9fp8WAl1BnkBh94UNO3mUCMNKtnIonvBGdc1CEjFs10y34Km7VdeDKqz3oCE3TCAgFPIfNu7UPTRYWq5EdUZDX1O6NFQAgnRxwmuAjTFDPL9Ah4kfCf0xlFqijuLTlN0oU7kGa5ihQ3x0TqKiXK-CXRQpTHINvhuDVs1HwLyrP6C7sq1OrfeHXrdkTbUqTDFsozStGOxTrd3-n-QRDFkyyHVZsccs-x7Y_lUxq0KU79DRlczb55CMrTZ73c92nH5uusvQqie3Q) · [raw](https://github.com/Catalyst-Forge-LLC/aibreze/blob/main/APP_FACTS.md)
39
- - **SkillFacts:** [viewer](https://skillfacts.dev/v#sf1.eNqdU8Fu2zAM_RVDZydZdsxOQ7EBQbNTeyuGQpFom4gsCSTlIAvy76O8dtmhB2Mny09Pj-Lj09VMZrdtTbQjmJ2xeCT4BaY1HiYIKQMp-mDFhgtL8z1RXzcnIMYUdevTerveflaIxUrhKuEEp0oK6CByVf2xf9b_E0avP64QJ1rxCUNQNBfKaWZ98yiJ0IaGSgBuukRNLseAPNhjgCaT8r40nMle2sYWpesn-nfSKlvm5pzo1IV0_nP-636lILKAb86EgrGvNSlNEG10WvZqOBWqKzOIZN5tNj3KUI5rl8bNe-erufPV4fCwuVv0Vvcji26twchCRc1IkV8JrBvmYgNo2zsTU6wSEaReWAEcc0DwinWo3asUjArrQV_VJKVQZTog0HurkS8_W3Ms0Qfwr5YEOzVe_X-5mmxFa5mnx_3hsB793fok9bK39i9lNnrjEsES3mz5IsFgceQlTGC2l0XMoJPW6S2hpiKz38tkS1zGdDihW2STsx7Gj7k6M-hJu65ZEAgwgtDlngcPrBm1c2jqiHXyQxoh2_7fgL5FsCZUzxDoA6pP5_IfGdaIRmelBkqXcPsNuYxlHQ) · [raw](https://github.com/Catalyst-Forge-LLC/aibreze/blob/main/skills/aibreze/SKILL_FACTS.md)
40
-
41
-
42
- ## Development
3
+ This package was renamed to **[smellcheck](https://www.npmjs.com/package/smellcheck)**.
43
4
 
44
5
  ```bash
45
- pnpm install
46
- pnpm test
47
- pnpm site:dev
6
+ pnpm add -D smellcheck
48
7
  ```
49
8
 
50
- Site (FilePress + docs mount): `pnpm ship`. The maintainer publishes to npm.
51
- Agents must not run `npm publish`.
52
-
53
- ## License
9
+ Site and docs: [smellcheck.dev](https://smellcheck.dev)
54
10
 
55
- MIT. Copyright Catalyst Forge LLC.
11
+ Do not install this name. The rule files, skill, and pocket card now live on `smellcheck`.
package/package.json CHANGED
@@ -1,62 +1,31 @@
1
- {
2
- "name": "aibreze",
3
- "version": "0.1.16",
4
- "private": false,
5
- "type": "module",
6
- "description": "Installable writing rule set for AI agents. Sprays the performative, faux-profound register off prose. Core bans, smell audit, claims review, genre overlays.",
7
- "license": "MIT",
8
- "author": "Catalyst Forge LLC",
9
- "keywords": [
10
- "ai",
11
- "writing",
12
- "style-guide",
13
- "prose",
14
- "llm",
15
- "prompts",
16
- "copyediting",
17
- "voice"
18
- ],
19
- "homepage": "https://aibreze.com",
20
- "repository": {
21
- "type": "git",
22
- "url": "git+https://github.com/Catalyst-Forge-LLC/aibreze.git"
23
- },
24
- "bugs": {
25
- "url": "https://github.com/Catalyst-Forge-LLC/aibreze/issues"
26
- },
27
- "exports": {
28
- ".": {
29
- "types": "./dist/index.d.ts",
30
- "default": "./dist/index.js"
31
- },
32
- "./rules/*": "./rules/*",
33
- "./skills/*": "./skills/*",
34
- "./package.json": "./package.json"
35
- },
36
- "files": [
37
- "dist/index.js",
38
- "dist/index.d.ts",
39
- "rules",
40
- "skills",
41
- "README.md",
42
- "LICENSE"
43
- ],
44
- "scripts": {
45
- "build": "tsc",
46
- "test": "tsc && node --test dist/index.test.js dist/publish-gate.test.js",
47
- "prepare": "tsc",
48
- "prepublishOnly": "tsc && node dist/publish-gate.js && pnpm test",
49
- "ship": "pnpm --dir site run ship",
50
- "site:dev": "pnpm --dir site dev",
51
- "site:build": "pnpm --dir site run build",
52
- "site:deploy": "pnpm --dir site run ship"
53
- },
54
- "engines": {
55
- "node": ">=20"
56
- },
57
- "packageManager": "pnpm@10.30.1",
58
- "devDependencies": {
59
- "@types/node": "^24.3.0",
60
- "typescript": "^5.9.2"
61
- }
62
- }
1
+ {
2
+ "name": "aibreze",
3
+ "version": "0.1.17",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "Renamed to smellcheck. pnpm add -D smellcheck",
7
+ "license": "MIT",
8
+ "author": "Catalyst Forge LLC",
9
+ "homepage": "https://www.npmjs.com/package/smellcheck",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/Catalyst-Forge-LLC/smellcheck.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/Catalyst-Forge-LLC/smellcheck/issues"
16
+ },
17
+ "files": [
18
+ "LICENSE",
19
+ "README.md"
20
+ ],
21
+ "keywords": [
22
+ "smellcheck",
23
+ "deprecated"
24
+ ],
25
+ "engines": {
26
+ "node": ">=20"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ }
31
+ }
package/dist/index.d.ts DELETED
@@ -1,26 +0,0 @@
1
- declare const packageRoot: string;
2
- declare const rulesDir: string;
3
- export declare const ruleIds: readonly ["core", "audit", "claims", "essays", "landing", "outreach", "launch", "civic", "academic"];
4
- export type RuleId = (typeof ruleIds)[number];
5
- export declare const files: {
6
- readonly core: string;
7
- readonly audit: string;
8
- readonly claims: string;
9
- readonly essays: string;
10
- readonly landing: string;
11
- readonly outreach: string;
12
- readonly launch: string;
13
- readonly civic: string;
14
- readonly academic: string;
15
- readonly cursor: string;
16
- };
17
- export type FileId = keyof typeof files;
18
- export declare const catalog: ReadonlyArray<{
19
- id: FileId;
20
- title: string;
21
- use: string;
22
- }>;
23
- export declare function rulePath(id: FileId): string;
24
- export declare function readRule(id: FileId): string;
25
- export declare function assertRulesPresent(): string[];
26
- export { packageRoot, rulesDir };
package/dist/index.js DELETED
@@ -1,95 +0,0 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
5
- const rulesDir = join(packageRoot, "rules");
6
- export const ruleIds = [
7
- "core",
8
- "audit",
9
- "claims",
10
- "essays",
11
- "landing",
12
- "outreach",
13
- "launch",
14
- "civic",
15
- "academic",
16
- ];
17
- export const files = {
18
- core: join(rulesDir, "core.md"),
19
- audit: join(rulesDir, "audit.md"),
20
- claims: join(rulesDir, "claims.md"),
21
- essays: join(rulesDir, "essays.md"),
22
- landing: join(rulesDir, "landing.md"),
23
- outreach: join(rulesDir, "outreach.md"),
24
- launch: join(rulesDir, "launch.md"),
25
- civic: join(rulesDir, "civic.md"),
26
- academic: join(rulesDir, "academic.md"),
27
- cursor: join(rulesDir, "cursor.mdc"),
28
- };
29
- export const catalog = [
30
- {
31
- id: "core",
32
- title: "Core",
33
- use: "Always. Target register, applicability heuristic, teaching antithesis, hard bans, cadence budgets, chat vs publish.",
34
- },
35
- {
36
- id: "audit",
37
- title: "Smell audit",
38
- use: "Paste-in smell audit. Additive to core: extras, vocab hunt list, score and top-five.",
39
- },
40
- {
41
- id: "claims",
42
- title: "Claims + voice",
43
- use: "Skeptical peer review. Substance first so you do not cologne a lie, then aiBreze.",
44
- },
45
- {
46
- id: "essays",
47
- title: "Essays / longform",
48
- use: "Essays and talks: one register, author in the essay, concrete instance. Not for reference docs.",
49
- },
50
- {
51
- id: "landing",
52
- title: "Landing / marketing",
53
- use: "Page copy: pronoun decision, rhetorical budgets, substance gaps, read-aloud gate.",
54
- },
55
- {
56
- id: "outreach",
57
- title: "Personal outreach",
58
- use: "Email, DM, and text. Relationship first, one ask, links as context.",
59
- },
60
- {
61
- id: "launch",
62
- title: "Launch / announcement",
63
- use: "Shipping posts. Open on a specific moment or the artifact, not the announcement formula.",
64
- },
65
- {
66
- id: "civic",
67
- title: "Civic / institutional",
68
- use: "Filings, testimony, legal-adjacent memos. Ceremony is earned; colleague voice is wrong here.",
69
- },
70
- {
71
- id: "academic",
72
- title: "Academic / scholarly",
73
- use: "Papers and methods. Precision and citations, not the academic costume.",
74
- },
75
- {
76
- id: "cursor",
77
- title: "Cursor pocket card",
78
- use: "Always-on agent digest. Copy to `.cursor/rules/` and point at core plus a project overlay.",
79
- },
80
- ];
81
- export function rulePath(id) {
82
- return files[id];
83
- }
84
- export function readRule(id) {
85
- return readFileSync(files[id], "utf8");
86
- }
87
- export function assertRulesPresent() {
88
- const missing = [];
89
- for (const id of Object.keys(files)) {
90
- if (!existsSync(files[id]))
91
- missing.push(files[id]);
92
- }
93
- return missing;
94
- }
95
- export { packageRoot, rulesDir };
package/rules/academic.md DELETED
@@ -1,114 +0,0 @@
1
- # Academic / scholarly
2
-
3
- Apply [`core.md`](./core.md) first. This file is the genre overlay for
4
- journal articles, working papers, methods sections, literature reviews,
5
- and dissertation chapters that are papers.
6
-
7
- It is not the file for essays or talks ([`essays.md`](./essays.md)),
8
- filings ([`civic.md`](./civic.md)), or product pages. Reference docs
9
- and textbooks that are really manuals still get core only.
10
-
11
- The colleague voice is close. Precision and citations are the shift.
12
- Do not put on the academic costume.
13
-
14
- ---
15
-
16
- ## Register
17
-
18
- Write for a peer who already knows the field. Say what you did, what
19
- you found, and where the claim stops. Full forms more often than the
20
- default. Contractions are rare, not banned. One is not a finding.
21
-
22
- First person is allowed when the field or the overlay uses it ("we
23
- measured," "I argue"). Passive is not required. Do not convert every
24
- sentence to "it was found that."
25
-
26
- Hedging is earned when it names a limit, a method bound, or a claim
27
- the data cannot support. "In this sample," "we did not observe,"
28
- "suggests" stay when they are true. "It could perhaps be argued that"
29
- is hiding.
30
-
31
- The read-aloud test is a careful colleague in the field, not a tired
32
- product person and not a quarterly from 1987.
33
-
34
- Pronouns follow the overlay or the journal. Do not invent "the authors"
35
- to sound impersonal if the venue uses we.
36
-
37
- Hard bans still hold. Insight theater does not become allowed because
38
- the bibliography is long. Earn the word: "robust," "novel," and
39
- "seminal" need a measurement, a contrast, or a cite that actually
40
- carries that weight.
41
-
42
- ---
43
-
44
- ## What earns its place
45
-
46
- - Citations, operational definitions, method, limitations
47
- - Field terms of art (applicability heuristic)
48
- - The journal's sections (IMRaD or whatever they print)
49
- - An abstract that states the finding, not a teaser
50
-
51
- Repeating a defined term is not hand-holding. Numbered hypotheses and
52
- result rows are not triad packing.
53
-
54
- ---
55
-
56
- ## The costume (do not reach for it)
57
-
58
- These are the stereotypical academic tells. Ban them as furniture.
59
- Leave a word if it is doing a real job in the sentence.
60
-
61
- - "Moreover," "Thus," "Furthermore," "Indeed" opening clause after
62
- clause
63
- - "This paper seeks to" / "this study aims to" / "the present work"
64
- - "It has been shown that" with no cite, or with a cite that does not
65
- show it
66
- - "The extant literature," "a growing body of work," "little attention
67
- has been paid"
68
- - "It is worth noting that" / "it is important to note"
69
- - Nominalization stacks ("the utilization of the implementation")
70
- - Forced passive when the actor is known and the field allows we
71
- - A literature review that only announces a gap
72
- - A last sentence that winks or mic-drops
73
-
74
- Do not inject an essay scene to "humanize" the paper. A worked example
75
- or a named dataset is an instance, not a memoir. Do not apply essay
76
- law here.
77
-
78
- Do not apply civic captions or landing pain lists.
79
-
80
- ---
81
-
82
- ## Claims
83
-
84
- This genre lives on citations. Run [`claims.md`](./claims.md) when the
85
- paper asserts effects, magnitudes, or what prior work showed.
86
-
87
- A clean-smelling wrong paper is still wrong. Do not cologne a missing
88
- cite or an overclaim in the abstract.
89
-
90
- ---
91
-
92
- ## Audit extras for this genre
93
-
94
- On top of `core.md` and `audit.md`:
95
-
96
- - Costume density (Moreover / Thus / seeks to / extant literature)
97
- - Hedging that hides a claim instead of naming a limit
98
- - Forced impersonal voice against the overlay or the venue
99
- - Abstract that teases and never states the finding
100
- - Essay anecdote or landing structure
101
- - A claim that needs a cite and has none
102
-
103
- ---
104
-
105
- ## Acceptance criteria
106
-
107
- 1. Overlay or venue named the speaker (we, I, or the paper's convention).
108
- 2. Abstract states the finding.
109
- 3. Hedging names a limit or is cut.
110
- 4. No costume furniture in the open or the close.
111
- 5. Claims that need cites have them, or `claims.md` already flagged
112
- the gaps.
113
- 6. No essay scene. No civic caption. No landing pain list.
114
- 7. Hard bans still hold.
package/rules/audit.md DELETED
@@ -1,212 +0,0 @@
1
- # AI smell audit prompt
2
-
3
- Reusable prompt for auditing any copy (landing pages, emails, blog posts,
4
- social posts, docs, filings) for signs it was AI-generated or AI-flavored.
5
-
6
- **This prompt is additive.** Paste into a model, in order:
7
-
8
- 1. [`core.md`](./core.md) (required) and the project's overlay
9
- 2. Everything below the divider in this file
10
- 3. The copy to audit
11
-
12
- Do not treat the lists below as the house law. Hunt core's hard bans,
13
- cadence budgets, and applicability heuristic from `core.md`, then the
14
- extras here.
15
-
16
- **When substance is in question** (overclaim, thin evidence, bad
17
- attribution), use [`claims.md`](./claims.md) instead of or before a
18
- smell-only pass.
19
-
20
- ---
21
-
22
- You are an expert copy editor with a specialty in detecting "AI smell":
23
- the patterns, tics, and vocabulary that make writing feel
24
- machine-generated, generic, or untrustworthy. Audit the copy I provide
25
- below. You have `core.md` (and any overlay) in this context. Apply them.
26
-
27
- If `core.md` is not in this context, stop and say so. Do not run a smell
28
- pass that skips the house bans.
29
-
30
- ## Your task
31
-
32
- 1. **Score the copy 1-10 for AI smell** (1 = unmistakably human, 10 =
33
- obviously generated), with a one-paragraph justification. A human
34
- draft with two marketing words is not a 7. Score the pattern, not
35
- the word count.
36
- 2. **Flag tells that change how the piece reads**, plus every hard ban
37
- and cadence tell in `core.md` that actually fires. Quote the
38
- offending text, name the tell, explain briefly. Do not dump every
39
- vocab-list hit. Apply the applicability heuristic first. A single
40
- "robust" that names a real property is not a finding.
41
- 3. **Suggest a rewrite** for flagged items that are worth changing.
42
- Preserve meaning. Sound like a sharp, specific human.
43
- 4. **Identify what's working.** Quote the most human, distinctive lines so
44
- they get protected in any rewrite.
45
- 5. **End with a prioritized fix list**: the 5 changes that would most
46
- reduce the AI smell, in order of impact. The top 5 is the
47
- deliverable. The flag list is evidence, not a to-do of 40 rewrites.
48
-
49
- ## The tells to hunt
50
-
51
- ### From core.md (do not re-list)
52
-
53
- Hunt every hard ban and cadence tell in `core.md`: escalation formula,
54
- honest framing (including Look / Let's be clear / Here's the thing),
55
- validation+profundity, mechanism inflation, narrative
56
- theater, genuinely-stacks, dramatic apology, suspense, cataphoric
57
- teasers, setup sentences, em-dash furniture, triad packing including
58
- prefix-repetition and Not X. Not Y. But Z., empty marketing
59
- vocab, helper theater, signpost openers, mic-drop closers, intensifier
60
- filler, parallel-zinger density, bold-lead lists, riddle labels, cozy
61
- machinery, operator notes in the brochure, hand-holding the obvious,
62
- unparseable sentences, participial afterthoughts, topic-sentence
63
- pinning. Apply the
64
- corpus-applicability heuristic before rewriting overlay terms. Teaching
65
- antithesis is allowed only when categories differ, never as
66
- synonym-escalation. One concrete landing chant is a named exception,
67
- not a free pass for every triad.
68
-
69
- ### Rhetorical extras (cluster here; not a second copy of core)
70
-
71
- - **"Not X, but Y" antithesis (broader than escalation).** One careful
72
- teaching contrast per piece can be spice. More than two is a pattern,
73
- and patterns smell generated.
74
- - **Triadic chants.** "No fluff. No jargon. No BS." / "Faster. Smarter.
75
- Better." Groups of three parallel fragments, especially negations.
76
- Budget: one per piece, max, and only if core's protected-maxim
77
- exception or a genre overlay (landing: one concrete chant) permits it.
78
- - **Symmetrical parallel constructions.** "We speak your language and the
79
- machine's." Clever-sounding mirror phrases that a million landing pages
80
- already used.
81
- - **The rule of three in lists everywhere.** When every sentence
82
- enumerates exactly three items, a model wrote it.
83
- - **Rhetorical questions as transitions.** "So what does this mean for
84
- you?" / "The result?" / "The best part?"
85
- - **The hedge-flourish.** Winking qualifiers like "(yet)" or "at least
86
- for now" that perform humility instead of having it.
87
- - **False concessions.** "To be fair…", "It's not all bad…", "That said,
88
- there is another side." A real limit stays. A performed even-hand
89
- before the pitch does not.
90
- - **False momentum closers.** "The future is here." / "And this is just
91
- the beginning." / "The only question is whether you'll be ready."
92
- - **Setup-payoff formula on every heading.** Colon constructions: "The
93
- problem: you're drowning in tools." Once is fine. Every heading is a
94
- template.
95
- - **Outline-first filler.** An H2 with a sentence of nothing under it,
96
- then the next H2. The outline shipped; the prose did not.
97
- - **Engagement bait.** "Agree?", "a thread 🧵", "I'm humbled to
98
- announce."
99
-
100
- ### Vocabulary tells
101
-
102
- Suspects, not automatic flags. Apply the corpus-applicability heuristic
103
- first. Flag empty marketing use and close variants. Leave terms of art,
104
- product names, and words that would get less precise if swapped for
105
- "important."
106
-
107
- - delve, dive deep, deep dive, unpack, explore (as a section-verb with
108
- no object worth exploring)
109
- - intricate, realm, tapestry (as atmosphere with no object)
110
- - unlock, unleash, harness, empower, supercharge, turbocharge
111
- - leverage (as empty marketing verb: "leverage your workflow"), utilize
112
- (instead of use), underscore (as pomp: "this underscores the need").
113
- Domain projects may carve out doctrinal "leverage"
114
- (force / fulcrum sense) in an overlay.
115
- - seamless, seamlessly, effortless, frictionless, streamline
116
- - game-changer, game-changing, revolutionary, cutting-edge, next-level
117
- - cut through the noise, separate signal from noise, rise above the noise
118
- - landscape (as in "the AI landscape"), ecosystem-as-hype, "in this
119
- space" as market-speak (not state space / design space as terms of art)
120
- - journey (as in "your AI journey"), transformation-as-hype (not
121
- org-change when that is the subject)
122
- - robust, comprehensive, holistic, tailored, bespoke: filler adjectives
123
- only, not a named requirement ("robust to partition")
124
- - "In today's fast-paced world" and any "In today's X" opener
125
- - "Whether you're a X or a Y" audience straddles
126
- - "at the end of the day," "when it comes to," "it's worth noting"
127
- - crucial, vital, essential when stacked or used as filler more than
128
- once
129
- - "real" as an intensifier used more than twice (real results, real
130
- value, real impact)
131
- - boost, take it to the next level, elevate-as-hype
132
- - "the power of" anything
133
-
134
- ### Structural extras
135
-
136
- - **Emoji as content furniture.** Checkmarks, rockets, and lightbulbs
137
- doing the work that words or design should do, especially in lists and
138
- result badges.
139
- - **Title Case On Every Heading** in body copy contexts where sentence
140
- case would be natural.
141
- - **Uniform paragraph lengths.** Every paragraph 2-3 sentences, every
142
- sentence medium-length. Human writing has variance: a one-word
143
- sentence, then a long one.
144
- - **Bro-etry / short-line stanzas.** Prose broken into one clause per
145
- line, with blank lines as drama, when the piece is not a poem. Flag
146
- the formatting, then the sentences.
147
- - **Do not flag Oxford commas** or other house punctuation as AI tells.
148
- A serial comma is a style choice. Em dashes are a density budget in
149
- `core.md`, not a mark to erase.
150
- - **Perfectly balanced sections.** Every section the same length, every
151
- card grid filled to an even number, every argument given exactly equal
152
- weight.
153
- - **The wrap-up paragraph that restates everything.** "In short, …"
154
- conclusions that add nothing.
155
- - **Markdown tables as a substitute for prose.** A table that should
156
- have been three sentences.
157
-
158
- ### Substance tells
159
-
160
- Use [`claims.md`](./claims.md) when truth or scope is the question. Here,
161
- flag only the generated-consensus shape.
162
-
163
- Do not demand a fight from a changelog, API doc, or reference page. Do
164
- not demand a dinner-table voice from UI chrome, labels, or error
165
- strings.
166
-
167
- - **Claims with no evidence.** "Proven results," "trusted by teams
168
- everywhere," with zero numbers, names, or examples anywhere.
169
- - **Fake specificity.** Concrete-sounding but unverifiable details: "a
170
- clear plan by Friday," "10x your output," deadlines and multipliers
171
- with no mechanism behind them.
172
- - **Pain lists that pitch.** Sections framed as the reader's problems
173
- where half the items are actually the vendor selling ("That's where we
174
- come in...").
175
- - **Vague benefits stated as outcomes.** "Save time and money" without
176
- saying whose time, on what, or how.
177
- - **Metaphor overextension.** A brand metaphor (forge, bridge, compass,
178
- engine) ridden through every heading. On a **page**, budget two
179
- references. A long essay whose subject *is* the metaphor may use more;
180
- riding it through every heading is still the smell.
181
- - **Interchangeability test.** Could a competitor swap in their logo and
182
- ship this copy unchanged? If yes, it says nothing. Pages and posts,
183
- not reference.
184
- - **No opinion anywhere.** On essays and thought-leadership, copy that
185
- never takes a side reads as generated consensus. Not for reference
186
- docs or release notes.
187
- - **Perfect politeness.** No edge, no specificity of voice, nothing that
188
- sounds like one particular person on one particular day. Same scope:
189
- essays and pages that should have a person. Not man pages.
190
-
191
- ### The final test
192
-
193
- For prose aimed at a human reader (pages, essays, notes, posts): read
194
- the copy aloud. Flag any sentence that a smart person would never
195
- actually say to a friend across a table. That's the sentence to rewrite.
196
-
197
- Do not apply the dinner-table test to reference docs, changelogs, or UI
198
- chrome.
199
-
200
- ## Output format
201
-
202
- 1. **Score and verdict** (one paragraph)
203
- 2. **Flagged items** (quote, tell name, why, suggested rewrite). Evidence,
204
- not a 40-item homework list.
205
- 3. **What's working** (quotes to protect)
206
- 4. **Top 5 fixes by impact**
207
-
208
- ---
209
-
210
- ## COPY TO AUDIT
211
-
212
- [paste copy here]