zero-slop 2.5.8
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/LICENSE +21 -0
- package/README.md +193 -0
- package/SKILL.md +803 -0
- package/data/corpus/community-register/README.md +14 -0
- package/data/corpus/community-register/judgment/communicative-drift.txt +1 -0
- package/data/corpus/community-register/judgment/reflexive-agreement.txt +1 -0
- package/data/corpus/community-register/judgment/rhetorical-scale-mismatch.txt +1 -0
- package/data/corpus/must-not-flag/README.md +49 -0
- package/data/corpus/must-not-flag/esl-engineer-email.txt +7 -0
- package/data/corpus/must-not-flag/exec-memo.txt +9 -0
- package/data/corpus/must-not-flag/federalist.txt +5 -0
- package/data/corpus/must-not-flag/gettysburg.txt +1 -0
- package/data/corpus/must-not-flag/grant-abstract.txt +5 -0
- package/data/corpus/must-not-flag/ml-methods.txt +1 -0
- package/data/corpus/must-not-flag/personal-essay.txt +1 -0
- package/data/corpus/must-not-flag/press-release.txt +7 -0
- package/data/corpus/must-not-flag/recipe.txt +11 -0
- package/data/corpus/must-not-flag/sre-runbook.txt +1 -0
- package/data/corpus/must-not-flag/technical-postmortem.txt +1 -0
- package/data/corpus/must-not-flag/terse-engineer-note.txt +1 -0
- package/data/corpus/must-not-flag-shape/README.md +22 -0
- package/data/corpus/must-not-flag-shape/aphorism-list.txt +9 -0
- package/data/corpus/must-not-flag-shape/changelog.txt +13 -0
- package/data/corpus/must-not-flag-shape/dialogue.txt +19 -0
- package/data/corpus/must-not-flag-shape/lyrics.txt +15 -0
- package/data/corpus/must-not-flag-shape/poem.txt +8 -0
- package/data/corpus/must-not-flag-shape/sms-transcript.txt +15 -0
- package/data/corpus/performed-register/README.md +38 -0
- package/data/corpus/performed-register/judgment/detection-fragile.txt +1 -0
- package/data/corpus/performed-register/judgment/draft-cheap-signal.txt +1 -0
- package/data/corpus/performed-register/judgment/ear-chiasmus.txt +1 -0
- package/data/corpus/performed-register/judgment/fight-against-tagline.txt +1 -0
- package/data/corpus/performed-register/judgment/fine-beat.txt +1 -0
- package/data/corpus/performed-register/judgment/glow-finishing.txt +1 -0
- package/data/corpus/performed-register/judgment/jargon-compression.txt +1 -0
- package/data/corpus/performed-register/judgment/not-perfect-honest.txt +1 -0
- package/data/corpus/performed-register/judgment/punctuation-convict.txt +1 -0
- package/data/corpus/performed-register/judgment/recipe-ingredients.txt +1 -0
- package/data/corpus/performed-register/judgment/replay-lands.txt +1 -0
- package/data/corpus/performed-register/judgment/rhymes-with.txt +1 -0
- package/data/corpus/performed-register/judgment/rhythm-prints.txt +1 -0
- package/data/corpus/performed-register/judgment/same-leak.txt +1 -0
- package/data/corpus/performed-register/judgment/tools-work.txt +1 -0
- package/data/corpus/performed-register/judgment/tuning-gradients.txt +1 -0
- package/data/corpus/performed-register/judgment/verdict-arithmetic.txt +1 -0
- package/data/corpus/performed-register/judgment/whole-product.txt +1 -0
- package/data/corpus/performed-register/judgment/words-cheap.txt +1 -0
- package/data/corpus/performed-register/mechanical/argue-with-artifact.txt +1 -0
- package/data/corpus/performed-register/mechanical/bill-lands.txt +1 -0
- package/data/corpus/performed-register/mechanical/billed-to-reader.txt +1 -0
- package/data/corpus/performed-register/mechanical/economics-brutal.txt +1 -0
- package/data/corpus/performed-register/mechanical/has-receipts.txt +1 -0
- package/data/corpus/performed-register/mechanical/hired-adversary.txt +1 -0
- package/data/corpus/performed-register/mechanical/hyperbole-universal.txt +1 -0
- package/data/corpus/performed-register/mechanical/metaphor-sender-name.txt +1 -0
- package/data/corpus/performed-register/mechanical/minding-own-business.txt +1 -0
- package/data/corpus/performed-register/mechanical/on-the-tin.txt +1 -0
- package/data/corpus/performed-register/mechanical/opens-the-hood.txt +1 -0
- package/data/corpus/performed-register/mechanical/turns-out-payoff.txt +1 -0
- package/data/corpus/performed-register/mechanical/vibe-check.txt +1 -0
- package/data/corpus/performed-register/mechanical/vibe-isnt-a-vibe.txt +1 -0
- package/data/corpus/performed-register/mechanical/vibe-number-attached.txt +1 -0
- package/data/corpus/performed-register/mechanical/where-slop-lives.txt +1 -0
- package/data/learned-log.md +339 -0
- package/data/learned.json +128 -0
- package/data/patterns.json +2298 -0
- package/package.json +54 -0
- package/references/copy-desk.md +87 -0
- package/references/evidence.md +382 -0
- package/references/overcorrection.md +77 -0
- package/references/platforms.md +102 -0
- package/references/readalong.md +118 -0
- package/references/rewrite-moves.md +177 -0
- package/references/tells.md +190 -0
- package/scripts/calibrate.py +274 -0
- package/scripts/learn.py +1588 -0
- package/scripts/predictability.py +227 -0
- package/scripts/rerank.py +150 -0
- package/scripts/safeio.py +146 -0
- package/scripts/slopscore.py +1352 -0
- package/scripts/version_check.py +104 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Platform Modules
|
|
2
|
+
|
|
3
|
+
Genre changes which tells matter most and what "good" looks like. Read the
|
|
4
|
+
matching module at step 0. Rules here add to, and where noted override, the
|
|
5
|
+
general ladder.
|
|
6
|
+
|
|
7
|
+
## LinkedIn (the highest-slop environment on the internet)
|
|
8
|
+
|
|
9
|
+
LinkedIn AI slop has its own dialect on top of the general tells. Readers now
|
|
10
|
+
pattern-match it instantly; comments calling out "this is ChatGPT" are the
|
|
11
|
+
failure condition.
|
|
12
|
+
|
|
13
|
+
**Platform-specific tells (all high weight):**
|
|
14
|
+
- Announcement voice: "I'm excited/thrilled/humbled/proud to announce/share"
|
|
15
|
+
- Emoji bullets (🚀 ✅ 💡 👉), the 👇 pointer, emoji-decorated hooks
|
|
16
|
+
- Hashtag clusters in the body
|
|
17
|
+
- Engagement bait endings: "Agree?", "Thoughts?", "Drop a comment", "Repost
|
|
18
|
+
if…", "Tag someone who…"
|
|
19
|
+
- Teaser hooks that withhold: "This changed everything for me…"
|
|
20
|
+
- "Here's what I learned" / numbered "Lesson 1:" scaffolding
|
|
21
|
+
- Broetry: every sentence its own line, staccato drama, "Read that again."
|
|
22
|
+
- Gratitude-journey register: "humbled", "grateful for this journey",
|
|
23
|
+
"couldn't have done it without"
|
|
24
|
+
- Manufactured vulnerability: "Writing this is hard…", "with a heavy heart"
|
|
25
|
+
- The fake-profound kicker aphorism: "Failure isn't the opposite of success…"
|
|
26
|
+
|
|
27
|
+
**What works instead:**
|
|
28
|
+
- Hook = the claim or the number, line one, under ~12 words of wind-up.
|
|
29
|
+
"Thirty-two cents." beats "I want to share something surprising about
|
|
30
|
+
agent economics."
|
|
31
|
+
- First person, short declaratives, judgment first. One person talking.
|
|
32
|
+
- Concrete specifics: real numbers, named tools, the mistake. ≥3 claims a
|
|
33
|
+
reader could disagree with.
|
|
34
|
+
- Zero em-dashes (the single most-cited LinkedIn AI tell). Zero hashtags in
|
|
35
|
+
body (first comment if needed). No bolded name-drops.
|
|
36
|
+
- At most one credential line, and only a true one.
|
|
37
|
+
- Max one "not X, it's Y" (prefer zero). No tricolons on autopilot.
|
|
38
|
+
- Rhythm varies: long sentence, then a fragment. A one-line paragraph where
|
|
39
|
+
the point lands.
|
|
40
|
+
- End on a direct question that a specific reader would actually answer, or a
|
|
41
|
+
landing line. Links go in the first comment (reach), offered once.
|
|
42
|
+
- 150–250 words. Shorter beats longer.
|
|
43
|
+
|
|
44
|
+
**LinkedIn verify overrides:** scorer threshold ≤ 20; em-dash count = 0;
|
|
45
|
+
emoji = 0 (unless the author's samples genuinely use them); hashtags in body
|
|
46
|
+
= 0.
|
|
47
|
+
|
|
48
|
+
## X / Twitter
|
|
49
|
+
|
|
50
|
+
- Single tweets: the claim, plainly. No "🧵", no "a thread on…", no
|
|
51
|
+
"1/12" ceremony unless genuinely a thread.
|
|
52
|
+
- Threads: each tweet must stand alone as a sentence someone would quote.
|
|
53
|
+
Cut connective tweets ("But here's where it gets interesting…").
|
|
54
|
+
- No hashtag decoration; no "Let that sink in"; no engagement-farm endings
|
|
55
|
+
("What did I miss?", "Bookmark this").
|
|
56
|
+
- Fragments and lowercase are native here; formality is the tell.
|
|
57
|
+
|
|
58
|
+
## Email (marketing / transactional)
|
|
59
|
+
|
|
60
|
+
- Subject line: the concrete offer or fact, not curiosity-gap bait.
|
|
61
|
+
- One idea, one CTA. Delete warm-up paragraph; open with the reason you're
|
|
62
|
+
writing. "I hope this email finds you well" is assistant-voice — delete.
|
|
63
|
+
- Bullets only for genuinely scannable facts (date, time, price).
|
|
64
|
+
- "Whether you're X or Y" audience-hedging, "Don't miss out", "spots are
|
|
65
|
+
filling fast" (unless true and specific) — cut.
|
|
66
|
+
- Placeholders ([First Name]) must be filled or flagged.
|
|
67
|
+
- Constrained-format allowance: scorer threshold ≤ 35 is acceptable; brevity
|
|
68
|
+
and template structure are native to the genre. Rhythm rules relax;
|
|
69
|
+
fidelity and lexicon rules don't.
|
|
70
|
+
|
|
71
|
+
## Blog / article
|
|
72
|
+
|
|
73
|
+
- Kill the SEO-intro ("In today's digital landscape… In this article we'll
|
|
74
|
+
cover…"). First paragraph must contain the piece's best fact or claim.
|
|
75
|
+
- Headers in sentence case, only above sections that need them (>2
|
|
76
|
+
paragraphs). No "Conclusion" header restating the piece.
|
|
77
|
+
- The essay template (intro → 3 points → recap) is the tell; argue instead.
|
|
78
|
+
- Long-form earns digressions and asymmetry — use them. A personal aside
|
|
79
|
+
the template would never produce is a human signature.
|
|
80
|
+
|
|
81
|
+
## Newsletter
|
|
82
|
+
|
|
83
|
+
- Segments should read like a person telling you what mattered, not a wire
|
|
84
|
+
service: lead each item with the "so what", not the announcement.
|
|
85
|
+
- Cut "In this week's edition…" scaffolding; jump in.
|
|
86
|
+
- One editorial opinion per issue minimum — a newsletter with no judgment is
|
|
87
|
+
a feed.
|
|
88
|
+
- Recurring-format elements (headers, dividers) are fine; identical *prose
|
|
89
|
+
rhythm* across items is the tell.
|
|
90
|
+
|
|
91
|
+
## Research / professional documents (abstracts, exec summaries, whitepapers)
|
|
92
|
+
|
|
93
|
+
- Formal register is native; do NOT casualize. Contractions/fragments rules
|
|
94
|
+
relax; the read-aloud test becomes "would a careful author write this?"
|
|
95
|
+
- The tells that remain deadly here: puffery ("novel", "comprehensive"
|
|
96
|
+
unearned), copula avoidance ("serves as"), participial analysis tails,
|
|
97
|
+
vague quantifiers replacing available numbers, hedge stacks, and the
|
|
98
|
+
"Challenges and Future Directions" formula.
|
|
99
|
+
- Keep calibrated hedging — in research, uncertainty statements are accuracy,
|
|
100
|
+
not filler. Cut only ceremonial hedges ("It is worth noting that").
|
|
101
|
+
- Numbers stay exact; never round for flow. Structure may legitimately be
|
|
102
|
+
templated (IMRaD) — judge sentences, not the outline.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# The final read-aloud pass
|
|
2
|
+
|
|
3
|
+
The scorer measures wording and document-level patterns. The copy desk corrects
|
|
4
|
+
mechanics and line-level style. Neither evaluates the complete deliverable as a
|
|
5
|
+
listener hears it: from the first line to the last, with each sentence setting up the
|
|
6
|
+
next. A stumble, cold transition, unclear antecedent, or change of voice can still
|
|
7
|
+
survive a clean score and correct grammar.
|
|
8
|
+
|
|
9
|
+
Run this pass on every deliverable after the copy desk. It is the last editorial pass
|
|
10
|
+
before final verification and the Report step. Use a dedicated editor with fresh eyes
|
|
11
|
+
when the harness supports subagents; otherwise perform a separate, role-isolated pass.
|
|
12
|
+
The editor must fix the actual deliverable and return the corrected artifact in the
|
|
13
|
+
same format. An audit or list of suggestions is not a completed pass.
|
|
14
|
+
|
|
15
|
+
## What to fix
|
|
16
|
+
|
|
17
|
+
Read the complete copy-edited artifact aloud, from title to final line. Apply every
|
|
18
|
+
safe correction for:
|
|
19
|
+
|
|
20
|
+
- **Stumbles.** Repair run-ons, garden paths, heavy clause stacks, and awkward
|
|
21
|
+
endings that make a reader stop or back up.
|
|
22
|
+
- **Cold transitions.** Add or repair the hinge when a sentence, paragraph, or
|
|
23
|
+
section arrives without a clear connection to what came before.
|
|
24
|
+
- **Performed candor.** Remove announcements of honesty such as "honestly" or "to be
|
|
25
|
+
fair" when the sentence can simply make its point.
|
|
26
|
+
- **Reflexive agreement.** Remove automatic praise or agreement that appears before
|
|
27
|
+
the substance has been checked. Let the facts determine whether the draft agrees,
|
|
28
|
+
qualifies, or disagrees.
|
|
29
|
+
- **Communicative drift.** Stop when fluent sentences no longer advance a clear
|
|
30
|
+
point or reader need. Cut the passage, rebuild it around its purpose, or flag the
|
|
31
|
+
missing intent rather than inventing one.
|
|
32
|
+
- **Rhetorical scale mismatch.** Reduce grand reveals, lessons, or contrasts when
|
|
33
|
+
the underlying point is too small or unsupported for the framing. Preserve a
|
|
34
|
+
contrast that corrects a real, supported misconception.
|
|
35
|
+
- **Performed-writer register.** Flatten theatrical framing of ordinary work ("we
|
|
36
|
+
hired an adversary"), epigram closers, staccato antithesis pairs ("Not perfect.
|
|
37
|
+
Honest."), extended conceits (billing, courtroom, forensics, recipe), one-word
|
|
38
|
+
drama beats, hyperbole ("nothing on earth"), and cute meta-taglines into the
|
|
39
|
+
plain statement each one replaced.
|
|
40
|
+
- **Stat pile-ups.** Split a paragraph that stacks several datasets or tests.
|
|
41
|
+
Each test gets its own paragraph that opens with what it checks in plain words,
|
|
42
|
+
numbers after the setup.
|
|
43
|
+
- **Repetition.** Fix a word, phrase, sentence shape, or idea repeated close enough
|
|
44
|
+
to sound accidental.
|
|
45
|
+
- **Register slips.** Rewrite sudden marketing gloss, generic formality, or folksy
|
|
46
|
+
filler to match the document's established voice.
|
|
47
|
+
- **Process-language leaks.** In outward-facing prose, replace internal labels such
|
|
48
|
+
as "faithful candidate," "selected rewrite," or "exact artifact" with plain
|
|
49
|
+
language. Keep those labels only when the document explains the machinery itself
|
|
50
|
+
and needs the terms.
|
|
51
|
+
- **Number and antecedent snags.** Clarify singular/plural mismatches and pronouns or
|
|
52
|
+
references whose meaning becomes uncertain when heard aloud.
|
|
53
|
+
- **Clarity.** Unpack anything a smart first-time reader would not follow in one
|
|
54
|
+
pass.
|
|
55
|
+
- **Cohesion.** Resolve inconsistent names or claims, and repair transitions that
|
|
56
|
+
make adjacent sections sound as if different people wrote them.
|
|
57
|
+
|
|
58
|
+
Do not merely flag these problems. Correct them directly wherever the intended
|
|
59
|
+
meaning is certain.
|
|
60
|
+
|
|
61
|
+
## Boundaries
|
|
62
|
+
|
|
63
|
+
- Preserve every fact, claim, qualifier, number, name, date, link, and source.
|
|
64
|
+
- Preserve the writer's intended voice, regional spelling, and genre-appropriate
|
|
65
|
+
fragments.
|
|
66
|
+
- Do not alter quotations, code, commands, identifiers, file paths, data, legal
|
|
67
|
+
boilerplate, or proper names unless the user explicitly asks.
|
|
68
|
+
- Preserve the input format and all non-prose structure, including tables, lists,
|
|
69
|
+
diagrams, and markup.
|
|
70
|
+
- If a correction would require guessing, leave the span unchanged and flag the
|
|
71
|
+
ambiguity. Flow never outranks fidelity.
|
|
72
|
+
|
|
73
|
+
## Read-aloud editor brief
|
|
74
|
+
|
|
75
|
+
Give the editor the genre, intended audience, original draft, selected rewrite,
|
|
76
|
+
copy-edited artifact, known voice signals, and immutable facts when available. Then
|
|
77
|
+
use this brief:
|
|
78
|
+
|
|
79
|
+
> You are the final read-aloud editor for a publication-ready piece. Read the
|
|
80
|
+
> complete copy-edited artifact aloud in your head, from title to final line.
|
|
81
|
+
> Edit it directly. Fix every genuine stumble, cold transition, unclear antecedent,
|
|
82
|
+
> accidental repetition, register slip, overloaded sentence, clarity failure, and
|
|
83
|
+
> break in cohesion. Remove internal scoring, editing, or workflow language that has
|
|
84
|
+
> leaked into outward-facing prose; prefer plain descriptions of what the text does.
|
|
85
|
+
> Preserve the writer's voice, regional spelling, facts, claims, qualifiers, names,
|
|
86
|
+
> numbers, links, quotations, code, commands, identifiers, data, and non-prose
|
|
87
|
+
> structure. Do not add detail, hype, certainty, or generic polish. If a correction
|
|
88
|
+
> would require guessing, leave that span unchanged and flag it.
|
|
89
|
+
> Return: (1) the complete corrected artifact in the same format, not an audit or
|
|
90
|
+
> list of suggestions; and (2) a terse note only for unresolved ambiguities or
|
|
91
|
+
> unusual forms deliberately kept.
|
|
92
|
+
|
|
93
|
+
Apply the returned artifact to the actual deliverable before verification.
|
|
94
|
+
|
|
95
|
+
## Finalization loop
|
|
96
|
+
|
|
97
|
+
Verify the exact artifact returned by the read-aloud editor:
|
|
98
|
+
|
|
99
|
+
1. Rerun the heuristic surface scorer and scripted fidelity check.
|
|
100
|
+
2. Compare it directly with the original and selected rewrite for claims,
|
|
101
|
+
qualifiers, intended voice, regional spelling, format, and non-prose structure.
|
|
102
|
+
3. If any check requires a textual repair, apply it, run the copy desk again, run
|
|
103
|
+
this read-aloud pass again, and repeat every final check.
|
|
104
|
+
|
|
105
|
+
Stop only when the same artifact has cleared the copy desk, final read-aloud pass,
|
|
106
|
+
semantic and format review, scorer, and fidelity check. Limit this repair loop to
|
|
107
|
+
three rounds. If an issue still cannot be resolved without guessing, return the best
|
|
108
|
+
source-preserving version that completed both editorial passes, state the unresolved
|
|
109
|
+
span and failed check plainly, and do not describe the fallback as fully verified.
|
|
110
|
+
|
|
111
|
+
## Why it is separate
|
|
112
|
+
|
|
113
|
+
The numeric gate, copy desk, and read-aloud pass catch different failures. The gate
|
|
114
|
+
measures tells, rhythm, formatting, and compression. The copy desk corrects mechanics
|
|
115
|
+
and line-level usage. The read-aloud editor fixes the stumble, cold pivot, repetition,
|
|
116
|
+
and broken handoff that neither threshold nor grammar rule can hear. A deliverable is
|
|
117
|
+
finished only after the exact text returned to the user has cleared all three stages
|
|
118
|
+
and every final verification check.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Rewrite Moves — the positive program
|
|
2
|
+
|
|
3
|
+
Removing tells makes text neutral. These moves make it human. Ordered by the
|
|
4
|
+
evidence ladder (L1 strongest detection signal + reader value).
|
|
5
|
+
|
|
6
|
+
Before using the ladder, choose the smallest effective intervention for each
|
|
7
|
+
passage: keep, repair, cut, or rebuild. Leave strong human sentences verbatim.
|
|
8
|
+
The ladder expands what an editor can do; it does not require every sentence to
|
|
9
|
+
be rewritten.
|
|
10
|
+
|
|
11
|
+
## L1 — Substance: raise the information
|
|
12
|
+
|
|
13
|
+
The deepest difference between human and machine prose is measurable:
|
|
14
|
+
AI text sits at the most-probable phrasing (DetectGPT's log-prob curvature),
|
|
15
|
+
and the most-probable phrasing is the generic one. Specificity is the attack.
|
|
16
|
+
|
|
17
|
+
- **Commit to a claim.** Find where the draft goes vague to avoid committing,
|
|
18
|
+
and commit. "AI can help teams work faster" → "The router cut our bill in
|
|
19
|
+
half; the part nobody warns you about is quality drops too unless you gate
|
|
20
|
+
it." Count claims a reader could disagree with — sloppy text has ~zero.
|
|
21
|
+
- **Concretize every generic noun phrase.** "various industries" → the two
|
|
22
|
+
industries you mean. "significant improvement" → "340ms → 90ms".
|
|
23
|
+
"stakeholders" → who. If you cannot name it, the sentence has no content —
|
|
24
|
+
cut it or flag it.
|
|
25
|
+
- **Add only what the author actually has.** A real number, the client
|
|
26
|
+
situation, what went wrong, why they stopped doing it the old way. This is
|
|
27
|
+
the one move that cannot be faked — never invent it. If the material isn't
|
|
28
|
+
in the source, ask (flag: "needs a real detail here").
|
|
29
|
+
- **Keep the odd, drop the round.** "$1.1M raised, 4,000 users" beats "over a
|
|
30
|
+
million dollars and thousands of users." Preserve un-smooth facts; AI
|
|
31
|
+
regresses them to the mean.
|
|
32
|
+
- **Density has a ceiling: stay followable.** Raising information per word
|
|
33
|
+
fails when the reader can't absorb it. Caught in live use:
|
|
34
|
+
"They detect the post-training register: phrasing at the probability
|
|
35
|
+
maximum, uniform sentence rhythm, a few hundred over-represented style
|
|
36
|
+
words, template structure, relentless even polish" — zero tells, and
|
|
37
|
+
unreadable: five abstractions in one breath, nothing concrete to hold.
|
|
38
|
+
The fix is unpacking, not dumbing down: "They catch a writing style, the
|
|
39
|
+
one every chat model ships with after preference tuning. You know it when
|
|
40
|
+
you read it: every sentence the same length, every word the safest
|
|
41
|
+
choice, a polish that never varies." One idea per sentence. Anchor each
|
|
42
|
+
abstraction in something the reader can hear or picture. The scorer's
|
|
43
|
+
followability channel (comma-chains, long-word ratio, 38+-word
|
|
44
|
+
sentences) measures this; the read-aloud-as-an-outsider test judges it.
|
|
45
|
+
Beware the near-miss fix: swapping an abstraction-chain for an
|
|
46
|
+
unexplained metaphor ("the AI voice is in the finishing school") moves
|
|
47
|
+
the decoding load instead of removing it. A metaphor anchors only when
|
|
48
|
+
its mapping is set up first; otherwise use the plain comparison the
|
|
49
|
+
reader can picture ("take one model in two versions: raw, and after
|
|
50
|
+
assistant training — detectors read the raw one as human"). Citation
|
|
51
|
+
name-lists belong in the reference file, not the sentence.
|
|
52
|
+
|
|
53
|
+
## L2 — Order: break the template
|
|
54
|
+
|
|
55
|
+
Canonical LLM ordering (definition → three balanced points → summary) is
|
|
56
|
+
itself a tell, independent of wording (DIPPER showed reordering defeats
|
|
57
|
+
detectors as much as re-wording).
|
|
58
|
+
|
|
59
|
+
- Lead with the most interesting true sentence in the piece. It's usually
|
|
60
|
+
buried in paragraph 3.
|
|
61
|
+
- Delete the intro that announces the topic and the outro that restates it.
|
|
62
|
+
- Let sections be unequal: the important point gets 60% of the words.
|
|
63
|
+
- If the piece argues, follow the argument. If it narrates, follow time.
|
|
64
|
+
Never follow the essay template.
|
|
65
|
+
|
|
66
|
+
## L3 — Rhythm: engineer burstiness
|
|
67
|
+
|
|
68
|
+
Sentence-length variance is a top-tier detector feature and the easiest to
|
|
69
|
+
measure (the scorer reports it; target CV ≥ 0.45).
|
|
70
|
+
|
|
71
|
+
- After a 30-word sentence, a 4-word one. On purpose.
|
|
72
|
+
- One-line paragraph where the point lands. Once, maybe twice.
|
|
73
|
+
- Place the punchy register where it belongs: hooks and landings. An
|
|
74
|
+
analytic middle paragraph built from stacked clipped declaratives reads
|
|
75
|
+
robotic — the staccato costume of over-correction. Middles want flowing,
|
|
76
|
+
subordinated sentences (think a good newspaper editor), saving the
|
|
77
|
+
fragment for the moment it earns.
|
|
78
|
+
- Fragments, where they work. Starting with And or But is fine.
|
|
79
|
+
- Vary paragraph shape: a 6-sentence paragraph next to a 1-sentence one.
|
|
80
|
+
- Don't pad every claim to equal weight — humans spike information unevenly
|
|
81
|
+
(dense sentence, then a breather). An abrupt claim without wind-up is human.
|
|
82
|
+
|
|
83
|
+
## L4 — Register: break the RLHF voice
|
|
84
|
+
|
|
85
|
+
Detectors flag instruction-tuned models' register, not machine text per se —
|
|
86
|
+
the uniformly polished, evenly hedged, affect-positive expository voice.
|
|
87
|
+
Breaking it matters more than any word swap.
|
|
88
|
+
|
|
89
|
+
- **Read-aloud test (Paul Graham).** Every sentence: would you say this to a
|
|
90
|
+
friend? No → rewrite in the words you'd actually say. Contractions in;
|
|
91
|
+
Latinate stiffness out ("utilize" → "use").
|
|
92
|
+
- **Hedge like a person.** People hedge selectively, where they're actually
|
|
93
|
+
unsure: "I doubt this generalises past Postgres." Machines hedge everywhere
|
|
94
|
+
equally: "it's worth noting that results may vary." One calibrated hedge
|
|
95
|
+
beats five ceremonial ones; qualification should encode real confidence
|
|
96
|
+
(How to Write Usefully).
|
|
97
|
+
- **De-nominalize.** "made an assessment of" → "assessed"; "provides
|
|
98
|
+
optimization of" → "optimizes". Kill participial sentence openers
|
|
99
|
+
("Leveraging X, the system…" → "The system uses X to…").
|
|
100
|
+
- **Name the actor when agency matters.** "The setting was changed" becomes
|
|
101
|
+
"The operator changed the setting" when the source identifies the operator.
|
|
102
|
+
Keep passive voice when the actor is unknown, irrelevant, deliberately
|
|
103
|
+
withheld, or expected in the genre. Passive voice is a clarity decision, not
|
|
104
|
+
a standalone AI tell.
|
|
105
|
+
- **Hide the machinery.** Outward-facing prose should not sound like the scoring
|
|
106
|
+
or editing harness that produced it. Use plain language instead: "keeps every
|
|
107
|
+
fact" rather than "faithful candidate," "the version we chose" rather than
|
|
108
|
+
"selected rewrite," and "the text you receive" rather than "exact artifact."
|
|
109
|
+
Keep a technical term only when the reader needs that concept.
|
|
110
|
+
- **Widen affect.** Allow irritation, doubt, amusement where genuine. AI
|
|
111
|
+
affect is uniformly upbeat-neutral; one honestly grumpy sentence is worth
|
|
112
|
+
ten vocabulary fixes.
|
|
113
|
+
- **Insider reference.** Name the specific tool, paper, failure mode.
|
|
114
|
+
Explaining what an API is to engineers signals outsider; assuming shared
|
|
115
|
+
knowledge signals membership.
|
|
116
|
+
- **Expert authority, earned.** The target voice is a senior practitioner
|
|
117
|
+
writing for peers. Authority comes from specifics and correct technical
|
|
118
|
+
usage, never from intensity ("truly transformative") or credentials
|
|
119
|
+
waved around. An expert says the simple true thing plainly, states
|
|
120
|
+
numbers exactly, disagrees where the field is wrong, and reserves hedges
|
|
121
|
+
for the genuinely uncertain. If a sentence could appear in any
|
|
122
|
+
competent generalist's post, it isn't expert voice yet.
|
|
123
|
+
|
|
124
|
+
## L5 — Lexicon: strip the tells
|
|
125
|
+
|
|
126
|
+
The lists live in `tells.md` and the scorer's data files. Two rules beyond
|
|
127
|
+
the lists:
|
|
128
|
+
|
|
129
|
+
- Replace with the *plain* word, never an equally pompous synonym ("delve
|
|
130
|
+
into" → "look at", not "plumb the depths of").
|
|
131
|
+
- Budget the constructions that are fine once but damning in multiples: max
|
|
132
|
+
one "not X, it's Y" per piece (usually zero), no tricolons on autopilot,
|
|
133
|
+
no colon-reveals.
|
|
134
|
+
|
|
135
|
+
## L6 — Formatting: quiet the page
|
|
136
|
+
|
|
137
|
+
Format follows content. Em-dashes ≤1/150 words (LinkedIn: zero). No bold
|
|
138
|
+
spam, emoji bullets, hashtag clusters, headers over two-sentence sections, or
|
|
139
|
+
bullets where prose reads better. Normalize quotes. Strip markdown artifacts
|
|
140
|
+
and any chatbot markup leakage.
|
|
141
|
+
|
|
142
|
+
## Voice calibration
|
|
143
|
+
|
|
144
|
+
Never rewrite "in the user's voice" without evidence of the voice.
|
|
145
|
+
|
|
146
|
+
**With samples** (conversation history, linked posts, or a user-supplied file):
|
|
147
|
+
extract typical sentence length and variance; contractions y/n; first person,
|
|
148
|
+
questions, humor; punctuation habits; vocabulary level and jargon used
|
|
149
|
+
unexplained; how they open and close; what they push back on. Preserve the 3–5
|
|
150
|
+
strongest markers, down to individual words and punctuation.
|
|
151
|
+
|
|
152
|
+
**Without samples:** ask for two paragraphs of their real writing — it beats
|
|
153
|
+
any description. If unavailable, ask three questions: who's the reader, what
|
|
154
|
+
should they do after reading, and what do you believe about this that peers
|
|
155
|
+
don't?
|
|
156
|
+
|
|
157
|
+
A sample can guide the current edit only if the AI assistant can read it. Do not
|
|
158
|
+
store it unless the user explicitly authorizes a storage method. `learn.py
|
|
159
|
+
--voice` stores only existing watchlist-word exceptions under
|
|
160
|
+
`$ZERO_SLOP_HOME/voices/`; it does not store the sample or learn cadence,
|
|
161
|
+
syntax, humor, or tone. A readable writing sample outranks general style
|
|
162
|
+
guidance: if the user genuinely writes with em-dashes and "honestly", those stay.
|
|
163
|
+
|
|
164
|
+
## Worked contrast
|
|
165
|
+
|
|
166
|
+
**Flat (says nothing, perfectly clean):**
|
|
167
|
+
> Model routing is an effective strategy for reducing AI costs while
|
|
168
|
+
> maintaining quality.
|
|
169
|
+
|
|
170
|
+
**Human (contains things):**
|
|
171
|
+
> We put a router in front of everything about eight months ago. The bill
|
|
172
|
+
> dropped by half, which everyone expects. What nobody warns you about is that
|
|
173
|
+
> quality drops too unless you gate it — we shipped three weeks without an
|
|
174
|
+
> eval gate and spent longer cleaning that up than the routing took to build.
|
|
175
|
+
|
|
176
|
+
Longer, but not padded: a date, a number, a mistake, and a warning that only
|
|
177
|
+
comes from having made it. That's the difference density measures.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# The Tell Taxonomy
|
|
2
|
+
|
|
3
|
+
A hundred and five tells in six families, merged from WP:AICATCH (Wikipedia's editor
|
|
4
|
+
catalog, built from thousands of caught instances), the de-slop/stop-slop
|
|
5
|
+
detector line, petergyang/no-ai-slop, blader/humanizer, the academic
|
|
6
|
+
lexicon studies (Kobak, Liang, Juzek & Ward), and community taxonomies of
|
|
7
|
+
reader-reported tells. The scorer
|
|
8
|
+
(`scripts/slopscore.py`) catches the lexically detectable ones; the rest need
|
|
9
|
+
judgment. **Require corroboration** — one "robust" in technical prose
|
|
10
|
+
is nothing; five tells in one paragraph is a verdict. Shared idioms humans
|
|
11
|
+
still use ("elephant in the room") carry low weights for exactly that reason:
|
|
12
|
+
alone they prove nothing, five in a page is the machine's idiom autopilot.
|
|
13
|
+
|
|
14
|
+
### How to prioritize the catalogue
|
|
15
|
+
|
|
16
|
+
A 2026 analysis of 89,239 Reddit posts adds a useful check on what readers
|
|
17
|
+
notice first. In its reviewed sample, people cited flat rhythm, reflexive
|
|
18
|
+
praise, formulaic shape, and polished-but-empty prose more often than most
|
|
19
|
+
individual words. Its keyword pass also over-counted ordinary words such as
|
|
20
|
+
"however", "thus", "hence", "nuanced", "comprehensive", and "utilize".
|
|
21
|
+
Use that result to order the review, not as a probability or a blacklist.
|
|
22
|
+
|
|
23
|
+
Start with meaning, stance, rhythm, and shape. Then inspect repeated
|
|
24
|
+
constructions, assistant residue, and formatting. Treat isolated vocabulary
|
|
25
|
+
as weak evidence unless it is generic in context or appears in a cluster. A
|
|
26
|
+
lone dash, formal sentence, transition, or supported contrast remains a style
|
|
27
|
+
choice. See `evidence.md` for the study, limitations, and adoption decision.
|
|
28
|
+
|
|
29
|
+
## 1. Lexical
|
|
30
|
+
|
|
31
|
+
| Tell | Fix |
|
|
32
|
+
|---|---|
|
|
33
|
+
| AI vocabulary: delve, tapestry, testament, realm, intricate, interplay, landscape, meticulous, pivotal, garner, bolster, underscore, showcase, foster, boasts | Plain word or the specific thing. "delve into" → "look at"; "the AI landscape" → name the actual companies/tools |
|
|
34
|
+
| Marketing register: seamless, frictionless, cutting-edge, game-changer, state-of-the-art, supercharge, paradigm shift, empower | Delete or state the concrete capability |
|
|
35
|
+
| Generic benefit stack: a platform, product, or service is paired with two or more interchangeable outcomes such as "more value", "greater efficiency", or "strong capabilities" | Replace the stack with one named capability, measured result, or specific use case; ask for the missing fact rather than inventing it |
|
|
36
|
+
| Rider buzzwords (leverage, robust, unlock, harness, streamline) | Fine in plain technical prose; slop when clustered with marketing words |
|
|
37
|
+
| Puffery: nestled, breathtaking, rich heritage, renowned, vibrant, groundbreaking | State the fact; let the reader judge importance |
|
|
38
|
+
| Legacy phrases: "a testament to", "pivotal moment", "enduring legacy", "evolving landscape", "setting the stage" | Say what happened |
|
|
39
|
+
| Copula avoidance: "serves as", "stands as", "functions as", "boasts", "features" | "is" / "has" |
|
|
40
|
+
| Stiff synonyms: utilized, authored, attempted, relocated | used, wrote, tried, moved |
|
|
41
|
+
| Vague quantifiers: "a wide variety of", myriad, plethora, countless, numerous | The number, or "many", or cut |
|
|
42
|
+
| Filler intensifiers: truly, genuinely, incredibly, undoubtedly | Cut; keep only when carrying real emphasis in the writer's voice |
|
|
43
|
+
| Degree intensifiers (very, really + adj) | Weak signal alone; cut in clusters |
|
|
44
|
+
| Business jargon: circle back, move the needle, low-hanging fruit, deep dive, double-click, boil the ocean, table stakes, north star, hit the ground running | The actual verb |
|
|
45
|
+
| Amplified stats: a whopping, a staggering, jaw-dropping, mind-blowing, skyrocket | State the number plainly; it carries its own weight |
|
|
46
|
+
| Catalog superlatives: unmatched, unrivaled, top-notch, industry-leading, must-have, hassle-free, second to none, look no further | One concrete differentiator, or nothing |
|
|
47
|
+
| Startup-bio vocab: visionary, trailblazing, on a mission to, passionate about, at the intersection of, thought leader | Say what you build and for whom |
|
|
48
|
+
| Travel-brochure vocab: picturesque, quintessential, captivating, in the heart of, perfect blend of, something for everyone | The specific detail a visitor would notice |
|
|
49
|
+
| Idiom autopilot: double-edged sword, tip of the iceberg, elephant in the room, perfect storm, game changer, best of both worlds, win-win, paves the way, bridge the gap, at the forefront, uncharted territory, new normal, full circle, wild west | Pre-assembled phrase → disassemble: say the actual trade-off, risk, or change |
|
|
50
|
+
| 2025+ era shift: emphasizing, enhance, highlight(ing), showcasing now outrank delve | Same fix; keep `data/learned.json` current |
|
|
51
|
+
|
|
52
|
+
## 2. Structural
|
|
53
|
+
|
|
54
|
+
| Tell | Fix |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Listicle stems: "There are several key factors…", "Here are 5…" | Make the first point; structure follows argument |
|
|
57
|
+
| "Not only X but also Y" | Pick the stronger of X/Y, state it |
|
|
58
|
+
| Dead transitions: Moreover, Furthermore, Additionally at sentence start | "but", "so", "and", or nothing — humans cohere with connective texture, not scaffolding |
|
|
59
|
+
| Wrap-up scaffolding: "In conclusion", final paragraph restating the piece | End on the last concrete point or consequence |
|
|
60
|
+
| Rule of three: "fast, reliable, and scalable" | Two items, or one, or an actual list with content |
|
|
61
|
+
| "Challenges and future prospects" formula | Delete the formula; report the one real challenge |
|
|
62
|
+
| Rigid outline: every paragraph topic-sentence + 3 supports + mini-conclusion | Reorder; let paragraph lengths vary; put the best claim first |
|
|
63
|
+
| Participial analysis tails: "…, highlighting the importance of X" | Full stop, then the actual consequence ("so users can…") or nothing |
|
|
64
|
+
| Inline-header bullet lists (• **Header:** text) | Prose, unless it's truly a list |
|
|
65
|
+
| Tiny tables for prose content | Prose |
|
|
66
|
+
| Transformation chains: "X becomes Y. Y becomes Z." | One plain causal sentence |
|
|
67
|
+
| Synonym cycling (the agent/the assistant/the tool for one referent) | Repeat the clear word |
|
|
68
|
+
| Stacked hedges: "might possibly", "could potentially perhaps" | One hedge or none |
|
|
69
|
+
| Explainer stems: "in a nutshell", "simply put", "long story short", "when it comes to", "at its core", "in essence" | Cut the stem; start at the content |
|
|
70
|
+
| "Here's how/why/a breakdown" stems | Start with the thing itself |
|
|
71
|
+
| Imperative flip: "Stop X. Start Y.", "Do this instead" | Make the one claim, with the reason |
|
|
72
|
+
| Forecast wrap-ups: "as we move forward", "the road ahead", "as technology continues to evolve" | End on the concrete point or consequence |
|
|
73
|
+
| False ranges: "from strategy to culture", where the endpoints share no scale | Name the actual topics or relationship |
|
|
74
|
+
| Fragmented heading warm-up: a heading followed by one line that restates it | Delete the warm-up; begin with the first useful sentence |
|
|
75
|
+
| Diff-anchored description outside a changelog, release note, migration guide, or incident review | Describe the current behavior so the document stands on its own |
|
|
76
|
+
| Mechanical sentence openings: several consecutive sentences begin with the same subject or frame without building deliberate rhythm | Merge or vary the sentences; preserve purposeful anaphora |
|
|
77
|
+
| Jargon compression: invented compound terms in place of explanation — "threshold cliff", "length-blind floor", "pinned high forever" | Unpack into the plain explanation once, then a short name only if the document truly reuses it; the fix is unpacking, not a synonym |
|
|
78
|
+
| Stat pile-up: several datasets or tests crammed into one paragraph with no connective explanation | One test per paragraph, opening with what the test checks in plain words ("The first test checks that the score falls as humans get more involved"), numbers after the plain-language setup |
|
|
79
|
+
|
|
80
|
+
## 3. Rhetorical
|
|
81
|
+
|
|
82
|
+
| Tell | Fix |
|
|
83
|
+
|---|---|
|
|
84
|
+
| Empty hedging: "It's worth noting that", "it's important to note" | Delete the stem; keep the content |
|
|
85
|
+
| Didactic disclaimers: "it's crucial to remember", "results may vary" | Delete unless a real caveat, then state it precisely |
|
|
86
|
+
| Manufactured stakes: "in today's fast-paced world", "now more than ever" | Start where the reader needs to start |
|
|
87
|
+
| Performed candor: "let's be honest", "here's the thing", "truth be told" | State the point |
|
|
88
|
+
| Rhetorical-question openers: "Ever wondered…?", "What if I told you…?" | The answer, as a statement |
|
|
89
|
+
| Throat-clearing: "The uncomfortable truth is", "Let me be clear" | Cut; the claim stands alone |
|
|
90
|
+
| Emphasis crutches: "Make no mistake", "Let that sink in", "Read that again" | Show the weight with the fact itself |
|
|
91
|
+
| Meta-commentary: "In this post we'll explore", "Let me walk you through" | Just do it |
|
|
92
|
+
| Corrective reveal: "You've been told X. Here's the truth" | Make the claim without the posture |
|
|
93
|
+
| Binary contrast reveal: "The answer isn't X. It's Y." | "Y matters more than X" — and at most once per piece |
|
|
94
|
+
| Negative parallelism family: "It's not just X, it's Y" / "No X. No Y. Just Z." / "It wasn't A. It wasn't B. It was C." | State the positive claim once |
|
|
95
|
+
| Contrast reveal, extended: "isn't about X — it's about Y" (any subject, any separator), "less about X, more about Y", "didn't just X. We Y", "was never about X", "That's not X. That's Y.", "AI won't replace you. Someone using AI will." | State the positive claim once; the meter now catches every separator and subject |
|
|
96
|
+
| Fake epiphany: "that's when it hit me", "little did I know", "changed everything", "the rest is history", "fate had other plans" | Tell the event; skip the drumroll |
|
|
97
|
+
| Certainty theater: "cannot be overstated", "one thing is certain", "nothing could be further from the truth", "Full stop.", "Period.", "End of story.", "would be an understatement" | Assert it once, plainly; evidence over volume |
|
|
98
|
+
| Non-conclusions: "only time will tell", "remains to be seen", "the jury is still out", "the possibilities are endless", "exciting times ahead" | Commit to the call the evidence supports, or cut |
|
|
99
|
+
| Crowd priming: "sound familiar?", "we've all been there", "you might be wondering", "believe it or not", "trust me", "hear me out" | Respect the reader; make the claim |
|
|
100
|
+
| Borrowed proverbs: "Rome wasn't built in a day", "the proof is in the pudding", "actions speak louder than words" | Your own words or nothing |
|
|
101
|
+
| Manufactured-world openers: "Gone are the days", "In a world where", "Imagine a world where", "Picture this:", "It's 2026 and", "It's no secret that" | Start at the specific situation |
|
|
102
|
+
| Forced profundity: "You can't have one without the other" | Earn it or cut it |
|
|
103
|
+
| Calls to action: "Buckle up", "Let's dive in", "Stay tuned" | Cut |
|
|
104
|
+
| Weasel attribution: "Experts agree", "Studies show", "Industry reports suggest" | Name the source or cut the claim; if no source exists, ask the author |
|
|
105
|
+
| Canned coverage claims: "featured in prominent media outlets" | Name the outlet and what it said |
|
|
106
|
+
| Notability roll-call: outlet names, follower counts, or status markers with no relevance to the point | Keep only the evidence that serves the subject and give its context |
|
|
107
|
+
| Unraised-objection defense: "I'm not saying…", "to be clear…", or "some might say…" when no source, reader, or argument raised it | State the positive claim; keep real counterarguments, corrections, safety limits, and FAQ answers |
|
|
108
|
+
| Disposable alternative: "a tempting approach would be…" introduced only to reject it and never used again | State the actual constraint; keep alternatives that a reader may genuinely consider |
|
|
109
|
+
| Theatrical process framing: "we hired an adversary", "we summoned a skeptic" — personifying an ordinary procedure as a character | Name the actual procedure ("we ran an adversarial review of our own scorer") and let it be ordinary |
|
|
110
|
+
| Epigram cadence: a clever-clever aphorism where a plain statement belongs ("a cheap draft turns out to carry an expensive signal: it tells the reader how much of your attention you thought they were worth") | Keep the claim, cut the flourish; one earned aphorism per piece is already a lot |
|
|
111
|
+
| Metaphor flourish standing in for a plain statement: "the other half lands on the sender's name" | Say it plainly ("the sender's reputation takes the other half"); judgment call — no safe regex exists |
|
|
112
|
+
| Slang-cute idiom: "has receipts", "hits different", "living rent-free" | State the evidence itself; see the slang-costume ban in `overcorrection.md` |
|
|
113
|
+
| Hyperbole universals: "nothing on earth", "on the planet", "in history", "known to man" | State the actual scope; the honest comparison is smaller and stronger |
|
|
114
|
+
| Cute meta-taglines and campaign framing: "a meter you can argue with", "the fight against X" as a slogan | Describe the thing; "posts about writing quality" beats a campaign poster. "The fight against" is real usage in history and civic prose — flag the marketing register, not the phrase |
|
|
115
|
+
| Staccato antithesis: two short balanced sentences, the second landing the twist — "Not perfect. Honest.", "Slop isn't a vibe. It's measurable.", "The draft was cheap. The signal it sent was not." | One plain sentence with the claim; at most one antithesis per piece |
|
|
116
|
+
| Extended conceit: a process or abstraction dressed as physical drama — billing ("the bill lands on reputation", "gets billed to a reader"), courtroom ("never allowed to convict"), forensics ("rhythm leaves prints"), machinery ("opens the hood"), recipe ("has four ingredients") | At most one metaphor per piece, then plain language; name the actual mechanism |
|
|
117
|
+
| Vibe-slang: "just a vibe", "vibe check", "argue with vibes", "has receipts" | The plain word: impression, judgment, evidence |
|
|
118
|
+
| One-word drama beat: "Fine." dropped between claims as a rhythm device | Cut it or fold it into the sentence it interrupts |
|
|
119
|
+
| Chiasmus and mirrored wordplay: "your ear catches the even pulse your eye forgives" | Once is a flourish; as a default cadence it is performance — say it straight |
|
|
120
|
+
|
|
121
|
+
The rows from "Theatrical process framing" down are one register:
|
|
122
|
+
**performed-writer prose**, an AI imitating a punchy human writer. They are
|
|
123
|
+
the meter-side twins of the edgy-slop catalogue in `overcorrection.md` — the
|
|
124
|
+
same costume seen at detection time instead of rewrite time. The scorer
|
|
125
|
+
catches the mechanical subset (`hired-adversary`, `turns-out-payoff`,
|
|
126
|
+
`has-receipts`, `hyperbole-universal`, `argue-with-artifact`,
|
|
127
|
+
`vibe-register`, `where-x-lives`, `billed-conceit`, `on-the-tin`,
|
|
128
|
+
`minding-own-business`, `economics-brutal`, `opens-the-hood`, and the
|
|
129
|
+
rider-gated "fight against"); epigram cadence, staccato antithesis, most
|
|
130
|
+
conceits, jargon compression, and tagline register need the judgment pass,
|
|
131
|
+
because their literal forms are legitimate in news, history, crime, and
|
|
132
|
+
civic writing. The human-flagged spans that motivated the family live in
|
|
133
|
+
`data/corpus/performed-register/` — the mechanical half is regression-tested,
|
|
134
|
+
the judgment half is the read-aloud pass's fixture list.
|
|
135
|
+
|
|
136
|
+
## 4. Punctuation & formatting
|
|
137
|
+
|
|
138
|
+
| Tell | Fix |
|
|
139
|
+
|---|---|
|
|
140
|
+
| Em-dash overuse (density; 2+ in a sentence; spaced pairs as drama) | Commas, periods, parentheses; ≤1 per ~150 words; zero on LinkedIn |
|
|
141
|
+
| Title Case Headings everywhere | Sentence case |
|
|
142
|
+
| Bold spam mid-sentence | Unbold; if it needs emphasis, restructure |
|
|
143
|
+
| Emoji as bullets/headers (🚀 ✅ 👉) | Remove |
|
|
144
|
+
| Hashtag clusters | Zero in body; move to first comment if needed |
|
|
145
|
+
| Markdown artifacts in plain-text contexts | Strip |
|
|
146
|
+
| Chatbot markup leakage (oaicite, citeturn0…, [cite: 1], utm_source=chatgpt.com) | Strip — these are proof, not style |
|
|
147
|
+
| Placeholders left in ([Your Name], [Company]) | Fill or flag |
|
|
148
|
+
| Curly-quote inconsistency | Normalize to the document's convention |
|
|
149
|
+
|
|
150
|
+
## 5. Tone
|
|
151
|
+
|
|
152
|
+
| Tell | Fix |
|
|
153
|
+
|---|---|
|
|
154
|
+
| Assistant voice: "Great question!", "I hope this helps", "I'd be happy to" | Delete |
|
|
155
|
+
| Reflexive agreement or praise: approving the premise before checking it, flattering the writer, or refusing to take a supported position | Answer the substance first; agree, qualify, or disagree according to the facts |
|
|
156
|
+
| Chatbot residue: "Would you like me to…", "Let me know if you'd like…", "my training data" | Delete — it is proof of paste, not style |
|
|
157
|
+
| Knowledge-cutoff residue: "as of my last update", "not widely documented" | Delete; verify the claim |
|
|
158
|
+
| Passive or subjectless wording that hides an actor who matters | Name the actor and use the direct verb; keep passive voice when the actor is unknown, irrelevant, or native to the genre |
|
|
159
|
+
| Form-letter email: "wanted to reach out", "touch base", "don't hesitate to reach out" | Say the actual ask in the first sentence |
|
|
160
|
+
| LinkedIn ritual: "some personal news", "a new chapter", "bittersweet", "couldn't be prouder", "this is your sign", "I'll go first", "today years old" | The fact, then stop; feeling shown through detail |
|
|
161
|
+
| Promotional drift in neutral contexts | Neutral statement of fact |
|
|
162
|
+
| Uniform flawless register (every sentence equally polished) | Vary: blunt next to careful, casual next to technical |
|
|
163
|
+
| Excess positivity, joy-skewed affect | Allow doubt, irritation, dry humor where genuine |
|
|
164
|
+
| Fake humanization (edgy-slop) | See `overcorrection.md` — it's still slop |
|
|
165
|
+
|
|
166
|
+
## 6. Content-emptiness (judgment only — no regex can see these)
|
|
167
|
+
|
|
168
|
+
| Tell | Test | Action |
|
|
169
|
+
|---|---|---|
|
|
170
|
+
| Hollowness — no claim at all | Removal test: delete it; anything lost? | Flag, never pad |
|
|
171
|
+
| Communicative drift — fluent sentences accumulate without serving a clear point or reader need | Purpose test: what job does this paragraph do here? | Cut it, rebuild it around the real point, or ask for the missing intent |
|
|
172
|
+
| Rhetorical scale mismatch — a grand contrast, lesson, or reveal is applied to a trivial or unsupported claim | Proportion test: does the framing match the importance and support of the point? | State the point at its real scale; preserve a contrast when it corrects a real misconception |
|
|
173
|
+
| Regression to the mean — specifics smoothed into generic + inflated importance | Compare against source facts | Restore the specific |
|
|
174
|
+
| Smooth-but-empty specificity — "modern technologies that ensure reliability" | Can you name the referent? | Name it or cut |
|
|
175
|
+
| Superficial analysis — unearned significance commentary | Who says it matters? | State the mechanism or cut |
|
|
176
|
+
| Fabricated support — invented citations, stats, anecdotes | Verify every reference | Remove; ask author for real one |
|
|
177
|
+
| Speculative gap-filling — "likely supports…" | Is there a source? | Cut or mark as open question |
|
|
178
|
+
|
|
179
|
+
## What is NOT a tell (do not flag)
|
|
180
|
+
|
|
181
|
+
Perfect grammar. Formal prose where the genre demands it. A transition word in
|
|
182
|
+
isolation. Long sentences that earn their length. Technical vocabulary used
|
|
183
|
+
technically. A single em-dash doing real work. First-person hedging that
|
|
184
|
+
encodes real uncertainty. Unsourced-but-checkable claims. And any pattern that
|
|
185
|
+
is demonstrably the writer's own voice in a sample the AI assistant can read.
|
|
186
|
+
A single contrast that corrects a real, supported misconception is not a tell.
|
|
187
|
+
The named `--voice` scoring profile is narrower: it exempts only existing
|
|
188
|
+
watchlist words found by exact match. One match is enough, but the exceptions
|
|
189
|
+
apply only when the profile is selected. The profile does not model the
|
|
190
|
+
writer's full style.
|