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.
Files changed (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -0
  3. package/SKILL.md +803 -0
  4. package/data/corpus/community-register/README.md +14 -0
  5. package/data/corpus/community-register/judgment/communicative-drift.txt +1 -0
  6. package/data/corpus/community-register/judgment/reflexive-agreement.txt +1 -0
  7. package/data/corpus/community-register/judgment/rhetorical-scale-mismatch.txt +1 -0
  8. package/data/corpus/must-not-flag/README.md +49 -0
  9. package/data/corpus/must-not-flag/esl-engineer-email.txt +7 -0
  10. package/data/corpus/must-not-flag/exec-memo.txt +9 -0
  11. package/data/corpus/must-not-flag/federalist.txt +5 -0
  12. package/data/corpus/must-not-flag/gettysburg.txt +1 -0
  13. package/data/corpus/must-not-flag/grant-abstract.txt +5 -0
  14. package/data/corpus/must-not-flag/ml-methods.txt +1 -0
  15. package/data/corpus/must-not-flag/personal-essay.txt +1 -0
  16. package/data/corpus/must-not-flag/press-release.txt +7 -0
  17. package/data/corpus/must-not-flag/recipe.txt +11 -0
  18. package/data/corpus/must-not-flag/sre-runbook.txt +1 -0
  19. package/data/corpus/must-not-flag/technical-postmortem.txt +1 -0
  20. package/data/corpus/must-not-flag/terse-engineer-note.txt +1 -0
  21. package/data/corpus/must-not-flag-shape/README.md +22 -0
  22. package/data/corpus/must-not-flag-shape/aphorism-list.txt +9 -0
  23. package/data/corpus/must-not-flag-shape/changelog.txt +13 -0
  24. package/data/corpus/must-not-flag-shape/dialogue.txt +19 -0
  25. package/data/corpus/must-not-flag-shape/lyrics.txt +15 -0
  26. package/data/corpus/must-not-flag-shape/poem.txt +8 -0
  27. package/data/corpus/must-not-flag-shape/sms-transcript.txt +15 -0
  28. package/data/corpus/performed-register/README.md +38 -0
  29. package/data/corpus/performed-register/judgment/detection-fragile.txt +1 -0
  30. package/data/corpus/performed-register/judgment/draft-cheap-signal.txt +1 -0
  31. package/data/corpus/performed-register/judgment/ear-chiasmus.txt +1 -0
  32. package/data/corpus/performed-register/judgment/fight-against-tagline.txt +1 -0
  33. package/data/corpus/performed-register/judgment/fine-beat.txt +1 -0
  34. package/data/corpus/performed-register/judgment/glow-finishing.txt +1 -0
  35. package/data/corpus/performed-register/judgment/jargon-compression.txt +1 -0
  36. package/data/corpus/performed-register/judgment/not-perfect-honest.txt +1 -0
  37. package/data/corpus/performed-register/judgment/punctuation-convict.txt +1 -0
  38. package/data/corpus/performed-register/judgment/recipe-ingredients.txt +1 -0
  39. package/data/corpus/performed-register/judgment/replay-lands.txt +1 -0
  40. package/data/corpus/performed-register/judgment/rhymes-with.txt +1 -0
  41. package/data/corpus/performed-register/judgment/rhythm-prints.txt +1 -0
  42. package/data/corpus/performed-register/judgment/same-leak.txt +1 -0
  43. package/data/corpus/performed-register/judgment/tools-work.txt +1 -0
  44. package/data/corpus/performed-register/judgment/tuning-gradients.txt +1 -0
  45. package/data/corpus/performed-register/judgment/verdict-arithmetic.txt +1 -0
  46. package/data/corpus/performed-register/judgment/whole-product.txt +1 -0
  47. package/data/corpus/performed-register/judgment/words-cheap.txt +1 -0
  48. package/data/corpus/performed-register/mechanical/argue-with-artifact.txt +1 -0
  49. package/data/corpus/performed-register/mechanical/bill-lands.txt +1 -0
  50. package/data/corpus/performed-register/mechanical/billed-to-reader.txt +1 -0
  51. package/data/corpus/performed-register/mechanical/economics-brutal.txt +1 -0
  52. package/data/corpus/performed-register/mechanical/has-receipts.txt +1 -0
  53. package/data/corpus/performed-register/mechanical/hired-adversary.txt +1 -0
  54. package/data/corpus/performed-register/mechanical/hyperbole-universal.txt +1 -0
  55. package/data/corpus/performed-register/mechanical/metaphor-sender-name.txt +1 -0
  56. package/data/corpus/performed-register/mechanical/minding-own-business.txt +1 -0
  57. package/data/corpus/performed-register/mechanical/on-the-tin.txt +1 -0
  58. package/data/corpus/performed-register/mechanical/opens-the-hood.txt +1 -0
  59. package/data/corpus/performed-register/mechanical/turns-out-payoff.txt +1 -0
  60. package/data/corpus/performed-register/mechanical/vibe-check.txt +1 -0
  61. package/data/corpus/performed-register/mechanical/vibe-isnt-a-vibe.txt +1 -0
  62. package/data/corpus/performed-register/mechanical/vibe-number-attached.txt +1 -0
  63. package/data/corpus/performed-register/mechanical/where-slop-lives.txt +1 -0
  64. package/data/learned-log.md +339 -0
  65. package/data/learned.json +128 -0
  66. package/data/patterns.json +2298 -0
  67. package/package.json +54 -0
  68. package/references/copy-desk.md +87 -0
  69. package/references/evidence.md +382 -0
  70. package/references/overcorrection.md +77 -0
  71. package/references/platforms.md +102 -0
  72. package/references/readalong.md +118 -0
  73. package/references/rewrite-moves.md +177 -0
  74. package/references/tells.md +190 -0
  75. package/scripts/calibrate.py +274 -0
  76. package/scripts/learn.py +1588 -0
  77. package/scripts/predictability.py +227 -0
  78. package/scripts/rerank.py +150 -0
  79. package/scripts/safeio.py +146 -0
  80. package/scripts/slopscore.py +1352 -0
  81. 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.