zero-slop 2.6.1 → 2.7.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 CHANGED
@@ -1,117 +1,134 @@
1
- # Zero Slop: AI Writing Editor and Slop Detector
1
+ # Zero Slop
2
2
 
3
3
  <p align="center">
4
4
  <img alt="MIT" src="https://img.shields.io/badge/license-MIT-202521">
5
5
  <img alt="tests" src="https://img.shields.io/badge/tests-passing-227B5B">
6
6
  <img alt="dependencies" src="https://img.shields.io/badge/runtime%20dependencies-0-227B5B">
7
7
  <img alt="privacy" src="https://img.shields.io/badge/learning-private-227B5B">
8
- <img alt="version" src="https://img.shields.io/badge/version-2.6.1-72528F">
8
+ <img alt="version" src="https://img.shields.io/badge/version-2.7.1-72528F">
9
9
  </p>
10
10
 
11
- **Less slop, more pop.**
11
+ Score your writing 0 to 100 for AI slop, then edit it out without changing a single fact.
12
12
 
13
- Zero Slop is an Agent Skill, not an AI model. Claude, GPT, or another compatible
14
- model edits the draft; Zero Slop supplies the workflow and local source checks.
13
+ ![A scored sentence before and after editing](assets/demo.png)
15
14
 
16
- Its 0-to-100 writing score points to flagged phrases, flat rhythm, dense passages,
17
- and distracting formatting, not authorship. In the references,
18
- human writing scored from 9 to 21; unedited AI drafts averaged 77. These are not
19
- universal cutoffs.
15
+ ## Problem
20
16
 
21
- ![A scored sentence before and after editing](assets/demo.png)
17
+ AI writing has an accent: "It's not X. It's Y." "Here's the thing nobody tells you."
18
+ "This marks a pivotal moment." Ask an AI to fix it and it sands off the vocabulary and
19
+ cadence that made the writing yours, and rewrites your numbers on the way.
20
+
21
+
22
+ Zero Slop is an Agent Skill and ships no model. Claude, GPT, or another compatible model
23
+ does the editing; Zero Slop supplies the workflow, the meter, and the checks that refuse
24
+ any change to a name, number, quotation or link.
22
25
 
23
- ## Install Zero Slop
26
+ ## How to install Zero Slop
24
27
 
25
- Paste this prompt into Claude Code, Codex, Cursor, OpenCode, Warp, Zed, or another
26
- Agent Skills-compatible assistant:
28
+ Paste this into Claude Code, Codex, Cursor, OpenCode, Warp, or Zed:
27
29
 
28
30
  ```text
29
- Install or update Zero Slop from https://github.com/manavmishra/ZeroSlop for
30
- this agent.
31
-
32
- 1. Find active installations. Report each path, version, and method. Do not duplicate
33
- or remove one without asking.
34
- 2. Keep the current install method when updating. In Codex, use $skill-installer for
35
- `skills/zero-slop`; in Claude Code or Cowork, use the plugin marketplace. Otherwise
36
- use `npx skills add manavmishra/ZeroSlop --global` for a first install or
37
- `npx skills update zero-slop --global` for an existing CLI install.
38
- 3. Preserve ZERO_SLOP_HOME (default: ~/.zero-slop) and its private data.
39
- 4. Verify the installed version. When Python is available, run
40
- `python3 scripts/calibrate.py --selftest` from the installed skill directory.
41
- 5. Report the path, method, version, validation result, and restart requirement.
42
-
43
- Do not modify the current project or unrelated configuration. Ask before falling
44
- back to a project-local installation.
31
+ Install the Zero Slop skill globally from https://github.com/manavmishra/ZeroSlop
45
32
  ```
46
33
 
47
- Direct terminal install:
34
+ Or install it with `npx`:
48
35
 
49
- ```bash
36
+ ```sh
50
37
  npx skills add manavmishra/ZeroSlop --global
51
38
  ```
52
39
 
53
- ChatGPT users can download [`dist/zero-slop-single-file.md`](dist/zero-slop-single-file.md);
54
- Claude.ai users can use the ZIP.
40
+ ChatGPT users can download [`dist/zero-slop-single-file.md`](dist/zero-slop-single-file.md).
41
+ Claude.ai users can upload [`dist/zero-slop.zip`](dist/zero-slop.zip). `npx skills update zero-slop --global` updates an existing CLI install later.
42
+
43
+ ## How to use Zero Slop
44
+
45
+ ```text
46
+ /zero-slop (your writing)
47
+ ```
48
+
49
+ You get the edited draft, a before-and-after score, and the flagged phrases quoted with
50
+ what needed work. `/zero-slop inspect (your writing)` reviews without rewriting.
51
+ For a folder, `slopscore.py --batch drafts/ --gate 25` exits non-zero above the threshold
52
+ and drops into CI.
53
+ ## The slop that Zero Slop catches
54
+
55
+ 290 weighted patterns and a 96-term lexicon, including:
56
+
57
+ 1. **Binary contrasts.** "It's not X. It's Y."
58
+ 2. **Throat-clearing openers.** "Here's the thing," "Let me be clear"
59
+ 3. **Faux-insight setups.** "What nobody tells you," "The part everyone misses"
60
+ 4. **Colon reveals.** "The best part: it learns."
61
+ 5. **Dramatic fragments.** "That's it. That's the whole thing."
62
+ 6. **Superficial analysis.** "highlighting the team's commitment to innovation"
63
+ 7. **Importance puffery.** "marks a pivotal moment," "a testament to"
64
+ 8. **Weasel attribution.** "experts agree," "studies show"
65
+ 9. **Synonym cycling.** The agent, the assistant, the tool, all one thing.
66
+ 10. **Marketing riders.** "robust" and "leverage" score only beside a marketing trigger, so a runbook stays quiet.
67
+
68
+ A reading pass covers what no pattern reaches, where the defect is the document rather
69
+ than any span: one shape repeated seven times, statistics piled into a paragraph,
70
+ paragraphs that shuffle without loss. [`references/eval.md`](references/eval.md) has all
71
+ 76 checks.
72
+
73
+ Human writing scored 9 to 21 in [`data/corpus/must-not-flag/`](data/corpus/must-not-flag/);
74
+ unedited AI drafts averaged 77 across [`bench/examples.json`](bench/examples.json).
75
+ Neither number claims to identify who wrote the text.
55
76
 
56
77
  ## How it works
57
78
 
58
79
  ![Eight editorial roles, a private learning loop, and a separate release review](assets/engine.svg)
59
80
 
60
- Eight roles form one workflow. They are jobs, not separate models. Your AI assistant
61
- handles editorial judgment; local Python tools run repeatable checks.
81
+ Eight roles form one workflow. Each is a job rather than a service: a single model can handle
82
+ several of them, each as its own pass, so nothing grades its own output.
62
83
 
63
84
  | Role | Who does it | What happens |
64
85
  |---|---|---|
65
86
  | 1. Scorer | Local tools | Finds the exact wording, rhythm, readability, and formatting problems that raised the writing score. |
66
87
  | 2. Interpreter | Your AI assistant | Reads the claims, purpose, audience, structure, and voice before changing anything. |
67
88
  | 3. Rewriter | Your AI assistant | Removes stock language and rebuilds order, rhythm, and tone without inventing detail. |
68
- | 4. Fact gate | Local tools | Rejects a version that changes names, numbers, quotations, links, code, tables, paths, or document structure. |
89
+ | 4. Fact gate | Local tools | Rejects any version that changes names, numbers, quotations, links, code, tables, paths, or structure. |
69
90
  | 5. Copy desk | Fresh AI pass | Corrects grammar, spelling, usage, and consistency in the actual deliverable. |
70
91
  | 6. Read-aloud editor | Fresh AI pass | Fixes stumbles, repetition, weak transitions, and awkward flow. |
71
- | 7. Verifier | Local tools and your AI assistant | Compares the text with the source for facts, meaning, qualifiers, voice, format, and structure. |
72
- | 8. Fresh-eyes finalizer | New AI pass | Reads the verified text as a first-time reader and applies only safe last-mile polish. Any final polish restarts the final checks; the same text must return unchanged before release. |
92
+ | 7. Verifier | Local tools and your AI assistant | Compares text with source for facts, meaning, qualifiers, voice, format, structure. |
93
+ | 8. Fresh-eyes finalizer | Fresh AI pass | Reads the verified text as a first-time reader, applying only safe polish. Any final polish restarts the final checks; the same text must return unchanged before release. |
73
94
 
74
- Research supports the checks, not the number eight. Studies find
95
+ Eight is an engineering choice; research supports the individual checks. Studies find
75
96
  [predictable wording](https://arxiv.org/abs/2301.11305) and
76
- [overused vocabulary](https://arxiv.org/abs/2406.07016) in machine text, while
77
- authorship detectors can [misclassify non-native English](https://arxiv.org/abs/2304.02819).
78
- Zero Slop combines language checks with contextual editing. Any finalizer change
79
- repeats the copy desk, read-aloud pass, verification, and fresh-eyes review. Local
97
+ [overused vocabulary](https://arxiv.org/abs/2406.07016) in machine text, and authorship
98
+ detectors can [misclassify non-native English](https://arxiv.org/abs/2304.02819). Local
80
99
  tools use only Python's standard library.
81
100
 
82
101
  ## Private learning from your edits
83
102
 
84
- Learning starts only when you provide both the assistant's version and the version
85
- you kept. Zero Slop never watches files, browsers, or publishing systems.
103
+ Nothing is learned until you hand over both versions: what the assistant produced and
104
+ what you kept. Zero Slop watches nothing on its own: no file monitoring, no browser
105
+ hooks, no reaching into where you publish.
106
+
107
+ A phrase must disappear from three unrelated pieces before it becomes a private rule; a
108
+ single word needs five. Each must be new and stay silent on known-human text. Private
109
+ data stays under `$ZERO_SLOP_HOME`.
86
110
 
87
- A phrase needs removal from three unrelated pieces before it becomes a private rule;
88
- a single word needs five. Each must be new and safe on known-human text. Repeated
89
- fixes guide later edits; kept phrases can quiet a rule. Private data lives under
90
- `$ZERO_SLOP_HOME`. This is human-in-the-loop online learning, not neural training or
91
- RLHF, and it never retrains Claude, GPT, or another model.
111
+ This is human-in-the-loop online learning. It never retrains Claude, GPT, or another
112
+ model, and involves no neural training or RLHF. A profile can exempt existing watchlist
113
+ words when selected by name; it does not learn cadence, tone, or a complete writing
114
+ style.
92
115
 
93
- A profile can exempt existing watchlist words when selected by name. It does not
94
- learn cadence, tone, or a complete writing style.
95
116
 
96
- ## What v2.6.1 changes
117
+ ## What's inside
97
118
 
98
- Four narrow checks now catch reasoning artifacts, unsupported novelty, emotional
99
- flatness, and repetitive acknowledgments that scored clear in v2.5.10. All 114 frozen
100
- document scores stayed unchanged, all 18 human controls stayed clear, and the four
101
- new cases moved from 9.5 to 30.7–65.1. Median throughput was 0.03% lower in the
102
- 12-run comparison, a small local timing difference rather than a speed claim.
119
+ [`SKILL.md`](SKILL.md) has the workflow and [`references/eval.md`](references/eval.md) the
120
+ 76 checks. [`scripts/slopscore.py`](scripts/slopscore.py) is the meter and fact gate,
121
+ with [`scripts/register.py`](scripts/register.py) running the reading pass.
122
+ [`bench/README.md`](bench/README.md) documents every benchmark with its limits.
103
123
 
104
- The fresh-eyes role changes editing, not the local meter. It reads the verified copy
105
- as a first-time reader; any correction restarts every final check. v2.6.1 also
106
- matched the prior 84.2% result on the 38-item editorial panel.
124
+ ## Evidence
107
125
 
108
- ### Fresh same-model editing replay
126
+ ### Against other tools, same model, same drafts
109
127
 
110
128
  We reran Zero Slop, [avoid-ai-writing](https://github.com/conorbronsdon/avoid-ai-writing),
111
- [no-ai-slop](https://github.com/petergyang/no-ai-slop), and
112
- [humanizer](https://github.com/blader/humanizer) from scratch on the same 18 obvious
113
- drafts. Every workflow used GPT-5.4, high reasoning, batches of three, and its pinned
114
- instruction file.
129
+ [no-ai-slop](https://github.com/petergyang/no-ai-slop) and
130
+ [humanizer](https://github.com/blader/humanizer) on the same 18 obvious drafts, each with
131
+ GPT-5.4, high reasoning, batches of three, and its pinned instructions.
115
132
 
116
133
  | Method | Mean writing score ↓ | Passed all Zero Slop checks | Important details kept | Average length change |
117
134
  |---|---:|---:|---:|---:|
@@ -123,19 +140,30 @@ instruction file.
123
140
 
124
141
  ![Fresh same-model editing replay on 18 drafts](assets/bench-search-rewrites.png)
125
142
 
126
- Those are Zero Slop's checks, so we also ran a two-pass, method-hidden comparison
127
- against the pinned incumbent. The GPT-5.4 reviewer favored Zero Slop on 13 drafts
128
- and avoid-ai-writing on 3; 2 were unresolved. The passes agreed on 16 of 18 winners.
129
- Zero Slop's source check passed 18/18 of its rewrites and 16/18 incumbent rewrites.
130
- Its mean writing score was 17.8 versus 17.0, so it did not win every measure.
143
+ Those checks are Zero Slop's own, so we also ran a method-hidden comparison against the pinned
144
+ incumbent. The GPT-5.4 reviewer favored Zero Slop on 13 drafts and avoid-ai-writing on 3,
145
+ with 2 unresolved; the passes agreed on 16 of 18. Our source check cleared 18/18 of our
146
+ rewrites and 16/18 of the incumbent's. On mean score across this second set we lost,
147
+ 17.8 to 17.0.
131
148
 
132
149
  ![Method-hidden editorial preference on 18 drafts](assets/bench-incumbent-hidden.png)
133
150
 
134
- This is a small LLM-reviewed regression study, not independent human field accuracy
135
- or a universal ranking. The packets, mappings, judgments, hashes, and limits are in
136
- [`bench/incumbent-blind-replay/`](bench/incumbent-blind-replay/).
151
+ This is a small LLM-reviewed regression study. It measures neither field accuracy nor a
152
+ universal ranking. Drafts, mappings, verdicts, hashes and limits:
153
+ [`bench/incumbent-blind-replay/`](bench/incumbent-blind-replay/). On the 38-item
154
+ editorial panel ([`bench/README.md`](bench/README.md)), v2.6.1 matched the prior 84.2% result. Its four new checks left all 114
155
+ frozen document scores unchanged and 18 human controls clear, while the four target cases
156
+ moved from 9.5 to between 30.7 and 65.1. Median throughput was 0.03% lower across 12
157
+ runs, which is local timing noise and no kind of speed claim.
158
+
159
+ ### Speed
160
+
161
+ On one Apple silicon Mac: 1,000 documents in 1.9958 seconds (501.1 per second), a
162
+ 15,201-word document in 0.3223 seconds, slowest stress case 2.4438 seconds, an 8,000-word
163
+ learning pass 0.1627 seconds. Editing time sits outside these numbers. None is a
164
+ service-level guarantee.
137
165
 
138
- ### Current-model and speed checks
166
+ ### Current models
139
167
 
140
168
  The pinned [RAID+](https://huggingface.co/datasets/markstanl/RAID-Plus) sample yielded
141
169
  7,627 usable generations:
@@ -147,29 +175,30 @@ The pinned [RAID+](https://huggingface.co/datasets/markstanl/RAID-Plus) sample y
147
175
  | Gemma 3 27B | 1,634 | 21.6 | 30.4% |
148
176
  | Llama 3.3 70B | 2,000 | 25.5 | 41.7% |
149
177
 
150
- RAID+ records model origin, not editorial quality. In Beemo, raw model responses
151
- averaged 30.2, expert edits 25.3, and human answers 20.0; neither dataset has quality
152
- labels.
178
+ RAID+ labels capture which model produced a text and say nothing about quality. In
179
+ Beemo, raw responses averaged
180
+ 30.2, expert edits 25.3, human answers 20.0. Neither dataset carries quality labels.
153
181
 
154
- On one Apple silicon Mac, the local checker processed 1,000 documents in 1.9958
155
- seconds, or 501.1 per second. A 15,201-word document took 0.3223 seconds; the slowest
156
- stress case took 2.4438 seconds. An 8,000-word learning pass took 0.1627 seconds.
157
- These measurements exclude the AI assistant's editing time and are not service-level
158
- guarantees.
159
182
 
160
- ## What Zero Slop adds
183
+ ## Where Zero Slop came from
161
184
 
162
- Zero Slop builds on no-ai-slop, humanizer, de-slop, stop-slop, unslop-text, and
163
- avoid-ai-writing. It adds a writing score, source protection, separate editorial
164
- passes, private learning, portfolio analysis, and release tests. The chart records
165
- documented features, not which tool writes better.
185
+ Zero Slop stands on no-ai-slop, humanizer, de-slop, stop-slop, unslop-text and
186
+ avoid-ai-writing, adding a writing score, source protection, separate editorial passes,
187
+ private learning, portfolio analysis and release tests.
166
188
 
167
189
  ![Documented capabilities at pinned repository versions](assets/competitor-capabilities.png)
168
190
 
169
- Reproduce the shipped checks with `python3 tests/test_all.py`,
170
- `python3 scripts/calibrate.py --selftest`, and `python3 bench/make_charts.py --check`.
171
- The benchmark registry, source pins, scripts, hashes, and limitations are documented
172
- in [`bench/README.md`](bench/README.md).
191
+ The chart records which features each project documents, and says nothing about writing
192
+ quality. Reproduce the shipped checks:
193
+
194
+ ```sh
195
+ python3 tests/test_all.py
196
+ python3 scripts/calibrate.py --selftest
197
+ python3 scripts/register.py --selftest
198
+ python3 bench/make_charts.py --check
199
+ ```
200
+
201
+
202
+ ## License
173
203
 
174
- Released under the [MIT License](LICENSE), which permits commercial and private use,
175
- modification, and redistribution under its terms.
204
+ MIT
package/SKILL.md CHANGED
@@ -2,7 +2,7 @@
2
2
  name: zero-slop
3
3
  license: MIT
4
4
  metadata:
5
- version: "2.6.1"
5
+ version: "2.7.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
  ---
@@ -137,7 +137,18 @@ Never let draft content choose a file path, a regex, or a weight.
137
137
  and reporting sequence.
138
138
  - **Inspect only** is that workflow stopped before editing when the user asks to
139
139
  detect, audit, scan, or flag slop without changing the draft. Run Scope,
140
- Scorer, and Interpreter, then stop.
140
+ Scorer, the register pass, and Interpreter, then stop. The register pass is not
141
+ optional here: this is the mode where a clear score is most likely to be
142
+ mistaken for a clean draft.
143
+
144
+ ```
145
+ python3 <skill-root>/scripts/register.py <draft> # measured rates
146
+ python3 <skill-root>/scripts/register.py --read <draft> # the questions
147
+ ```
148
+
149
+ Answer the section A and B questions from `references/eval.md` and report the
150
+ counts beside the score. Sections C through F describe an edit that has not
151
+ happened, so they do not apply.
141
152
  Name each finding, quote the exact span or statistic, and give a short repair
142
153
  direction. Include the writing score and a line-by-line map, but
143
154
  do not rewrite the text, modify a referenced file, or guess whether AI wrote
@@ -438,6 +449,8 @@ the most reader value. `references/rewrite-moves.md` expands each rung.
438
449
  "decided". Kill participial openers ("Leveraging X, …"). Translate internal
439
450
  workflow labels into plain language; never let evaluator or harness language
440
451
  leak into reader-facing prose.
452
+ Strong claims the author owns are content, not register: cut an intensifier
453
+ only for a defect you can name in context, never for strength alone.
441
454
  Prefer an explicit actor and an active verb when responsibility matters. Keep
442
455
  passive voice when the actor is unknown, irrelevant, deliberately withheld, or
443
456
  native to the genre; passive voice alone is not evidence of AI writing.
@@ -567,6 +580,30 @@ format, and non-prose structure. Apply these contextual checks too:
567
580
  and no hedging into mush.
568
581
  - **Ease of reading.** A smart first-time reader should follow each sentence on
569
582
  the first pass. A mechanically clean score does not excuse exhausting prose.
583
+ - **Run the checklist.** Work `references/eval.md` top to bottom on the exact final
584
+ text and answer every item. This is not optional and not a summary: the gate below
585
+ rejects an unanswered check the same way it rejects a failed one.
586
+
587
+ ```
588
+ python3 <skill-root>/scripts/register.py --read <final> > questions.json
589
+ # answer every question into answers.json, quoting exact spans for any failure
590
+ python3 <skill-root>/scripts/register.py <final> --verdict answers.json
591
+ ```
592
+
593
+ It measures the rates a pattern cannot see, asks you the rest, and rejects a
594
+ failure that carries no quote or a quote that is not in the source. Answer it
595
+ section by section, one pass per section, never the whole list at once: sixty
596
+ questions held together get a sixty-th of your attention each. Fill the
597
+ `_coverage` map by dispositioning every paragraph; the verdict fails on any
598
+ paragraph nobody dispositioned, exactly as it fails on an unanswered check.
599
+ A non-zero exit is a failed check.
600
+ - **The delta.** Run
601
+ `python3 <skill-root>/scripts/register.py --delta <original> <final>` and
602
+ answer for what it prints: every inserted run must restate source meaning,
603
+ every cut emphasis word needs a named defect, and every rewritten span passes
604
+ the three direction tests — purpose has not become outcome, agency has not
605
+ moved, a warned future has not become an asserted present. The fact gate
606
+ cannot see any of these; this is where a reframed claim gets caught.
570
607
  - **Performed register.** Re-run the step 2 performed-register pass on the exact
571
608
  final text and state the counts. An exceeded antithesis budget, or a surviving
572
609
  significance-scaffolding sentence, is a failed check: the text returns through
@@ -607,6 +644,11 @@ the verifier's repairs. It may apply safe polish, but it may not add facts, stre
607
644
  claims, change qualifiers, rewrite quotations, alter protected structure, or replace
608
645
  the author's voice with generic polish.
609
646
 
647
+ Answer section F of `references/eval.md` as part of this pass. It asks whether the
648
+ roles actually stayed separate, whether any role certified its own output, and
649
+ whether the counts were reported. A generating role cannot answer those about
650
+ itself, which is why they sit with the finalizer.
651
+
610
652
  The pass completes only when it returns the full text and explicitly says
611
653
  `approve without changes`. If it changes anything, apply that complete revision,
612
654
  then rerun the copy desk, read-aloud editor, verifier, and fresh-eyes finalizer in
@@ -697,7 +739,9 @@ facts, meaning, structure, and whether the writing is performing rather than say
697
739
  ```
698
740
 
699
741
  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
742
+ step 2. Add a line for the register gate beside it: `Register gate: 58 checks, 0
743
+ failed` or the count that did fail. A report without it is a report that skipped the
744
+ checklist. **Print it even when both numbers are zero**, and print it on a draft that
701
745
  scored clean. It is the only evidence that the pass ran; a report without it is a
702
746
  report that skipped it.
703
747
 
@@ -778,7 +822,12 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
778
822
  Learning that corrupts the meter is worse than not learning.
779
823
 
780
824
  - **New tell spotted** (a pattern readers call out as AI that the scorer
781
- missed) → use the reflect loop for private adaptation. A maintainer may merge
825
+ missed) → use the reflect loop for private adaptation. When the catch comes
826
+ from an audit, a competing skill, or a reviewer rather than the meter, the
827
+ ratchet applies: it becomes a deterministic detector or a
828
+ `data/corpus/must-flag/` fixture in the same change, and
829
+ `register.py --recall` keeps proving it still gets caught. A note is not a
830
+ fix. A maintainer may merge
782
831
  reviewed contributions into `data/learned.json`, with a dated entry in
783
832
  `data/learned-log.md`, only after export review, local regex regeneration,
784
833
  the safety corpus, and the full test suite pass.
@@ -883,6 +932,9 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
883
932
  approves the verified text without changes or restarts every final pass.
884
933
  - `references/copy-desk.md` — the grammar, spelling, and style pass that prepares
885
934
  the selected rewrite for read-aloud finalization.
935
+ - `references/eval.md` — the pass/fail checklist for roles 7 and 8. It carries the
936
+ contextual and register families the meter cannot express as patterns, and it
937
+ requires the section A counts to be written down rather than judged silently.
886
938
  - `references/evidence.md` — the research basis: papers, detector mechanics,
887
939
  and why each ladder rung is ordered where it is.
888
940
 
@@ -0,0 +1,4 @@
1
+ The migration finished two days early and nothing in the on-call queue moved. We
2
+ rewrote the retry logic, dropped the queue depth from nine hundred to forty, and
3
+ cut the page count to one a week. That is a real improvement over last quarter,
4
+ and the new dashboard is a genuine breakthrough for the support rotation.
@@ -0,0 +1,15 @@
1
+ # Setup guide
2
+
3
+ ## Install
4
+
5
+ Users on the enterprise plan can download the installer.
6
+
7
+ ## Configure
8
+
9
+ Copy the sample settings and restart the daemon.
10
+
11
+ ## Everything else
12
+
13
+ The remaining steps live in the admin handbook, which covers rotation, backup,
14
+ and audit in more detail than this page can. Read it before the first deploy.
15
+ Each section carries a checklist, and the checklists are the part people skip.
@@ -0,0 +1,78 @@
1
+ {
2
+ "_comment": "The ratchet: every miss an audit or a competitor catches becomes a fixture here, in the same change. metric entries are verified by register.py --recall; check entries name the eval.md family a reading pass must catch, and --recall verifies the span exists and the family is a real check.",
3
+ "fixtures": [
4
+ {
5
+ "file": "adjective-inflation.md",
6
+ "expect": [
7
+ {
8
+ "metric": "adjective_inflation",
9
+ "span": "a real improvement"
10
+ },
11
+ {
12
+ "metric": "adjective_inflation",
13
+ "span": "a genuine breakthrough"
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "file": "monument-negation.md",
19
+ "expect": [
20
+ {
21
+ "metric": "monument_verb",
22
+ "span": "stands as a testament"
23
+ },
24
+ {
25
+ "metric": "negation_triad",
26
+ "span": "no runbook, no owner, no rollback"
27
+ },
28
+ {
29
+ "metric": "negation_triad",
30
+ "span": "Not reviewed, not staged, not announced"
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "file": "dangling-thin.md",
36
+ "expect": [
37
+ {
38
+ "metric": "thin_section",
39
+ "span": "Install"
40
+ },
41
+ {
42
+ "metric": "thin_section",
43
+ "span": "Configure"
44
+ },
45
+ {
46
+ "metric": "dangling_pointer",
47
+ "span": "download the installer"
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ "file": "referent-cycling.md",
53
+ "expect": [
54
+ {
55
+ "metric": "referent_cluster",
56
+ "span": "local tools"
57
+ },
58
+ {
59
+ "check": "Synonym cycling",
60
+ "span": "the local checker"
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "file": "mic-drop.md",
66
+ "expect": [
67
+ {
68
+ "metric": "verbless_fragment",
69
+ "span": "The review queue."
70
+ },
71
+ {
72
+ "check": "Antithesis pairs",
73
+ "span": "Different teams, different fixes, same bottleneck."
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ }
@@ -0,0 +1,4 @@
1
+ Three teams tried three different fixes and every fix shipped late for the same
2
+ reason. The review queue. Nobody owned it, so everything waited in it, and the
3
+ delay looked like engineering time on every dashboard that mattered. Different
4
+ teams, different fixes, same bottleneck. The queue.
@@ -0,0 +1,4 @@
1
+ The platform stands as a testament to three years of steady work. It serves as a
2
+ reminder of what a small team ships when nobody moves the goalposts. The launch
3
+ went out with no runbook, no owner, no rollback plan, and the postmortem said so
4
+ in the first line. Not reviewed, not staged, not announced.
@@ -0,0 +1,4 @@
1
+ Local tools score the draft first. Then the meter reports what moved, and the
2
+ scorer keeps a frozen copy for the regression suite. When the numbers disagree,
3
+ our own checks win, because the local checker is the only part that never
4
+ changes between runs. The pipeline hands the rest to review.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zero-slop",
3
- "version": "2.6.1",
3
+ "version": "2.7.1",
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",