zero-slop 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -94
- package/SKILL.md +47 -4
- package/data/corpus/must-flag/adjective-inflation.md +4 -0
- package/data/corpus/must-flag/dangling-thin.md +15 -0
- package/data/corpus/must-flag/manifest.json +78 -0
- package/data/corpus/must-flag/mic-drop.md +4 -0
- package/data/corpus/must-flag/monument-negation.md +4 -0
- package/data/corpus/must-flag/referent-cycling.md +4 -0
- package/package.json +1 -1
- package/references/eval.md +250 -0
- package/scripts/register.py +781 -0
package/README.md
CHANGED
|
@@ -1,117 +1,134 @@
|
|
|
1
|
-
# Zero Slop
|
|
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.
|
|
8
|
+
<img alt="version" src="https://img.shields.io/badge/version-2.7.0-72528F">
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Score your writing 0 to 100 for AI slop, then edit it out without changing a single fact.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
model edits the draft; Zero Slop supplies the workflow and local source checks.
|
|
13
|
+

|
|
15
14
|
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
26
|
+
## How to install Zero Slop
|
|
24
27
|
|
|
25
|
-
Paste this
|
|
26
|
-
Agent Skills-compatible assistant:
|
|
28
|
+
Paste this into Claude Code, Codex, Cursor, OpenCode, Warp, or Zed:
|
|
27
29
|
|
|
28
30
|
```text
|
|
29
|
-
Install
|
|
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
|
-
|
|
34
|
+
Or install it with `npx`:
|
|
48
35
|
|
|
49
|
-
```
|
|
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
|
|
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
|

|
|
59
80
|
|
|
60
|
-
Eight roles form one workflow.
|
|
61
|
-
|
|
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
|
|
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
|
|
72
|
-
| 8. Fresh-eyes finalizer |
|
|
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
|
-
|
|
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,
|
|
77
|
-
|
|
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
|
-
|
|
85
|
-
you kept. Zero Slop
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
117
|
+
## What's inside
|
|
97
118
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
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)
|
|
112
|
-
[humanizer](https://github.com/blader/humanizer)
|
|
113
|
-
|
|
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
|

|
|
125
142
|
|
|
126
|
-
Those are Zero Slop's
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|

|
|
133
150
|
|
|
134
|
-
This is a small LLM-reviewed regression study
|
|
135
|
-
|
|
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
|
|
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+
|
|
151
|
-
|
|
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
|
-
##
|
|
183
|
+
## Where Zero Slop came from
|
|
161
184
|
|
|
162
|
-
Zero Slop
|
|
163
|
-
avoid-ai-writing
|
|
164
|
-
|
|
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
|

|
|
168
190
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
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.
|
|
5
|
+
version: "2.7.0"
|
|
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
|
|
@@ -567,6 +578,23 @@ format, and non-prose structure. Apply these contextual checks too:
|
|
|
567
578
|
and no hedging into mush.
|
|
568
579
|
- **Ease of reading.** A smart first-time reader should follow each sentence on
|
|
569
580
|
the first pass. A mechanically clean score does not excuse exhausting prose.
|
|
581
|
+
- **Run the checklist.** Work `references/eval.md` top to bottom on the exact final
|
|
582
|
+
text and answer every item. This is not optional and not a summary: the gate below
|
|
583
|
+
rejects an unanswered check the same way it rejects a failed one.
|
|
584
|
+
|
|
585
|
+
```
|
|
586
|
+
python3 <skill-root>/scripts/register.py --read <final> > questions.json
|
|
587
|
+
# answer every question into answers.json, quoting exact spans for any failure
|
|
588
|
+
python3 <skill-root>/scripts/register.py <final> --verdict answers.json
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
It measures the rates a pattern cannot see, asks you the rest, and rejects a
|
|
592
|
+
failure that carries no quote or a quote that is not in the source. Answer it
|
|
593
|
+
section by section, one pass per section, never the whole list at once: sixty
|
|
594
|
+
questions held together get a sixty-th of your attention each. Fill the
|
|
595
|
+
`_coverage` map by dispositioning every paragraph; the verdict fails on any
|
|
596
|
+
paragraph nobody dispositioned, exactly as it fails on an unanswered check.
|
|
597
|
+
A non-zero exit is a failed check.
|
|
570
598
|
- **Performed register.** Re-run the step 2 performed-register pass on the exact
|
|
571
599
|
final text and state the counts. An exceeded antithesis budget, or a surviving
|
|
572
600
|
significance-scaffolding sentence, is a failed check: the text returns through
|
|
@@ -607,6 +635,11 @@ the verifier's repairs. It may apply safe polish, but it may not add facts, stre
|
|
|
607
635
|
claims, change qualifiers, rewrite quotations, alter protected structure, or replace
|
|
608
636
|
the author's voice with generic polish.
|
|
609
637
|
|
|
638
|
+
Answer section F of `references/eval.md` as part of this pass. It asks whether the
|
|
639
|
+
roles actually stayed separate, whether any role certified its own output, and
|
|
640
|
+
whether the counts were reported. A generating role cannot answer those about
|
|
641
|
+
itself, which is why they sit with the finalizer.
|
|
642
|
+
|
|
610
643
|
The pass completes only when it returns the full text and explicitly says
|
|
611
644
|
`approve without changes`. If it changes anything, apply that complete revision,
|
|
612
645
|
then rerun the copy desk, read-aloud editor, verifier, and fresh-eyes finalizer in
|
|
@@ -697,7 +730,9 @@ facts, meaning, structure, and whether the writing is performing rather than say
|
|
|
697
730
|
```
|
|
698
731
|
|
|
699
732
|
The "two-part contrasts / announcements" row is the performed-register count from
|
|
700
|
-
step 2.
|
|
733
|
+
step 2. Add a line for the register gate beside it: `Register gate: 58 checks, 0
|
|
734
|
+
failed` or the count that did fail. A report without it is a report that skipped the
|
|
735
|
+
checklist. **Print it even when both numbers are zero**, and print it on a draft that
|
|
701
736
|
scored clean. It is the only evidence that the pass ran; a report without it is a
|
|
702
737
|
report that skipped it.
|
|
703
738
|
|
|
@@ -778,7 +813,12 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
|
|
|
778
813
|
Learning that corrupts the meter is worse than not learning.
|
|
779
814
|
|
|
780
815
|
- **New tell spotted** (a pattern readers call out as AI that the scorer
|
|
781
|
-
missed) → use the reflect loop for private adaptation.
|
|
816
|
+
missed) → use the reflect loop for private adaptation. When the catch comes
|
|
817
|
+
from an audit, a competing skill, or a reviewer rather than the meter, the
|
|
818
|
+
ratchet applies: it becomes a deterministic detector or a
|
|
819
|
+
`data/corpus/must-flag/` fixture in the same change, and
|
|
820
|
+
`register.py --recall` keeps proving it still gets caught. A note is not a
|
|
821
|
+
fix. A maintainer may merge
|
|
782
822
|
reviewed contributions into `data/learned.json`, with a dated entry in
|
|
783
823
|
`data/learned-log.md`, only after export review, local regex regeneration,
|
|
784
824
|
the safety corpus, and the full test suite pass.
|
|
@@ -883,6 +923,9 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
|
|
|
883
923
|
approves the verified text without changes or restarts every final pass.
|
|
884
924
|
- `references/copy-desk.md` — the grammar, spelling, and style pass that prepares
|
|
885
925
|
the selected rewrite for read-aloud finalization.
|
|
926
|
+
- `references/eval.md` — the pass/fail checklist for roles 7 and 8. It carries the
|
|
927
|
+
contextual and register families the meter cannot express as patterns, and it
|
|
928
|
+
requires the section A counts to be written down rather than judged silently.
|
|
886
929
|
- `references/evidence.md` — the research basis: papers, detector mechanics,
|
|
887
930
|
and why each ladder rung is ordered where it is.
|
|
888
931
|
|
|
@@ -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.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "An Agent Skill that scores AI-sounding prose 0-100 locally and rewrites it without losing a fact. Runs inside Claude Code, Codex, Cursor, Warp, Zed and other SKILL.md agents. Offline, zero dependencies, MIT.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skill",
|