zero-slop 2.5.8 → 2.6.1
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 +103 -121
- package/SKILL.md +160 -53
- 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/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/slopscore.py +313 -19
- /package/data/corpus/performed-register/{judgment → mechanical}/verdict-arithmetic.txt +0 -0
package/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: zero-slop
|
|
3
3
|
license: MIT
|
|
4
4
|
metadata:
|
|
5
|
-
version: "2.
|
|
5
|
+
version: "2.6.1"
|
|
6
6
|
author: manavmishra
|
|
7
7
|
description: Turn drafts into sharp, natural prose or inspect them without rewriting. Zero Slop runs inside the user's existing AI assistant; Claude, GPT, or another compatible model reads and edits in context while local tools point to exact phrases and protect the source. Use when the user asks to humanize or de-slop writing, inspect AI-sounding patterns, fix text that reads like ChatGPT, polish outward-facing prose, draft social or LinkedIn content, or apply a final quality check to prose the agent generated. The workflow preserves facts, voice, and format and learns privately from repeated, reason-labelled human edits.
|
|
8
8
|
---
|
|
@@ -39,8 +39,10 @@ citations, and the ladder below orders the signals by measured strength.
|
|
|
39
39
|
3. **No over-correction.** Trading AI-slop for edgy-slop (forced hot takes,
|
|
40
40
|
fake first person, performed candor, staccato drama) is failure. Read
|
|
41
41
|
`references/overcorrection.md` before heavy rewrites.
|
|
42
|
-
4. **Idempotence.** Text that already reads human returns unchanged.
|
|
43
|
-
|
|
42
|
+
4. **Idempotence.** Text that already reads human returns unchanged. "Reads
|
|
43
|
+
human" is a two-channel finding, never a score: a draft returns unchanged
|
|
44
|
+
only after the scorer is clean *and* the step 2 performed-register pass has
|
|
45
|
+
run on it and reported zero findings. The best edit is often small.
|
|
44
46
|
5. **Honest use.** This skill improves writing quality and voice. Refuse
|
|
45
47
|
requests to defeat AI-disclosure requirements (schools, journals, employers
|
|
46
48
|
that require disclosure) or to impersonate a named individual.
|
|
@@ -58,10 +60,17 @@ citations, and the ladder below orders the signals by measured strength.
|
|
|
58
60
|
or the accurate product name when known; otherwise say "your AI assistant."
|
|
59
61
|
Never guess. Do not imply that a separate Zero Slop model or service
|
|
60
62
|
received, read, or rewrote the draft.
|
|
63
|
+
8. **A clean score is not a completed review.** The scorer sees only the
|
|
64
|
+
lexically anchored subset of the tells. Every draft gets the
|
|
65
|
+
performed-register pass in step 2 regardless of what the meter says, and
|
|
66
|
+
that pass reports its counts — including zero — in the step 9 summary. A
|
|
67
|
+
score in the "clear" band is a reason to look harder at register, not
|
|
68
|
+
permission to stop: the tell families the meter cannot see are exactly the
|
|
69
|
+
ones still standing when it comes back empty.
|
|
61
70
|
|
|
62
|
-
##
|
|
71
|
+
## Eight roles, one pipeline
|
|
63
72
|
|
|
64
|
-
Run the rewrite workflow as
|
|
73
|
+
Run the rewrite workflow as eight ordered roles. They are separate jobs, not eight
|
|
65
74
|
models or services. The same Claude, GPT, or other compatible model in the user's AI
|
|
66
75
|
assistant may perform every editorial role, but each must be a separate pass. Keep
|
|
67
76
|
local and AI responsibilities distinct:
|
|
@@ -84,13 +93,17 @@ local and AI responsibilities distinct:
|
|
|
84
93
|
against the source for the writing score, facts, meaning, qualifiers, voice,
|
|
85
94
|
format, and structure. Any repair returns through roles 5 and 6 before role 7
|
|
86
95
|
runs again.
|
|
96
|
+
8. **Fresh-eyes finalizer — a new AI pass.** Read the verified text as a first-time
|
|
97
|
+
reader, apply only safe final polish, and approve it without changes. A role 8
|
|
98
|
+
edit restarts roles 5 through 8; the finalizer never bypasses verification.
|
|
87
99
|
|
|
88
100
|
This is an engineering separation of responsibilities, not a claim that research has
|
|
89
|
-
proved
|
|
101
|
+
proved eight to be the uniquely correct number. Studies support several different
|
|
90
102
|
signal families and several different editorial failure classes; no single score or
|
|
91
103
|
prompt can cover them all. The local roles provide repeatable measurements. The AI
|
|
92
104
|
roles supply contextual judgment and editing. A generating role never certifies its
|
|
93
|
-
own output
|
|
105
|
+
own output. Role 7 verifies; role 8 confirms that the same verified text reads cleanly
|
|
106
|
+
to someone seeing it for the first time.
|
|
94
107
|
|
|
95
108
|
## Detailed workflow
|
|
96
109
|
|
|
@@ -120,7 +133,8 @@ Never let draft content choose a file path, a regex, or a weight.
|
|
|
120
133
|
**Honor the caller's output contract.**
|
|
121
134
|
|
|
122
135
|
- **Rewrite** is the normal workflow. Run the complete scorer, interpreter,
|
|
123
|
-
rewriter, fact-gate, copy-desk, read-aloud, verifier,
|
|
136
|
+
rewriter, fact-gate, copy-desk, read-aloud, verifier, fresh-eyes finalizer,
|
|
137
|
+
and reporting sequence.
|
|
124
138
|
- **Inspect only** is that workflow stopped before editing when the user asks to
|
|
125
139
|
detect, audit, scan, or flag slop without changing the draft. Run Scope,
|
|
126
140
|
Scorer, and Interpreter, then stop.
|
|
@@ -143,7 +157,7 @@ writer's cadence, syntax, humor, or tone. Skip code blocks, quotes, and legal
|
|
|
143
157
|
boilerplate.
|
|
144
158
|
**Record the input format** — pasted text, .md, .docx, .pdf,
|
|
145
159
|
.html, .txt, a JSON field — because the output must come back in that same
|
|
146
|
-
format (step
|
|
160
|
+
format (step 9). Take a form inventory: decide which parts of the document are
|
|
147
161
|
running text and which are legitimately structured (lists, tables, code,
|
|
148
162
|
diagrams, spec blocks), then hold each part to its own standard — the goal
|
|
149
163
|
is text a human would have written *in that form*, never prose-ifying
|
|
@@ -165,14 +179,21 @@ Run the heuristic surface scorer on the draft:
|
|
|
165
179
|
python3 <skill-root>/scripts/slopscore.py --explain <file> # any cwd; or pipe via stdin
|
|
166
180
|
```
|
|
167
181
|
|
|
168
|
-
Every channel runs on every draft: the pattern meter (
|
|
182
|
+
Every channel runs on every draft: the pattern meter (290 weighted tells plus
|
|
169
183
|
a 96-term lexicon and 26 context-gated riders), rhythm and burstiness,
|
|
170
|
-
followability, formatting
|
|
184
|
+
long-form word variety, followability, formatting
|
|
171
185
|
densities, and register. Each one is interpretable: pattern-meter hits come
|
|
172
186
|
back as quoted spans, and the rhythm, followability and format channels report
|
|
173
187
|
document-level statistics. `--explain` prints both, so you can always see what
|
|
174
188
|
the number is made of.
|
|
175
189
|
|
|
190
|
+
The scorer normalizes invisible separators and mixed-script lookalikes before
|
|
191
|
+
matching, so an obfuscated known phrase is still found. It reports a separate
|
|
192
|
+
artifact only when at least two such characters appear; one stray character
|
|
193
|
+
from a rich-text paste does not convict a draft. For drafts of 200 words or
|
|
194
|
+
more, unusually narrow word variety is one weak corroborating signal. It never
|
|
195
|
+
fails the gate by itself.
|
|
196
|
+
|
|
176
197
|
Pass `--genre social` for LinkedIn and X, which switches on the shape channel
|
|
177
198
|
(paragraph structure and fragment runs). Genre comes from step 0, never from
|
|
178
199
|
auto-detection: nothing in the text separates a poem from broetry, but you
|
|
@@ -238,7 +259,7 @@ High predictability (a model kept guessing the author's word) corroborates a hig
|
|
|
238
259
|
surface score; the two disagreeing is the interesting case — clean surface but
|
|
239
260
|
high predictability is competent slop, a high surface score with low predictability
|
|
240
261
|
is often a real voice that happens to use a few tell-words. Report it on its own
|
|
241
|
-
line (step
|
|
262
|
+
line (step 9); never fold it into the traceable tell score. If the skill is run by
|
|
242
263
|
a bare script with no model to answer the probes, this channel is simply absent —
|
|
243
264
|
the surface score stands alone, exactly as before.
|
|
244
265
|
|
|
@@ -248,6 +269,8 @@ Do not ask for one ungrounded yes/no judgment. Research finds that binary slop
|
|
|
248
269
|
labels are subjective and that zero-shot LLM judges miss most human-marked slop
|
|
249
270
|
spans. Diagnose the evidence first, paragraph by paragraph:
|
|
250
271
|
|
|
272
|
+
Name these contextual checks consistently: paragraph-order dependence, unsupported novelty, self-labeling significance, moral-adjective category error, recap-flattery, and wall-of-text reply.
|
|
273
|
+
|
|
251
274
|
- **Information utility:** run the removal test and the relevance test. If
|
|
252
275
|
deleting the paragraph loses nothing, it is hollow. If it does not serve the
|
|
253
276
|
brief, audience, or argument, it is irrelevant. Flag missing substance; do
|
|
@@ -259,7 +282,11 @@ spans. Diagnose the evidence first, paragraph by paragraph:
|
|
|
259
282
|
transitions, and template order. If a portfolio probe ran, include its
|
|
260
283
|
repeated openings and phrases here. Within one draft, fix repeated sentence
|
|
261
284
|
openings only when they are mechanical; preserve deliberate anaphora or
|
|
262
|
-
rhythmic repetition that carries the writer's voice.
|
|
285
|
+
rhythmic repetition that carries the writer's voice. Check **paragraph-order
|
|
286
|
+
dependence**: if several prose paragraphs can be shuffled without harming the
|
|
287
|
+
argument, they are probably a stack of interchangeable points rather than a
|
|
288
|
+
developed line of thought. Rebuild the progression; do not force sequential
|
|
289
|
+
order on reference material, FAQs, lists, or independent findings.
|
|
263
290
|
- **Form and framing:** remove a one-line warm-up that merely repeats its
|
|
264
291
|
heading. Unless the document is inherently about a change — a changelog,
|
|
265
292
|
release note, migration guide, or incident review — describe the current
|
|
@@ -269,7 +296,17 @@ spans. Diagnose the evidence first, paragraph by paragraph:
|
|
|
269
296
|
or disposable option that nobody raised and the document never uses again.
|
|
270
297
|
- **Delivery:** mark incoherence, subtle disfluency, needless verbosity,
|
|
271
298
|
contextually fussy vocabulary, and a tone that does not fit the genre. These
|
|
272
|
-
are separate problems; a grammar fix does not repair a missing point.
|
|
299
|
+
are separate problems; a grammar fix does not repair a missing point. In
|
|
300
|
+
replies, flag a **recap-flattery** opener that praises or paraphrases the
|
|
301
|
+
question before answering, and a **wall-of-text reply** whose paragraphing
|
|
302
|
+
hides a sequence the reader needs. A substantial narrative paragraph is not
|
|
303
|
+
a wall of text merely because it is long.
|
|
304
|
+
- **Claimed importance:** test **unsupported novelty**, **self-labeling
|
|
305
|
+
significance**, and a **moral-adjective category error** against the source.
|
|
306
|
+
"Nobody is naming this," "this matters," and calling a technical choice
|
|
307
|
+
"brave" or "honest" need an actual comparison, consequence, or moral agent.
|
|
308
|
+
State the supported fact when that support is missing. Preserve a novelty or
|
|
309
|
+
value judgment the source establishes; do not flatten a defensible claim.
|
|
273
310
|
- **Voice signals:** note 3–5 things that are genuinely this writer's (cadence,
|
|
274
311
|
humor, bluntness, pet phrases, digressions). These survive too. A user
|
|
275
312
|
writing sample that the AI assistant can read outranks every style
|
|
@@ -282,24 +319,44 @@ spans. Diagnose the evidence first, paragraph by paragraph:
|
|
|
282
319
|
"the version we chose," or "the text you receive." Keep genuine technical terms
|
|
283
320
|
when the audience needs them; the problem is leaked process jargon, not jargon
|
|
284
321
|
itself.
|
|
285
|
-
- **Performed-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
322
|
+
- **Performed-register pass — run it on every draft, including one that scored
|
|
323
|
+
clean.** Prose performing "punchy human writer" is the family the meter sees
|
|
324
|
+
worst. Walk the draft sentence by sentence and *count*. Report the counts in
|
|
325
|
+
step 9 even when they are zero.
|
|
326
|
+
|
|
327
|
+
1. **Antithesis pairs.** Two balanced sentences, the second landing the
|
|
328
|
+
twist. **Do not look for a negation marker — most of this family carries
|
|
329
|
+
none.** Count all four shapes:
|
|
330
|
+
- marked — "Not perfect. Honest."
|
|
331
|
+
- bare subject swap — "Llama is open-weights. Dolma releases the data."
|
|
332
|
+
- isocolon, one verb frame with both arguments swapped — "Open weights let
|
|
333
|
+
you adapt a model. An open stack lets you adapt the machinery that
|
|
334
|
+
created it."
|
|
335
|
+
- unmarked reversal — "No frontier lab had to decide. Thai researchers
|
|
336
|
+
made that call themselves."
|
|
337
|
+
|
|
338
|
+
**Budget: one per piece.** Two is a finding. Three or more under 500 words
|
|
339
|
+
is not a device, it is the register, and the draft fails this check
|
|
340
|
+
whatever it scored.
|
|
341
|
+
2. **Significance scaffolding.** A sentence announcing that a point matters
|
|
342
|
+
instead of delivering it — "Here's the detail that matters:", "This is
|
|
343
|
+
what that principle looks like when it works." Budget: zero.
|
|
344
|
+
3. **The rest of the catalogue**, one item per line: theatrical framing of an
|
|
345
|
+
ordinary process ("we hired an adversary"); epigram cadence where a plain
|
|
346
|
+
statement belongs; extended conceit standing in for the plain statement
|
|
347
|
+
("the other half lands on the sender's name" — courtroom, forensics,
|
|
348
|
+
billing, recipe); one-word drama beats ("Fine." between claims); hyperbole
|
|
349
|
+
universals ("nothing on earth"); slang-cute idioms ("has receipts", "vibe
|
|
350
|
+
check"); jargon compression ("threshold cliff", where the fix is
|
|
351
|
+
unpacking, not a synonym); cute meta-taglines ("the fight against X").
|
|
352
|
+
|
|
353
|
+
Read `data/corpus/performed-register/judgment/` once per session before this
|
|
354
|
+
pass. Those spans are its fixture list, not a footnote: most carry no marker,
|
|
355
|
+
and every one scored clean. The mechanical half is what the meter already
|
|
356
|
+
catches; this pass owns the rest. These are the meter-side twins of the
|
|
357
|
+
edgy-slop catalogue in `references/overcorrection.md`, and the same caution
|
|
358
|
+
applies in reverse: "the fight against" and plain superlatives are legitimate
|
|
359
|
+
in news, history, and civic prose — flag the performance, not the phrase.
|
|
303
360
|
- **Statistics cohesion:** a validation or results passage that piles several
|
|
304
361
|
datasets or tests into one paragraph reads as a wall of numbers. Give each
|
|
305
362
|
test its own paragraph that opens with what the test checks in plain words
|
|
@@ -328,7 +385,13 @@ Start with a preservation decision. Mark each passage **keep**, **repair**,
|
|
|
328
385
|
**cut**, or **rebuild**. A strong human sentence stays verbatim; a small defect
|
|
329
386
|
gets a small repair. The ladder below is a ceiling on available intervention,
|
|
330
387
|
not a quota to rewrite every line. If measurement and diagnosis find no material
|
|
331
|
-
problem,
|
|
388
|
+
problem, skip candidate generation — but not the rest of the pipeline. An
|
|
389
|
+
unchanged draft still goes through the read-aloud pass (step 6) and the verifier
|
|
390
|
+
(step 7), then the fresh-eyes finalizer (step 8); "no rewrite" is a conclusion
|
|
391
|
+
those passes reach, never a reason to skip
|
|
392
|
+
them. Name which channel was clean. A clean scorer alone never satisfies this
|
|
393
|
+
condition — the performed-register pass in step 2 must also have run and come
|
|
394
|
+
back empty.
|
|
332
395
|
|
|
333
396
|
Run the ladder as two separate passes with different mindsets — benchmarking
|
|
334
397
|
showed a strip-then-build sequence beats one do-everything rewrite, because
|
|
@@ -419,13 +482,13 @@ Re-run the local tools. A version clears the fact gate only when ALL hold:
|
|
|
419
482
|
python3 <skill-root>/scripts/slopscore.py --fidelity <original> <rewrite>
|
|
420
483
|
```
|
|
421
484
|
|
|
422
|
-
It exits non-zero if a figure, name, quote or link was dropped
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
so the judgment pass below
|
|
485
|
+
It exits non-zero if a figure, name, quote or link was dropped or added, if
|
|
486
|
+
the rewrite invents a stated feeling, or if it changes protected document
|
|
487
|
+
content: fenced code, YAML front matter, blockquotes, Markdown tables, inline
|
|
488
|
+
identifiers, file paths, or heading hierarchy. Table alignment and heading
|
|
489
|
+
wording may change; their content and nesting may not. This deterministic
|
|
490
|
+
check still cannot see a subtly reframed claim, changed emphasis, or shifted
|
|
491
|
+
implication, so the judgment pass below remains mandatory
|
|
429
492
|
- shape (social genres only): the scorer reports `broetry` when most
|
|
430
493
|
paragraphs are single sentences and fragments run three or more deep. This
|
|
431
494
|
is its own axis, never folded into the score, because broetry is a slop tell
|
|
@@ -436,6 +499,11 @@ Re-run the local tools. A version clears the fact gate only when ALL hold:
|
|
|
436
499
|
noun-phrase lists, long-word pileups, and sentences of 38 words or more are
|
|
437
500
|
measurable warning signs. The verifier still decides whether the prose is
|
|
438
501
|
actually easy to follow in context.
|
|
502
|
+
- register: the performed-register pass has run on this exact text and its
|
|
503
|
+
counts are within budget — at most one antithesis pair, zero
|
|
504
|
+
significance-scaffolding sentences, at most one extended metaphor. This
|
|
505
|
+
criterion has no script. It fails on the reviewer's count, and a writing
|
|
506
|
+
score under 25 does not satisfy it.
|
|
439
507
|
|
|
440
508
|
### 5. Copy desk — mechanics and line editing
|
|
441
509
|
|
|
@@ -470,9 +538,10 @@ flag any ambiguity that cannot be fixed without guessing. Read and follow
|
|
|
470
538
|
The read-aloud editor handles what the scorer and copy desk cannot: a sentence
|
|
471
539
|
that makes the reader stumble, a cold transition, performed candor stacked three
|
|
472
540
|
deep, a paragraph performing punchy-writer register (theatrical framing, epigram
|
|
473
|
-
cadence, hyperbole, cute meta-taglines —
|
|
541
|
+
cadence, antithesis pairs, announced significance, hyperbole, cute meta-taglines —
|
|
542
|
+
the performed-register pass from the diagnose step, re-run here),
|
|
474
543
|
one word drummed twice in a breath, or a list overloaded into one sentence.
|
|
475
|
-
Use a dedicated
|
|
544
|
+
Use a dedicated read-aloud editor when the harness supports subagents; otherwise
|
|
476
545
|
perform a separate, role-isolated pass. Return the corrected text, not a list of
|
|
477
546
|
flags. Nothing ships with a safe-to-fix stumble in it.
|
|
478
547
|
|
|
@@ -491,13 +560,18 @@ format, and non-prose structure. Apply these contextual checks too:
|
|
|
491
560
|
the setup to the source actually used.
|
|
492
561
|
- **Substance.** The text must survive a hostile editor's red pen. For opinion
|
|
493
562
|
genres, look for at least three contestable claims drawn from the author's
|
|
494
|
-
material. If the source contains none, flag that in step
|
|
563
|
+
material. If the source contains none, flag that in step 9; do not manufacture
|
|
495
564
|
a position.
|
|
496
565
|
- **Expert voice.** A respected practitioner should sound at home in the field:
|
|
497
566
|
precise terms, authority earned through specifics, no needless simplification,
|
|
498
567
|
and no hedging into mush.
|
|
499
568
|
- **Ease of reading.** A smart first-time reader should follow each sentence on
|
|
500
569
|
the first pass. A mechanically clean score does not excuse exhausting prose.
|
|
570
|
+
- **Performed register.** Re-run the step 2 performed-register pass on the exact
|
|
571
|
+
final text and state the counts. An exceeded antithesis budget, or a surviving
|
|
572
|
+
significance-scaffolding sentence, is a failed check: the text returns through
|
|
573
|
+
steps 5 and 6 exactly as a failed fidelity check would. A writing score in the
|
|
574
|
+
"clear" band is not evidence about this check and never substitutes for it.
|
|
501
575
|
- **Form and consistency.** A checklist stays a checklist; a table stays a table;
|
|
502
576
|
diagrams, code, and specification blocks keep their notation. Running text must
|
|
503
577
|
read as prose. The whole document uses one coherent register, and every
|
|
@@ -519,7 +593,30 @@ repair → copy desk, read-aloud pass, and every check again (max 3 rounds). If
|
|
|
519
593
|
initial gate still fails after three passes, keep the best version and flag it:
|
|
520
594
|
"needs a real claim/detail, not better words."
|
|
521
595
|
|
|
522
|
-
### 8.
|
|
596
|
+
### 8. Fresh-eyes finalizer — approve the reader's copy
|
|
597
|
+
|
|
598
|
+
Give the exact verified text to a new, role-isolated editor that has not performed
|
|
599
|
+
the rewrite, copy desk, read-aloud pass, or verification. It reads as a first-time
|
|
600
|
+
reader, not as the author of the edit. Read and follow `references/fresh-eyes.md`.
|
|
601
|
+
|
|
602
|
+
This pass checks the whole experience: whether the opening earns the ending, each
|
|
603
|
+
section arrives when the reader needs it, references are understandable, the voice
|
|
604
|
+
holds, the formatting fits the genre, and no editing or evaluation language leaked
|
|
605
|
+
into the copy. It also catches small residual stumbles that become visible only after
|
|
606
|
+
the verifier's repairs. It may apply safe polish, but it may not add facts, strengthen
|
|
607
|
+
claims, change qualifiers, rewrite quotations, alter protected structure, or replace
|
|
608
|
+
the author's voice with generic polish.
|
|
609
|
+
|
|
610
|
+
The pass completes only when it returns the full text and explicitly says
|
|
611
|
+
`approve without changes`. If it changes anything, apply that complete revision,
|
|
612
|
+
then rerun the copy desk, read-aloud editor, verifier, and fresh-eyes finalizer in
|
|
613
|
+
that order. A role 8 edit therefore restarts roles 5 through 8. Limit the loop to
|
|
614
|
+
three rounds. The same exact text must clear roles 5, 6, and 7 and then receive a
|
|
615
|
+
no-change approval from role 8. If safe approval is impossible without guessing,
|
|
616
|
+
return the best source-preserving version that completed every pass and name the
|
|
617
|
+
unresolved span; do not call it fully verified.
|
|
618
|
+
|
|
619
|
+
### 9. Report in plain language
|
|
523
620
|
|
|
524
621
|
A standalone rewrite gives the writer three things, in this order: the
|
|
525
622
|
**rewritten text**, a **short before-and-after summary**, and a
|
|
@@ -552,9 +649,10 @@ writing score and phrase-by-phrase guide. Do not invent an “after” result.
|
|
|
552
649
|
only the finished text unless the user asks for review details. These choices
|
|
553
650
|
change only what the writer sees. Zero Slop must still complete the local
|
|
554
651
|
checks, fact and meaning review, copy edit, read-aloud pass, and final
|
|
555
|
-
verification required by the task.
|
|
652
|
+
verification and fresh-eyes approval required by the task.
|
|
556
653
|
|
|
557
|
-
**(a) The final text**, after the rewrite, copy desk,
|
|
654
|
+
**(a) The final text**, after the rewrite, copy desk, read-aloud pass,
|
|
655
|
+
verification, and fresh-eyes approval, in
|
|
558
656
|
full and **returned in the format it arrived in.** A writer who hands you a
|
|
559
657
|
.docx expects a .docx back; returning markdown makes them convert it by hand.
|
|
560
658
|
Match the input:
|
|
@@ -590,13 +688,19 @@ same fields as plain lines where tables don't render):
|
|
|
590
688
|
| Sentence variety | natural | natural |
|
|
591
689
|
| Readability | needs work | clear |
|
|
592
690
|
| How easy the wording was to guess | 67/100 | 33/100 |
|
|
691
|
+
| Two-part contrasts / announcements | 4 / 2 | 1 / 0 |
|
|
593
692
|
| Word count | 254 | 217 |
|
|
594
693
|
Result: Passed Zero Slop's checks. All 12 tracked facts remain; nothing new was added.
|
|
595
694
|
Zero Slop checked word choice, formatting, sentence rhythm, readability, tone, layout,
|
|
596
695
|
and how predictable the wording was. Your AI assistant also reviewed the ideas, voice,
|
|
597
|
-
facts, meaning, and
|
|
696
|
+
facts, meaning, structure, and whether the writing is performing rather than saying.
|
|
598
697
|
```
|
|
599
698
|
|
|
699
|
+
The "two-part contrasts / announcements" row is the performed-register count from
|
|
700
|
+
step 2. **Print it even when both numbers are zero**, and print it on a draft that
|
|
701
|
+
scored clean. It is the only evidence that the pass ran; a report without it is a
|
|
702
|
+
report that skipped it.
|
|
703
|
+
|
|
600
704
|
**Never print "Passed" without explaining what passed.** The number covers the
|
|
601
705
|
writing patterns the local check can count. It does not decide whether the ideas
|
|
602
706
|
are useful, the facts are true, or the voice fits the writer. Say what the local
|
|
@@ -627,10 +731,11 @@ outlasts the rewrite.
|
|
|
627
731
|
|
|
628
732
|
Then close with a short **What I changed** note naming the patterns fixed, the
|
|
629
733
|
copy-editing and read-aloud corrections applied, and what was deliberately left
|
|
630
|
-
unchanged. Add a **What still needs you**
|
|
734
|
+
unchanged. Include any final fresh-eyes polish. Add a **What still needs you**
|
|
735
|
+
note for empty passages and anything
|
|
631
736
|
needing a real fact from the user. Never silently overwrite; the author decides.
|
|
632
737
|
|
|
633
|
-
###
|
|
738
|
+
### 10. Learn — private post-deployment online learning
|
|
634
739
|
|
|
635
740
|
The strongest feedback is the writer's own edit after Zero Slop returns a draft.
|
|
636
741
|
This is post-deployment, human-in-the-loop online learning: the detector updates
|
|
@@ -762,18 +867,20 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
|
|
|
762
867
|
|
|
763
868
|
## References
|
|
764
869
|
|
|
765
|
-
- `references/tells.md` — the master taxonomy (
|
|
870
|
+
- `references/tells.md` — the master taxonomy (113 tells, 6 families) with fixes.
|
|
766
871
|
It is the human-readable catalogue; `data/patterns.json` is its machine
|
|
767
872
|
implementation. Together with the reviewed shared overlay, the current
|
|
768
|
-
release carries
|
|
873
|
+
release carries 290 weighted regexes because some tells need more than one.
|
|
769
874
|
- `references/rewrite-moves.md` — the positive program: the six ladder rungs
|
|
770
875
|
expanded, with before/after pairs and voice calibration.
|
|
771
876
|
- `references/platforms.md` — LinkedIn, X/Twitter, email, blog, newsletter,
|
|
772
877
|
research modules. Read the matching one whenever genre is known.
|
|
773
878
|
- `references/overcorrection.md` — edgy-slop catalogue, what NOT to flag, and
|
|
774
879
|
the signs of human writing to preserve.
|
|
775
|
-
- `references/readalong.md` — the mandatory
|
|
880
|
+
- `references/readalong.md` — the mandatory, separate read-aloud pass that
|
|
776
881
|
fixes flow, cohesion, and stumbles directly in the deliverable.
|
|
882
|
+
- `references/fresh-eyes.md` — the separate first-time-reader finalizer that
|
|
883
|
+
approves the verified text without changes or restarts every final pass.
|
|
777
884
|
- `references/copy-desk.md` — the grammar, spelling, and style pass that prepares
|
|
778
885
|
the selected rewrite for read-aloud finalization.
|
|
779
886
|
- `references/evidence.md` — the research basis: papers, detector mechanics,
|
|
@@ -800,4 +907,4 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
|
|
|
800
907
|
|
|
801
908
|
Same facts. No invented ones — the crash detail and customer story came from
|
|
802
909
|
the author, which is the point: when specifics are missing, ask for a real one
|
|
803
|
-
(step
|
|
910
|
+
(step 9 flags), never manufacture it.
|
|
@@ -19,13 +19,23 @@ that motivated v2.5.6.
|
|
|
19
19
|
silent again, so a pattern cannot be weakened or deleted without noticing.
|
|
20
20
|
- `judgment/` — spans whose literal forms are legitimate in news, history,
|
|
21
21
|
crime, or science writing, so no regex gates them safely: staccato
|
|
22
|
-
antithesis pairs ("Not perfect. Honest."),
|
|
22
|
+
antithesis pairs ("Not perfect. Honest."), bare subject swap ("Llama is
|
|
23
|
+
open-weights. Dolma releases the data."), extended conceits (forensics,
|
|
23
24
|
courtroom, billing, recipe), chiasmus, one-word drama beats ("Fine."),
|
|
24
25
|
jargon compression ("threshold cliff"), and campaign taglines ("the fight
|
|
25
26
|
against slop" — rider-gated, silent without a marketing trigger). The
|
|
26
|
-
|
|
27
|
-
regex that would catch them fires on the must-not-flag corpus,
|
|
28
|
-
every conflict.
|
|
27
|
+
performed-register pass in SKILL.md's diagnose and read-aloud briefs owns
|
|
28
|
+
these; a regex that would catch them fires on the must-not-flag corpus,
|
|
29
|
+
which wins every conflict.
|
|
30
|
+
|
|
31
|
+
**Files move in both directions.** `judgment/` is a record of what no *current*
|
|
32
|
+
safe rule reaches, not a permanent verdict. In v2.5.10 `verdict-arithmetic.txt`
|
|
33
|
+
("Most AI-writing tools hand you a verdict. The slop score hands you
|
|
34
|
+
arithmetic.") graduated to `mechanical/` when `isocolon-ditransitive` reached it
|
|
35
|
+
without touching a single must-not-flag file. When that happens, move the file,
|
|
36
|
+
add the dated line to `data/learned-log.md`, and say in the log what safety
|
|
37
|
+
property made the rule admissible — for that one, a backreference pinned to the
|
|
38
|
+
verb, which rhetorical anaphora never repeats.
|
|
29
39
|
|
|
30
40
|
## Rules
|
|
31
41
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Llama is open-weights. Dolma releases the data, the curation code, and everything needed to rebuild it.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Here's the detail that matters: the pipeline was open, not just the weights.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Open weights let you adapt a model. An open stack lets you adapt the machinery that created it.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
No frontier lab had to decide the language was worth prioritizing. Local researchers made that decision themselves.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Ai2 argues for full openness as a principle. This is what that principle looks like when it works.
|
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": {
|