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/SKILL.md CHANGED
@@ -2,7 +2,7 @@
2
2
  name: zero-slop
3
3
  license: MIT
4
4
  metadata:
5
- version: "2.5.8"
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. The best
43
- edit is often small.
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
- ## Seven roles, one pipeline
71
+ ## Eight roles, one pipeline
63
72
 
64
- Run the rewrite workflow as seven ordered roles. They are separate jobs, not seven
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 seven to be the uniquely correct number. Studies support several different
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, and the final role checks the exact text returned to the writer.
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, and reporting sequence.
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 8). Take a form inventory: decide which parts of the document are
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 (280 weighted tells plus
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 8); never fold it into the traceable tell score. If the skill is run by
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-writer register:** flag prose performing "punchy human writer"
286
- theatrical framing of an ordinary process ("we hired an adversary"), epigram
287
- or aphorism cadence where a plain statement belongs, staccato antithesis
288
- pairs ("Not perfect. Honest.", "Slop isn't a vibe. It's measurable."), a
289
- metaphor flourish or extended conceit standing in for the plain statement
290
- ("the other half lands on the sender's name", courtroom, forensics, billing,
291
- and recipe conceits), one-word drama beats ("Fine." between claims),
292
- hyperbole universals ("nothing on earth", "in history"), slang-cute idioms
293
- ("has receipts", "vibe check"), jargon compression (invented compound terms
294
- like "threshold cliff" where the fix is unpacking, not a synonym), and cute
295
- meta-taglines or campaign framing ("the fight against X", "a meter you can
296
- argue with"). The scorer catches only the mechanical subset; judge the
297
- register itself, sentence by sentence —
298
- `data/corpus/performed-register/judgment/` holds the human-flagged spans no
299
- regex gates safely. These are the meter-side twins of the edgy-slop
300
- catalogue in `references/overcorrection.md`, and the same caution applies in
301
- reverse: "the fight against" and plain superlatives are legitimate in news,
302
- history, and civic prose flag the performance, not the phrase.
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, return the draft unchanged and skip candidate generation.
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, or if one
423
- appears in the rewrite that was not in the source. Benchmarking found this
424
- was the one dimension the gate never measured, and the one the skill ranked
425
- worst on: a rewrite invented a feeling the author never described and two
426
- judges caught it, because nothing in the loop did. The check catches invented
427
- figures and names; it cannot see an invented *feeling* or a reframed claim,
428
- so the judgment pass below still applies to those
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 — the named check from the diagnose step),
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 fresh-eyes editor when the harness supports subagents; otherwise
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 8; do not manufacture
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. Report in plain language
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, and read-aloud pass, in
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 structure.
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** note for empty passages and anything
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
- ### 9. Learn — private post-deployment online learning
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 (105 tells, 6 families) with fixes.
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 280 weighted regexes because some tells need more than one.
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 fresh-eyes final read-aloud pass that
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 8 flags), never manufacture it.
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."), extended conceits (forensics,
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
- judgment pass in SKILL.md's diagnose and read-aloud briefs owns these; a
27
- regex that would catch them fires on the must-not-flag corpus, which wins
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.
@@ -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": {