zero-slop 2.5.8 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -133
- package/SKILL.md +205 -55
- package/data/corpus/must-flag/adjective-inflation.md +4 -0
- package/data/corpus/must-flag/dangling-thin.md +15 -0
- package/data/corpus/must-flag/manifest.json +78 -0
- package/data/corpus/must-flag/mic-drop.md +4 -0
- package/data/corpus/must-flag/monument-negation.md +4 -0
- package/data/corpus/must-flag/referent-cycling.md +4 -0
- package/data/corpus/performed-register/README.md +14 -4
- package/data/corpus/performed-register/judgment/bare-subject-swap.txt +1 -0
- package/data/corpus/performed-register/mechanical/candor-detail.txt +1 -0
- package/data/corpus/performed-register/mechanical/isocolon-adapt.txt +1 -0
- package/data/corpus/performed-register/mechanical/no-x-had-to.txt +1 -0
- package/data/corpus/performed-register/mechanical/this-is-what-looks-like.txt +1 -0
- package/data/learned-log.md +53 -0
- package/data/learned.json +70 -0
- package/data/patterns.json +29 -2
- package/package.json +1 -1
- package/references/copy-desk.md +6 -4
- package/references/eval.md +250 -0
- package/references/evidence.md +22 -0
- package/references/fresh-eyes.md +62 -0
- package/references/overcorrection.md +5 -0
- package/references/readalong.md +22 -3
- package/references/tells.md +32 -7
- package/scripts/register.py +781 -0
- package/scripts/slopscore.py +313 -19
- /package/data/corpus/performed-register/{judgment → mechanical}/verdict-arithmetic.txt +0 -0
package/data/learned-log.md
CHANGED
|
@@ -337,3 +337,56 @@ example that motivated it.
|
|
|
337
337
|
penalty. Six community tells added, `--explain` and `--json --gate` repaired,
|
|
338
338
|
`--dna` added, a ReDoS and two quadratics removed, and user prose stopped
|
|
339
339
|
reaching git-tracked files.
|
|
340
|
+
- 2026-08-26 — v2.5.9 incumbent audit. Added three precision-scoped shared
|
|
341
|
+
patterns from `conorbronsdon/avoid-ai-writing@40328bd`: noun-anchored
|
|
342
|
+
lingering-attention framing, generic social endorsement closers, and
|
|
343
|
+
asterisked chat-roleplay actions. Literal return-to-an-idea clauses with a
|
|
344
|
+
reason, ordinary instructional verbs, and ordinary italics stay silent.
|
|
345
|
+
Expanded the existing AI-tool residue rule to cover tracker parameters from
|
|
346
|
+
Claude, Copilot, Gemini, Perplexity, and Grok. Added mixed-script and
|
|
347
|
+
zero-width normalization, exact protection for
|
|
348
|
+
code/front matter/blockquotes/tables/inline identifiers/paths/heading levels,
|
|
349
|
+
and a weak long-form low-word-variety check. The latter was the only new
|
|
350
|
+
stylometric feature to clear the incumbent's 1,654-paragraph corpus with
|
|
351
|
+
useful lift (20/779 machine paragraphs, 1/875 human; 22.46x). Function-word
|
|
352
|
+
entropy, punctuation uniformity, and cross-paragraph rhythm were tested but
|
|
353
|
+
did not fire on the 38-item editorial panel; they remain unshipped. Frozen
|
|
354
|
+
editorial metrics were unchanged, 12/12 known-human files stayed below the
|
|
355
|
+
gate, and the adversarial fixtures moved from missed to caught.
|
|
356
|
+
- 2026-08-26 — v2.5.10 unmarked-antithesis gap. A 209-word draft with four
|
|
357
|
+
antithesis pairs, one per paragraph, scored 13.0/100 "clear" with zero flagged
|
|
358
|
+
phrases. Root cause: all 17 `contrast` patterns were anchored on a literal
|
|
359
|
+
negation token (`not`, `n't`, `never`, `won't`), so the same figure with no
|
|
360
|
+
marker was unreachable, and the pairs' short-then-long cadence *raised*
|
|
361
|
+
burstiness from 0.332 to 0.527 — the tell paid off the channel built to catch
|
|
362
|
+
machine cadence, the failure mode already documented for broetry. Added three
|
|
363
|
+
patterns and widened one: `isocolon-ditransitive` (a give-you frame whose verb
|
|
364
|
+
repeats across a sentence break), `this-is-what-looks-like`,
|
|
365
|
+
`no-x-had-to`, and eight nouns on `performed-candor` so "Here's the detail
|
|
366
|
+
that matters" is caught. The draft moved 13.0 → 59.0.
|
|
367
|
+
`isocolon-ditransitive` is the first pattern to reach a figure rather than a
|
|
368
|
+
phrase; its safety property is that the backreference sits on the **verb**,
|
|
369
|
+
which anaphora never repeats ("dedicate / consecrate / hallow"). Three
|
|
370
|
+
frame-level loosenings were measured firing on `gettysburg.txt`,
|
|
371
|
+
`federalist.txt`, and `esl-engineer-email.txt` and were rejected;
|
|
372
|
+
`Detector.test_isocolon_rule_turns_on_verb_identity` pins that. All 114 frozen
|
|
373
|
+
document scores were unchanged, 18/18 known-human controls stayed below the
|
|
374
|
+
gate, and blind-panel accuracy held at 0.8421. These are the file's first
|
|
375
|
+
patterns to carry `hints`, which left throughput higher than the baseline.
|
|
376
|
+
`judgment/verdict-arithmetic.txt` graduated to `mechanical/` — the first span
|
|
377
|
+
to move from "no regex gates this safely" to caught. Bare subject swap
|
|
378
|
+
("Llama is open-weights. Dolma releases the data.") stays unreachable and was
|
|
379
|
+
added as `judgment/bare-subject-swap.txt`; SKILL.md now makes the
|
|
380
|
+
performed-register pass mandatory and gives it a reported count, because a
|
|
381
|
+
clean scorer had been licensing the assistant to skip it entirely.
|
|
382
|
+
|
|
383
|
+
- 2026-08-26 — incumbent completeness follow-up. Added four narrowly bounded
|
|
384
|
+
phrase families found in `conorbronsdon/avoid-ai-writing@40328bd`: leaked
|
|
385
|
+
reasoning narration, unsupported novelty formulas, generic emotional
|
|
386
|
+
reactions, and answer-restatement loops. Each rule names the full formula;
|
|
387
|
+
ordinary step-by-step instructions, literal staffing statements, explained
|
|
388
|
+
surprise, and direct answers remain silent. The accompanying AI review now
|
|
389
|
+
checks six context-dependent problems that are unsafe to infer from a phrase
|
|
390
|
+
alone: paragraph-order dependence, unsupported novelty, self-labelled
|
|
391
|
+
significance, moral-adjective category errors, recap-flattery, and
|
|
392
|
+
wall-of-text replies.
|
package/data/learned.json
CHANGED
|
@@ -120,6 +120,76 @@
|
|
|
120
120
|
"first_seen": "2026-08-04",
|
|
121
121
|
"last_confirmed": "2026-08-04",
|
|
122
122
|
"source": "community-taxonomy"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"name": "lingering-attention",
|
|
126
|
+
"cat": "performed",
|
|
127
|
+
"rx": "\\b(?:the|that|this)\\s+(?:one\\s+)?(?:line|quote|bit|part|idea|point|framing|comment|thing|phrase)\\s+(?:that\\s+)?i\\s+keep\\s+(?:coming\\s+back\\s+to|thinking\\s+about)\\b|\\bi\\s+can(?:'|’)?t\\s+stop\\s+thinking\\s+about\\b|\\b(?:has|have|had|been|be)\\s+(?:been\\s+)?rattling\\s+around\\s+(?:in\\s+)?my\\s+(?:head|brain)\\b|\\bi(?:'|’)?ve\\s+been\\s+chewing\\s+on\\s+(?:this|that)\\b",
|
|
128
|
+
"hints": ["i keep", "i can't", "i can’t", "rattling", "been chewing"],
|
|
129
|
+
"w": 3.5,
|
|
130
|
+
"first_seen": "2026-08-26",
|
|
131
|
+
"last_confirmed": "2026-08-26",
|
|
132
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"name": "social-endorsement-closer",
|
|
136
|
+
"cat": "linkedin",
|
|
137
|
+
"rx": "\\bthis\\s+one(?:'|’)?s?\\s+(?:is\\s+)?(?:well\\s+|really\\s+|definitely\\s+)?worth\\s+(?:your\\s+time|the\\s+read|a\\s+read|reading|watching|a\\s+listen|a\\s+watch|a\\s+look)\\b|\\bdo\\s+yourself\\s+a\\s+favou?r\\s+and\\s+(?:read|watch|check\\s+out)\\s+(?:this|it)\\b|\\byou\\s+(?:really\\s+)?(?:won(?:'|’)?t|do(?:n(?:'|’)?t|\\s+not)|will\\s+not)\\s+want\\s+to\\s+miss\\s+this(?:\\s+one)?\\s*(?:[:.!?]|$)|\\bdo(?:n(?:'|’)?t|\\s+not)\\s+sleep\\s+on\\s+this(?:\\s+one)?\\b",
|
|
138
|
+
"hints": ["worth", "favor", "favour", "miss this", "sleep on"],
|
|
139
|
+
"w": 4,
|
|
140
|
+
"first_seen": "2026-08-26",
|
|
141
|
+
"last_confirmed": "2026-08-26",
|
|
142
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"name": "chat-roleplay-action",
|
|
146
|
+
"cat": "artifact",
|
|
147
|
+
"rx": "(?:^|[^*])\\*(?:nods?|sighs?|laughs?|smiles?|frowns?|shrugs?|grins?|winks?|chuckles?|gasps?|pauses?|thinks?|wonders?|whispers?|shouts?|gestures?|raises?|leans?|turns?|looks?|glances?|smirks?|blinks?|nodding|sighing|laughing|smiling|thinking|gesturing)\\b[^*\\n]{0,70}\\*(?:$|[^*])",
|
|
148
|
+
"hints": ["*"],
|
|
149
|
+
"w": 8,
|
|
150
|
+
"first_seen": "2026-08-26",
|
|
151
|
+
"last_confirmed": "2026-08-26",
|
|
152
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "reasoning-artifact",
|
|
156
|
+
"cat": "artifact",
|
|
157
|
+
"rx": "\\b(?:let me think (?:this through|step by step)|here(?:'|’)s my thought process|working through this logically|to approach this systematically)\\b",
|
|
158
|
+
"hints": ["let me think", "thought process", "working through", "approach this systematically"],
|
|
159
|
+
"w": 6,
|
|
160
|
+
"first_seen": "2026-08-26",
|
|
161
|
+
"last_confirmed": "2026-08-26",
|
|
162
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"name": "novelty-inflation",
|
|
166
|
+
"cat": "rhetorical",
|
|
167
|
+
"rx": "\\b(?:the (?:failure mode|problem|insight) nobody(?:'|’)?s? (?:is )?(?:naming|talking about)|what nobody tells you|the insight everyone(?:'|’)?s? missing)\\b",
|
|
168
|
+
"hints": ["nobody", "everyone"],
|
|
169
|
+
"w": 4,
|
|
170
|
+
"first_seen": "2026-08-26",
|
|
171
|
+
"last_confirmed": "2026-08-26",
|
|
172
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "emotional-flatline",
|
|
176
|
+
"cat": "performed",
|
|
177
|
+
"rx": "\\b(?:what surprised me most|i was fascinated to (?:discover|learn)|what struck me was|i was excited to learn|the most interesting part)\\b",
|
|
178
|
+
"hints": ["surprised", "fascinated", "struck me", "excited", "interesting"],
|
|
179
|
+
"w": 3,
|
|
180
|
+
"first_seen": "2026-08-26",
|
|
181
|
+
"last_confirmed": "2026-08-26",
|
|
182
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "acknowledgment-loop",
|
|
186
|
+
"cat": "artifact",
|
|
187
|
+
"rx": "\\b(?:to answer your question|you(?:'|’)re asking (?:about|whether)|the question of whether)\\b",
|
|
188
|
+
"hints": ["answer your question", "asking", "question of whether"],
|
|
189
|
+
"w": 3,
|
|
190
|
+
"first_seen": "2026-08-26",
|
|
191
|
+
"last_confirmed": "2026-08-26",
|
|
192
|
+
"source": "conorbronsdon/avoid-ai-writing@40328bd"
|
|
123
193
|
}
|
|
124
194
|
],
|
|
125
195
|
"lexicon": {
|
package/data/patterns.json
CHANGED
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
{
|
|
158
158
|
"name": "performed-candor",
|
|
159
159
|
"cat": "performed",
|
|
160
|
-
"rx": "\\b(?:let(?:(?:'|\u2019)s| us) be (?:honest|real|clear)|here(?:(?:'|\u2019)s| is) the (?:thing|truth|kicker|deal|catch)|i(?:'|\u2019)ll be honest|the (?:uncomfortable|hard) truth is|truth be told|no fluff|real talk|not gonna lie|if i(?:'|\u2019)m being honest|let me be (?:crystal |perfectly )?clear)\\b",
|
|
160
|
+
"rx": "\\b(?:let(?:(?:'|\u2019)s| us) be (?:honest|real|clear)|here(?:(?:'|\u2019)s| is) the (?:thing|truth|kicker|deal|catch|detail|part|wrinkle|nuance|upshot|punchline|rub)|i(?:'|\u2019)ll be honest|the (?:uncomfortable|hard) truth is|truth be told|no fluff|real talk|not gonna lie|if i(?:'|\u2019)m being honest|let me be (?:crystal |perfectly )?clear)\\b",
|
|
161
161
|
"w": 4,
|
|
162
162
|
"first_seen": "2026-08-03",
|
|
163
163
|
"last_confirmed": "2026-08-15"
|
|
@@ -523,6 +523,33 @@
|
|
|
523
523
|
"first_seen": "2026-08-14",
|
|
524
524
|
"last_confirmed": "2026-08-14"
|
|
525
525
|
},
|
|
526
|
+
{
|
|
527
|
+
"name": "isocolon-ditransitive",
|
|
528
|
+
"cat": "contrast",
|
|
529
|
+
"rx": "\\b(let|give|hand|show|tell|offer|teach|buy|cost|earn|save|bring|send|win)s? you\\b[^.!?]{0,70}[.!?]\\s+[^.!?]{0,70}\\b\\1s? you\\b",
|
|
530
|
+
"hints": ["you"],
|
|
531
|
+
"w": 4.5,
|
|
532
|
+
"first_seen": "2026-08-26",
|
|
533
|
+
"last_confirmed": "2026-08-26"
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
"name": "this-is-what-looks-like",
|
|
537
|
+
"cat": "contrast",
|
|
538
|
+
"rx": "(?:^|[.!?]\\s+|\\n)(?:this|that) is what [\\w '\u2019-]{2,40} looks like\\b",
|
|
539
|
+
"hints": ["looks like"],
|
|
540
|
+
"w": 4,
|
|
541
|
+
"first_seen": "2026-08-26",
|
|
542
|
+
"last_confirmed": "2026-08-26"
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"name": "no-x-had-to",
|
|
546
|
+
"cat": "contrast",
|
|
547
|
+
"rx": "(?:^|[.!?]\\s+|\\n)No [\\w '\u2019-]{2,40} (?:had to|needed to|has to|ever) [\\w '\u2019-]{2,60}\\.\\s+[\\w '\u2019-]{2,40} (?:did|made|chose|decided|built|released|shipped|published)\\b",
|
|
548
|
+
"hints": ["had to", "needed to", "has to", "ever"],
|
|
549
|
+
"w": 4,
|
|
550
|
+
"first_seen": "2026-08-26",
|
|
551
|
+
"last_confirmed": "2026-08-26"
|
|
552
|
+
},
|
|
526
553
|
{
|
|
527
554
|
"name": "not-the-but-the",
|
|
528
555
|
"cat": "contrast",
|
|
@@ -1709,7 +1736,7 @@
|
|
|
1709
1736
|
{
|
|
1710
1737
|
"name": "chatgpt-artifact",
|
|
1711
1738
|
"cat": "artifact",
|
|
1712
|
-
"rx": "\\boaicite\\b|\\boai_citation\\b|\\bciteturn\\d|\\butm_source=(?:chatgpt(?:\\.com)?|openai)\\b
|
|
1739
|
+
"rx": "\\boaicite\\b|\\boai_citation\\b|\\bciteturn\\d|\\butm_source=(?:chatgpt(?:\\.com)?|openai(?:\\.com)?|copilot(?:\\.com)?|claude\\.ai|perplexity\\.ai|gemini\\.google\\.com)\\b|\\breferrer=grok\\.com\\b|:?contentReference\\[(?:oaicite:)?|\\battributableIndex\\b|\\[cite: ?\\d|\\bturn\\d+(?:search|news|image|view)\\d+\\b|\\[span_\\d|\\(start_span\\)|\\bgrok_(?:card|render)|\\bppl-ai-file-upload\\b|\\battached_file\\b",
|
|
1713
1740
|
"w": 10,
|
|
1714
1741
|
"first_seen": "2026-08-14",
|
|
1715
1742
|
"last_confirmed": "2026-08-22"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zero-slop",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "An Agent Skill that scores AI-sounding prose 0-100 locally and rewrites it without losing a fact. Runs inside Claude Code, Codex, Cursor, Warp, Zed and other SKILL.md agents. Offline, zero dependencies, MIT.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skill",
|
package/references/copy-desk.md
CHANGED
|
@@ -69,7 +69,7 @@ known voice signals, and immutable facts when available. Then use this brief:
|
|
|
69
69
|
> terse note only for unresolved ambiguities or unusual forms deliberately kept.
|
|
70
70
|
|
|
71
71
|
Apply the corrected version to the deliverable, then send that exact artifact
|
|
72
|
-
through the
|
|
72
|
+
through the read-aloud pass in `references/readalong.md`. Verify the
|
|
73
73
|
artifact returned by the read-aloud editor:
|
|
74
74
|
|
|
75
75
|
1. Rerun the heuristic surface scorer and scripted fidelity check.
|
|
@@ -77,11 +77,13 @@ artifact returned by the read-aloud editor:
|
|
|
77
77
|
claims, qualifiers, intended voice, regional spelling, format, and non-prose
|
|
78
78
|
structure. The script cannot detect every semantic or stylistic change.
|
|
79
79
|
3. If any check or comparison requires a repair, apply it, send the repaired
|
|
80
|
-
text through the copy desk and
|
|
80
|
+
text through the copy desk and read-aloud pass again, and repeat all
|
|
81
81
|
final checks.
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
After verification, send that exact text through the finalizer in
|
|
84
|
+
`references/fresh-eyes.md`. Stop only when the same artifact clears the copy desk,
|
|
85
|
+
read-aloud pass, semantic and format review, scorer, fidelity check, and receives a
|
|
86
|
+
no-change fresh-eyes approval. Limit this repair loop to
|
|
85
87
|
three rounds. If an issue still cannot be resolved without guessing, return the best
|
|
86
88
|
source-preserving version that completed both editorial passes, flag the unresolved
|
|
87
89
|
span and failed check plainly, and do not describe the fallback as fully verified.
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Zero Slop eval
|
|
2
|
+
|
|
3
|
+
Answer every check with pass or fail. Where a check asks for a count, write the
|
|
4
|
+
number down; a count is evidence, and a missing count means the pass did not run.
|
|
5
|
+
|
|
6
|
+
Any fail sends the text back through the copy desk and read-aloud pass, after which
|
|
7
|
+
every check here runs again on the new text. Limit that loop to three rounds.
|
|
8
|
+
|
|
9
|
+
**This file exists because the meter cannot see most of what is on it.** The scorer
|
|
10
|
+
reads the lexically anchored subset: listed phrases, sentence-length variance,
|
|
11
|
+
readability, formatting density. Everything in section A is a property of the whole
|
|
12
|
+
document rather than of any span, so no pattern can reach it. A clear score is a
|
|
13
|
+
reason to work through section A carefully, never permission to skip it.
|
|
14
|
+
|
|
15
|
+
The ratchet: every miss an audit, a competitor, or a reader catches becomes a
|
|
16
|
+
deterministic detector or a `data/corpus/must-flag/` fixture in the same change.
|
|
17
|
+
A note is not a fix; `register.py --recall` proves each recorded miss still
|
|
18
|
+
gets caught, and the release suite runs it.
|
|
19
|
+
|
|
20
|
+
Families here are drawn from the Zero Slop tell catalogue, from Wikipedia's
|
|
21
|
+
[Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)
|
|
22
|
+
maintained by WikiProject AI Cleanup, and from the checks in petergyang/no-ai-slop
|
|
23
|
+
and blader/humanizer. Every check that needs one carries a worked before and after,
|
|
24
|
+
because an abstract instruction gets a partial answer.
|
|
25
|
+
|
|
26
|
+
Roles 7 and 8 own this file. Role 8 answers section F. A role that generated text
|
|
27
|
+
never grades that text.
|
|
28
|
+
|
|
29
|
+
Scoring this file is meaningless: it quotes tells as examples, so the meter flags its
|
|
30
|
+
own catalogue. That is the documented exception for material quoted as an example, and
|
|
31
|
+
it is a good candidate for `data/corpus/must-not-flag/`.
|
|
32
|
+
|
|
33
|
+
## A. Register, which the meter cannot reach
|
|
34
|
+
|
|
35
|
+
Run every item on every draft, including one that scored clear. Record the counts in
|
|
36
|
+
the report even when they are zero.
|
|
37
|
+
|
|
38
|
+
1. **Antithesis pairs. Count: ___** Two balanced statements where the second lands a
|
|
39
|
+
twist. Count all four shapes, and note that most carry no negation marker at all:
|
|
40
|
+
marked ("Not perfect. Honest."), bare subject swap ("Llama is open-weights. Dolma
|
|
41
|
+
releases the data."), isocolon with the arguments swapped, and unmarked reversal.
|
|
42
|
+
Budget is one per piece. Two is a finding. Three or more under 500 words means the
|
|
43
|
+
register failed whatever the score said.
|
|
44
|
+
2. **Binary contrast, the subtractive form. Count per 1,000 words: ___** The
|
|
45
|
+
corrective appositive: "X, not Y." "A rather than B." Each instance is usually
|
|
46
|
+
good, careful writing, which is why the meter has no rule for it. The defect is
|
|
47
|
+
density. Above roughly 4 per 1,000 words, the document has one rhetorical move
|
|
48
|
+
instead of a voice.
|
|
49
|
+
3. **Significance scaffolding. Count: ___** A sentence announcing that a point
|
|
50
|
+
matters instead of delivering it. Budget is zero.
|
|
51
|
+
4. **Negative definition.** Does the draft repeatedly say what a thing is not before
|
|
52
|
+
saying what it is? One is a useful disambiguation, a habit is a tic. Stacked
|
|
53
|
+
negation counts: "No file monitoring, no browser hooks, no reaching into where you
|
|
54
|
+
publish" becomes "Zero Slop reads only what you hand it."
|
|
55
|
+
5. **Comma-series density. Count per 1,000 words: ___** Enumerations of three or more
|
|
56
|
+
noun phrases. Technical writing legitimately enumerates, so this is a reading
|
|
57
|
+
judgment rather than a threshold: are the lists carrying information, or has the
|
|
58
|
+
sentence shape become the default? Convert the longest to real lists.
|
|
59
|
+
6. **Robotic symmetry.** Repeated sentence shapes, identical paragraph geometry, stacked
|
|
60
|
+
punchy fragments, uniform paragraph length. Check table columns too: seven of eight
|
|
61
|
+
cells opening with a verb and a comma list of abstract nouns is the same defect
|
|
62
|
+
inside a grid.
|
|
63
|
+
7. **Colon reveals.** A noun phrase, a colon, then a lowercase dramatic payoff.
|
|
64
|
+
Colons are for lists, labels, and quotations.
|
|
65
|
+
8. **Throat-clearing openers.** "Here's the thing." "Let me be clear." "To be
|
|
66
|
+
honest." Cut and state the point.
|
|
67
|
+
9. **Faux-insight setups.** "What most people get wrong." "The part everyone misses."
|
|
68
|
+
These flatter the writer as sole expert. Make the claim stand alone.
|
|
69
|
+
10. **Rhetorical setups.** "What if I told you." "Think about it:" Self-answered
|
|
70
|
+
question and answer pairs.
|
|
71
|
+
11. **Fake-profound kickers.** Delete the closing aphorism rather than rewriting it
|
|
72
|
+
into a better metaphor. End on the clearest concrete sentence already present.
|
|
73
|
+
12. **Summary-recap endings.** The reader was just there.
|
|
74
|
+
13. **Theatrical framing and extended conceit. Count: ___** An ordinary process
|
|
75
|
+
dressed as a courtroom, a heist, or a diagnosis. Budget is one metaphor.
|
|
76
|
+
14. **Superficial analysis.** Trailing participial clauses that pretend to explain
|
|
77
|
+
significance: highlighting, underscoring, reflecting, showcasing.
|
|
78
|
+
15. **Importance puffery.** "Marks a pivotal moment." "Stands as a testament." State
|
|
79
|
+
the fact and let the reader weigh it.
|
|
80
|
+
16. **Interpretive metadiscourse.** Lines that step outside the subject to tell the
|
|
81
|
+
reader what to notice or how much weight to give it.
|
|
82
|
+
17. **Weasel attribution.** "Studies show." "Experts agree." Name the source, or flag
|
|
83
|
+
it for the writer. Never invent one.
|
|
84
|
+
18. **Adjective inflation and hollow intensifiers.** "a real improvement", "actual
|
|
85
|
+
results", "a genuine breakthrough", "true value". Delete the adjective; the noun
|
|
86
|
+
carries the claim or it does not. Distinct from empty adverbs (next): adverbs pad
|
|
87
|
+
the verb, these inflate a noun, and a span that is neither belongs to importance
|
|
88
|
+
puffery. Measured by the meter; the reading pass owns only the shapes the noun
|
|
89
|
+
list misses.
|
|
90
|
+
19. **Empty adverbs and filler frames.** Adverbs: "just", "simply", "actually",
|
|
91
|
+
"literally", "honestly", "fundamentally", "inherently", "inevitably". Frames:
|
|
92
|
+
"the reality is", "the truth is", "in terms of", "with regard to", "going
|
|
93
|
+
forward", "in this article". Cut each one that adds nothing; keep the ones
|
|
94
|
+
carrying real emphasis, uncertainty, contrast, or the writer's spoken rhythm.
|
|
95
|
+
Distinct from adjective inflation (previous): these modify verbs and clauses.
|
|
96
|
+
The meter does not flag these globally because they are ordinary in honest
|
|
97
|
+
writing, so this is a judgment per instance. "just", "simply", "actually", "literally",
|
|
98
|
+
"honestly", "fundamentally", "inherently", "inevitably". Cut each one that adds
|
|
99
|
+
nothing; keep the ones carrying real emphasis, uncertainty, contrast, or the
|
|
100
|
+
writer's spoken rhythm. This is a judgment per instance, which is why the meter
|
|
101
|
+
does not flag these words globally: they are ordinary in honest writing.
|
|
102
|
+
20. **Nominalization and weak verb phrases.** "Made a decision" for "decided",
|
|
103
|
+
"needs removal from" for "you cut from". De-nominalize, and prefer a direct verb
|
|
104
|
+
with an actor.
|
|
105
|
+
21. **Fake-strong verbs.** Prefer "is" and "has" where they are clearer.
|
|
106
|
+
"The app serves as a centralized hub for sponsor management" becomes "The app
|
|
107
|
+
tracks sponsors, drafts, due dates and approvals in one place." Monument verbs
|
|
108
|
+
count too: "stands on", "sits atop", "marks a".
|
|
109
|
+
22. **Reasoning-chain artifacts.** Working-out left in the answer: "Let me think
|
|
110
|
+
through this", "First I'll consider", a restated plan before the plan. The reader
|
|
111
|
+
wants the conclusion, not the deliberation.
|
|
112
|
+
23. **Emotional flatline.** Uniform affect across a piece that should vary. Nothing
|
|
113
|
+
irritates the writer, nothing surprises them, nothing costs anything. Real writing
|
|
114
|
+
has range.
|
|
115
|
+
24. **False concession.** "While X has merit, Y" where X was never a live position
|
|
116
|
+
and nothing follows from conceding it. Keep a real counterargument; cut a straw one.
|
|
117
|
+
25. **Confidence-calibration phrases.** "I'm fairly confident", "with high certainty",
|
|
118
|
+
"to be clear, this is my read". Calibrated hedges are fine when they carry real
|
|
119
|
+
uncertainty; these announce a posture instead.
|
|
120
|
+
26. **Parenthetical hedging.** Qualifiers tucked in brackets so the sentence can claim
|
|
121
|
+
more than it supports: "The fix works (in most cases) for every driver."
|
|
122
|
+
27. **Engagement hooks and endorsement closers.** "You won't believe", "Sound
|
|
123
|
+
familiar?", "Give it a try and let me know", "Trusted by teams everywhere".
|
|
124
|
+
Infomercial register, wherever it appears.
|
|
125
|
+
28. **Lingering-attention claims.** "This will stay with you", "you'll be thinking
|
|
126
|
+
about this for weeks". The writer cannot know the reader's future.
|
|
127
|
+
29. **Generic positive endings.** A closing paragraph that resolves into optimism
|
|
128
|
+
without a concrete next step: "The future looks bright for teams willing to adapt."
|
|
129
|
+
30. **Synonym cycling.** If the clear word is right, repeat it. Do not rotate terms
|
|
130
|
+
for style. "The agent reviews the draft. The assistant scores the piece. The tool
|
|
131
|
+
suggests fixes" becomes "The agent reviews the draft, scores it, and suggests
|
|
132
|
+
fixes." Check every referent, not the first one you notice: a role table is where
|
|
133
|
+
a second and third name usually appear.
|
|
134
|
+
|
|
135
|
+
## B. Substance
|
|
136
|
+
|
|
137
|
+
31. **Removal test.** Does every paragraph lose something real when deleted?
|
|
138
|
+
32. **Relevance test.** Does every paragraph serve the brief, audience, and argument?
|
|
139
|
+
33. **Front-loading, applied selectively.** Conclusions arrive early where that helps
|
|
140
|
+
the reader, without forcing every section into the same point-then-detail shape.
|
|
141
|
+
34. **Paragraph-order dependence.** Could several prose paragraphs be shuffled without
|
|
142
|
+
harming the argument? Reference material, FAQs, and independent findings are
|
|
143
|
+
exempt.
|
|
144
|
+
35. **Unsupported novelty.** "Nobody is naming this" needs an actual comparison.
|
|
145
|
+
36. **Self-labeling significance.** "This matters" needs a consequence.
|
|
146
|
+
37. **Moral-adjective category error.** Calling a technical choice brave or honest
|
|
147
|
+
needs a moral agent.
|
|
148
|
+
38. **Portability test.** Could any sentence move unchanged to another company,
|
|
149
|
+
product, or person? Cut it or make it specific.
|
|
150
|
+
39. **Statistics cohesion.** Does each test or dataset get its own paragraph opening
|
|
151
|
+
with what it checks in plain words, before the numbers?
|
|
152
|
+
40. **Cross-references resolve.** Every named artefact, panel, dataset, or prior
|
|
153
|
+
result is defined on first use or linked to where it lives. "The prior 84.2%
|
|
154
|
+
result on the 38-item editorial panel" tells a reader nothing if neither the
|
|
155
|
+
panel nor the packet is named anywhere.
|
|
156
|
+
41. **Internal pointers name their target.** "In the references", "see the docs",
|
|
157
|
+
"as documented elsewhere" point at nothing. Name the file and the section, and
|
|
158
|
+
link it, the way an external citation would be named.
|
|
159
|
+
42. **Numeric precision matches the measurement.** Five significant figures on a
|
|
160
|
+
single run of a single machine claims a stability the method cannot support.
|
|
161
|
+
Round to what the measurement earns, or state the spread.
|
|
162
|
+
43. **Hollow spans flagged, not filled.** Prose that makes no claim was flagged for
|
|
163
|
+
the writer rather than reworded into something that sounds like one.
|
|
164
|
+
44. **Sycophantic tone.** Generic validation of the reader that carries no content:
|
|
165
|
+
"Great question", "Excellent point", "You're absolutely right". It echoes nothing
|
|
166
|
+
back, it only rewards. Cut it and start with the answer.
|
|
167
|
+
45. **Recap-flattery.** An opener that echoes the reader's *own work* back at them
|
|
168
|
+
dressed as gratitude, ahead of the point: "Thanks for all the legwork here, the
|
|
169
|
+
migration script and the rollback plan you worked through are what made this
|
|
170
|
+
possible." They already know what they did. A real thank-you is one clause and
|
|
171
|
+
moves on: "Thanks for the legwork, this looks right, one comment below."
|
|
172
|
+
46. **Acknowledgment loops.** Restating the question or the prior section before
|
|
173
|
+
answering it. This echoes the *context*, where recap-flattery echoes their *work*
|
|
174
|
+
and sycophancy echoes *nothing*. Ask what is being echoed; that is what separates
|
|
175
|
+
these three.
|
|
176
|
+
47. **Wall-of-text reply.** Paragraphing that hides a sequence the reader needs. A
|
|
177
|
+
long narrative paragraph is not a wall of text merely because it is long; the tell
|
|
178
|
+
is a buried list of steps or options.
|
|
179
|
+
|
|
180
|
+
## C. Fidelity
|
|
181
|
+
|
|
182
|
+
48. **Scripted check run, not eyeballed.** `slopscore.py --fidelity` exits zero.
|
|
183
|
+
49. **No invented specifics.** No number, name, anecdote, date, or source appeared
|
|
184
|
+
that the author did not supply.
|
|
185
|
+
50. **No invented interior claims.** No stated feeling, motive, or experience the
|
|
186
|
+
author never wrote.
|
|
187
|
+
51. **Qualifiers survive.** Hedges, scope limits, and caveats carry the same strength
|
|
188
|
+
as the source.
|
|
189
|
+
52. **Claims not reframed.** Same names and numbers can still carry a changed
|
|
190
|
+
emphasis or implication. Compare meaning, not tokens.
|
|
191
|
+
53. **Non-prose untouched.** Code, front matter, tables, blockquotes, identifiers,
|
|
192
|
+
paths, and heading hierarchy intact.
|
|
193
|
+
|
|
194
|
+
## D. Voice and readability
|
|
195
|
+
|
|
196
|
+
54. **Expert voice.** A respected practitioner sounds at home: precise terms used
|
|
197
|
+
correctly, authority earned through specifics, no hedging into mush.
|
|
198
|
+
55. **Followability.** A smart first-time reader follows each sentence on the first
|
|
199
|
+
pass. One idea per sentence; every abstraction anchored in the same breath; never
|
|
200
|
+
three or more abstract noun phrases stacked.
|
|
201
|
+
56. **Voice preserved.** Would the writer recognize this as theirs? Distinctive
|
|
202
|
+
vocabulary, cadence, bluntness, humor, uncertainty, and digressions survived.
|
|
203
|
+
57. **Strong sentences left alone.** Nothing was rewritten merely for consistency.
|
|
204
|
+
58. **Active voice with human subjects.** People do the verbs. Passive stays only
|
|
205
|
+
where the actor is unknown, irrelevant, deliberately withheld, or native to the
|
|
206
|
+
genre.
|
|
207
|
+
59. **Proportional cutting.** No compression that stripped character. Density is
|
|
208
|
+
information per word, not fewer words.
|
|
209
|
+
60. **Read aloud.** Would this sound natural read to a sharp colleague?
|
|
210
|
+
61. **No over-correction.** AI slop was not traded for edgy slop: forced hot takes,
|
|
211
|
+
fake first person, performed candor, staccato drama.
|
|
212
|
+
|
|
213
|
+
## E. Form
|
|
214
|
+
|
|
215
|
+
62. **Returned in the format it arrived in.** A .docx comes back a .docx.
|
|
216
|
+
63. **Reader language.** No evaluator or harness vocabulary leaked into the copy:
|
|
217
|
+
candidate, artifact, overlay, gate, scorecard, burstiness.
|
|
218
|
+
64. **Formatting slop.** No emoji headings, decorative bold, or bullets that should be
|
|
219
|
+
prose. Count the headings over one or two sentences: four consecutive H3s each
|
|
220
|
+
wrapping a code block and one line is a section that wants to be one section.
|
|
221
|
+
65. **Em dashes.** None in short copy. One or two in a long draft only where they
|
|
222
|
+
clearly beat a comma, period, or parenthesis.
|
|
223
|
+
66. **Hyphenated modifier stacking.** "AI-powered cloud-native data-driven platform".
|
|
224
|
+
Two stacked compound modifiers in one noun phrase is a tell; keep the hyphens
|
|
225
|
+
grammar requires and cut the rest.
|
|
226
|
+
67. **List-label periods and bare-noun bullets.** Bullets that are fragments ending in
|
|
227
|
+
full stops, or a list of bare noun phrases with no predicate. Either make them
|
|
228
|
+
sentences or make them a real list.
|
|
229
|
+
68. **Numbered-list inflation.** A numbered list where order carries no meaning, or a
|
|
230
|
+
list padded to a round number. Use a bulleted list, or prose.
|
|
231
|
+
69. **Chatbot artifacts.** Citation markup leaks, "Regenerate response", tool URL
|
|
232
|
+
parameters such as utm_source, and any assistant scaffolding left in the copy.
|
|
233
|
+
70. **Attribution accurate.** The report names who did what without guessing which
|
|
234
|
+
model is running, and never implies a Zero Slop service read the draft.
|
|
235
|
+
|
|
236
|
+
## F. Process integrity
|
|
237
|
+
|
|
238
|
+
Role 8 answers this section. It is the check no single-agent eval can make.
|
|
239
|
+
|
|
240
|
+
71. **Roles stayed separate.** The copy desk, read-aloud pass, verification, and
|
|
241
|
+
fresh-eyes review each ran as a distinct pass.
|
|
242
|
+
72. **No self-certification.** No role graded text it generated.
|
|
243
|
+
73. **Counts reported.** Every count in section A appears in the summary, including
|
|
244
|
+
the zeros.
|
|
245
|
+
74. **The exact final text cleared every check.** Not an earlier draft, not a version
|
|
246
|
+
that was repaired afterward.
|
|
247
|
+
75. **Role 8 approved without changes.** If it changed anything, roles 5 through 8
|
|
248
|
+
ran again on the revision.
|
|
249
|
+
76. **Fallbacks named honestly.** If the three-round limit was reached, the report
|
|
250
|
+
says which check failed and does not describe the result as fully verified.
|
package/references/evidence.md
CHANGED
|
@@ -47,6 +47,28 @@ not a deception.
|
|
|
47
47
|
8. **Affect skew.** LLM text is joy-skewed and uniformly positive
|
|
48
48
|
(Muñoz-Ortiz). Counter: widen affect.
|
|
49
49
|
|
|
50
|
+
## Incumbent audit: what transferred and what did not
|
|
51
|
+
|
|
52
|
+
Zero Slop v2.5.9 audited
|
|
53
|
+
[`conorbronsdon/avoid-ai-writing`](https://github.com/conorbronsdon/avoid-ai-writing)
|
|
54
|
+
at commit `40328bd292bc682d46010a6f9ac2cdbf4fb4ceca`. The ideas that survived
|
|
55
|
+
transfer tests were zero-width and mixed-script normalization, exact protection
|
|
56
|
+
for structured document spans, broader AI-tool tracker residue, three narrowly
|
|
57
|
+
defined phrase families, and one conservative long-form word-variety signal.
|
|
58
|
+
On the incumbent's pinned 875-human/779-machine
|
|
59
|
+
paragraph corpus, its low-TTR signal fired on 1 human and 20 machine paragraphs
|
|
60
|
+
(22.46x lift). Zero Slop keeps it weak and corroboration-dependent.
|
|
61
|
+
|
|
62
|
+
Function-word entropy, punctuation-distribution uniformity, and cross-paragraph
|
|
63
|
+
rhythm were also tested. None fired on Zero Slop's 38 consensus-labelled
|
|
64
|
+
editorial passages; on the Beemo paired set they were rare and only directional
|
|
65
|
+
proxies because Beemo labels provenance and editing history, not slop quality.
|
|
66
|
+
They were not promoted. The incumbent's hand-shaped class probabilities were
|
|
67
|
+
also rejected: its documentation correctly says they are not calibrated against
|
|
68
|
+
a labelled corpus, and its own composite reports paragraph ROC-AUC 0.501 and
|
|
69
|
+
document ROC-AUC 0.623. Zero Slop does not turn an uncalibrated writing score
|
|
70
|
+
into an authorship probability.
|
|
71
|
+
|
|
50
72
|
## Why the scorer measures features, not detector verdicts
|
|
51
73
|
|
|
52
74
|
Detectors are brittle: RAID (2405.07940) shows trivial perturbations fool
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# The fresh-eyes finalizer
|
|
2
|
+
|
|
3
|
+
This is the last role in the editing workflow. It receives the exact text that
|
|
4
|
+
already cleared the copy desk, read-aloud editor, and verifier. Its job is to read
|
|
5
|
+
that text as a first-time reader and catch the small but consequential problems an
|
|
6
|
+
editor can stop seeing after repeated passes.
|
|
7
|
+
|
|
8
|
+
Use a new, role-isolated editor when the harness supports agents or subagents.
|
|
9
|
+
Otherwise start a separate pass with no drafting or scoring mindset. Do not ask the
|
|
10
|
+
rewriter to approve its own work.
|
|
11
|
+
|
|
12
|
+
## What to check
|
|
13
|
+
|
|
14
|
+
- **The whole arc.** The opening sets up the real point, sections arrive in a useful
|
|
15
|
+
order, and the ending resolves rather than repeats the piece.
|
|
16
|
+
- **First-use clarity.** Names, pronouns, abbreviations, references, and transitions
|
|
17
|
+
make sense when encountered, without knowledge from the editing process.
|
|
18
|
+
- **Reader effort.** A smart first-time reader can follow the argument once through.
|
|
19
|
+
Unpack only a genuine stumble; do not dilute expert language the audience needs.
|
|
20
|
+
- **Voice continuity.** The same person seems to have written the beginning, middle,
|
|
21
|
+
and end. Restore source-backed warmth or texture lost to over-editing.
|
|
22
|
+
- **Residual process language.** Remove internal labels, scoring talk, evaluation
|
|
23
|
+
jargon, or comments meant for the editor rather than the reader.
|
|
24
|
+
- **Genre and format.** The text looks and sounds native to its destination. Preserve
|
|
25
|
+
all legitimate lists, tables, code, headings, citations, links, and layout.
|
|
26
|
+
- **Last-mile polish.** Correct a safe leftover repetition, vague handoff, awkward
|
|
27
|
+
phrase, or mechanical inconsistency that survived the earlier passes.
|
|
28
|
+
|
|
29
|
+
## Boundaries
|
|
30
|
+
|
|
31
|
+
Preserve every fact, claim, qualifier, name, number, date, link, quotation, source,
|
|
32
|
+
voice signal, regional spelling choice, and protected non-prose element. Do not add
|
|
33
|
+
examples, experiences, certainty, novelty, emotion, or specificity. Do not make a
|
|
34
|
+
substantive rewrite. If the intended correction is uncertain, leave the text alone
|
|
35
|
+
and name the ambiguity.
|
|
36
|
+
|
|
37
|
+
## Finalizer brief
|
|
38
|
+
|
|
39
|
+
> You are the fresh-eyes finalizer. Read the complete verified text as a first-time
|
|
40
|
+
> reader, from title to final line. Apply only safe last-mile polish for overall arc,
|
|
41
|
+
> first-use clarity, reader effort, voice continuity, genre fit, residual process
|
|
42
|
+
> language, repetition, and mechanical consistency. Preserve every fact, claim,
|
|
43
|
+
> qualifier, name, number, date, link, quotation, source, voice signal, regional
|
|
44
|
+
> spelling choice, and non-prose element. Do not add detail, certainty, emotion,
|
|
45
|
+
> novelty, or generic polish. Return the complete text in its original format,
|
|
46
|
+
> followed by exactly one status: `approve without changes`, `changed — rerun final
|
|
47
|
+
> checks`, or `unresolved — needs the writer`.
|
|
48
|
+
|
|
49
|
+
## Closed finalization loop
|
|
50
|
+
|
|
51
|
+
Approval is valid only when the finalizer returns `approve without changes`. If it
|
|
52
|
+
changes even one character, apply the complete revision and rerun, in order:
|
|
53
|
+
|
|
54
|
+
1. the copy desk;
|
|
55
|
+
2. the read-aloud editor;
|
|
56
|
+
3. the verifier, including local and contextual checks; and
|
|
57
|
+
4. this fresh-eyes finalizer.
|
|
58
|
+
|
|
59
|
+
Repeat for at most three rounds. The same exact text must clear all four roles, with
|
|
60
|
+
the fresh-eyes finalizer approving it unchanged. If the remaining issue cannot be
|
|
61
|
+
fixed without guessing, return the best source-preserving text that completed every
|
|
62
|
+
pass, identify the unresolved span, and do not describe it as fully verified.
|
|
@@ -56,6 +56,11 @@ experience — these alone are NOT evidence of AI:
|
|
|
56
56
|
Require corroboration. A paragraph needs multiple independent tells, or a failed
|
|
57
57
|
removal test, before it's slop.
|
|
58
58
|
|
|
59
|
+
This governs lexical flags only. It does not apply to the performed-register
|
|
60
|
+
family: register is a property of the piece, not of a paragraph. Four unmarked
|
|
61
|
+
antithesis pairs across four paragraphs *is* the corroboration — each one is
|
|
62
|
+
locally defensible, and the repetition is the whole finding.
|
|
63
|
+
|
|
59
64
|
## Signs of human writing — preserve on sight
|
|
60
65
|
|
|
61
66
|
When a draft shows these, protect them through the rewrite; deleting them is
|
package/references/readalong.md
CHANGED
|
@@ -6,8 +6,8 @@ listener hears it: from the first line to the last, with each sentence setting u
|
|
|
6
6
|
next. A stumble, cold transition, unclear antecedent, or change of voice can still
|
|
7
7
|
survive a clean score and correct grammar.
|
|
8
8
|
|
|
9
|
-
Run this pass on every deliverable after the copy desk. It is the
|
|
10
|
-
before
|
|
9
|
+
Run this pass on every deliverable after the copy desk. It is the spoken-flow pass
|
|
10
|
+
before verification and the separate fresh-eyes finalizer. Use a dedicated editor with fresh ears
|
|
11
11
|
when the harness supports subagents; otherwise perform a separate, role-isolated pass.
|
|
12
12
|
The editor must fix the actual deliverable and return the corrected artifact in the
|
|
13
13
|
same format. An audit or list of suggestions is not a completed pass.
|
|
@@ -21,17 +21,33 @@ safe correction for:
|
|
|
21
21
|
endings that make a reader stop or back up.
|
|
22
22
|
- **Cold transitions.** Add or repair the hinge when a sentence, paragraph, or
|
|
23
23
|
section arrives without a clear connection to what came before.
|
|
24
|
+
- **Paragraph-order dependence.** If adjacent prose paragraphs can trade places
|
|
25
|
+
without changing the argument, rebuild the progression. Do not impose a story
|
|
26
|
+
arc on FAQs, reference entries, independent findings, or genuine lists.
|
|
24
27
|
- **Performed candor.** Remove announcements of honesty such as "honestly" or "to be
|
|
25
28
|
fair" when the sentence can simply make its point.
|
|
26
29
|
- **Reflexive agreement.** Remove automatic praise or agreement that appears before
|
|
27
30
|
the substance has been checked. Let the facts determine whether the draft agrees,
|
|
28
31
|
qualifies, or disagrees.
|
|
32
|
+
- **Recap-flattery.** In a reply, cut praise and a needless restatement of the
|
|
33
|
+
question before the answer. Keep setup that materially changes the answer.
|
|
34
|
+
- **Wall-of-text reply.** Break an answer where the reader must change task,
|
|
35
|
+
decision, time, or subject. Do not split a coherent narrative paragraph merely
|
|
36
|
+
to make it look lighter.
|
|
29
37
|
- **Communicative drift.** Stop when fluent sentences no longer advance a clear
|
|
30
38
|
point or reader need. Cut the passage, rebuild it around its purpose, or flag the
|
|
31
39
|
missing intent rather than inventing one.
|
|
32
40
|
- **Rhetorical scale mismatch.** Reduce grand reveals, lessons, or contrasts when
|
|
33
41
|
the underlying point is too small or unsupported for the framing. Preserve a
|
|
34
42
|
contrast that corrects a real, supported misconception.
|
|
43
|
+
- **Unsupported novelty.** Remove claims that nobody has noticed or named an idea
|
|
44
|
+
unless the source supplies a defensible comparison.
|
|
45
|
+
- **Self-labeling significance.** Replace an unsupported declaration that a point
|
|
46
|
+
is important with the consequence that makes it important.
|
|
47
|
+
- **Moral-adjective category error.** Do not call a system design, metric, or
|
|
48
|
+
technical choice brave, honest, ethical, or courageous when the sentence means
|
|
49
|
+
accurate, transparent, conservative, or reliable. Preserve a sourced moral
|
|
50
|
+
judgment about an actual agent or decision.
|
|
35
51
|
- **Performed-writer register.** Flatten theatrical framing of ordinary work ("we
|
|
36
52
|
hired an adversary"), epigram closers, staccato antithesis pairs ("Not perfect.
|
|
37
53
|
Honest."), extended conceits (billing, courtroom, forensics, recipe), one-word
|
|
@@ -58,6 +74,8 @@ safe correction for:
|
|
|
58
74
|
Do not merely flag these problems. Correct them directly wherever the intended
|
|
59
75
|
meaning is certain.
|
|
60
76
|
|
|
77
|
+
For consistent reporting, use these names: paragraph-order dependence, unsupported novelty, self-labeling significance, moral-adjective category error, recap-flattery, and wall-of-text reply.
|
|
78
|
+
|
|
61
79
|
## Boundaries
|
|
62
80
|
|
|
63
81
|
- Preserve every fact, claim, qualifier, number, name, date, link, and source.
|
|
@@ -103,7 +121,8 @@ Verify the exact artifact returned by the read-aloud editor:
|
|
|
103
121
|
this read-aloud pass again, and repeat every final check.
|
|
104
122
|
|
|
105
123
|
Stop only when the same artifact has cleared the copy desk, final read-aloud pass,
|
|
106
|
-
semantic and format review, scorer,
|
|
124
|
+
semantic and format review, scorer, fidelity check, and the separate fresh-eyes
|
|
125
|
+
finalizer in `fresh-eyes.md`. Limit this repair loop to
|
|
107
126
|
three rounds. If an issue still cannot be resolved without guessing, return the best
|
|
108
127
|
source-preserving version that completed both editorial passes, state the unresolved
|
|
109
128
|
span and failed check plainly, and do not describe the fallback as fully verified.
|