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 +123 -94
- package/SKILL.md +56 -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 +267 -0
- package/scripts/register.py +850 -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.1-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.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.
|
|
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.
|
|
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.
|
|
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",
|