zero-slop 2.8.6 → 2.8.8

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
@@ -5,7 +5,7 @@
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.6-72528F">
8
+ <img alt="version" src="https://img.shields.io/badge/version-2.8.8-72528F">
9
9
  <a href="https://hol.org/guard/plugins"><img alt="Listed in the HOL plugin registry" src="https://img.shields.io/badge/HOL%20registry-listed-2C6E8F"></a>
10
10
  <a href="https://github.com/hashgraph-online/awesome-ai-plugins#tools--integrations"><img alt="Listed in awesome-ai-plugins" src="https://img.shields.io/badge/awesome--ai--plugins-listed-2C6E8F"></a>
11
11
  <a href="https://zero-slop.ai/try/"><img alt="This README scores 11.6 out of 100 on the slop score, inside the human range" src="https://img.shields.io/badge/slop%20score-11.6%2F100-0f7d55"></a>
@@ -14,8 +14,7 @@
14
14
  Less slop, more pop in your writing.
15
15
 
16
16
  Zero Slop finds stock phrasing, mechanical rhythm, vague claims, and canned
17
- formatting, then gives your AI assistant or agent harness an editing workflow on guardrails. Its
18
- MIT-licensed local checks run offline; your existing AI assistant or harness does the editing.
17
+ formatting. Local checks run offline; your existing AI assistant does the editing.
19
18
  Score a draft at [zero-slop.ai/try](https://zero-slop.ai/try/); benchmark at
20
19
  [zero-slop.ai](https://zero-slop.ai).
21
20
 
@@ -63,12 +62,12 @@ Writing score: 9.5/100 [clear]
63
62
  ## Problem
64
63
 
65
64
  AI-assisted writing often converges on the same constructions: "It's not X. It's Y."
66
- "Here's the thing nobody tells you." One emdash is fine. Multiple emdashes, definitely slop. The same effect can come from repetition in the wording or the structure. Mechanical rhythm and overworked formatting can do it too.
65
+ "Here's the thing nobody tells you." Repeated wording, uniform rhythm, and
66
+ overworked formatting can have the same effect.
67
67
 
68
68
  Zero Slop is an Agent Skill and ships no model. Claude, GPT, or another compatible
69
- model edits; local tools check names, numbers, quotations, links, code, tables, and
70
- paths. Your AI compares meaning because matching words cannot catch every changed
71
- claim. It runs in any harness that reads `SKILL.md`.
69
+ model edits; local tools protect names, numbers, quotations, links, code, tables,
70
+ and paths. Your AI compares meaning that word matching cannot judge.
72
71
 
73
72
  ## How to install Zero Slop
74
73
 
@@ -84,10 +83,7 @@ Or install it with `npx`:
84
83
  npx skills add manavmishra/ZeroSlop --global
85
84
  ```
86
85
 
87
- Or from the registry, which also installs the scorer as a command. Zero Slop is
88
- listed in [awesome-ai-plugins](https://github.com/hashgraph-online/awesome-ai-plugins#tools--integrations)
89
- and carries a public profile in the [HOL plugin registry](https://hol.org/guard/plugins),
90
- where its trust score and scanner results are published:
86
+ Or install from npm, which also adds the scoring command:
91
87
 
92
88
  ```sh
93
89
  npx zero-slop install # add --harness codex|cursor|opencode|zed
@@ -95,8 +91,7 @@ npx zero-slop score draft.md # score without installing anything
95
91
  ```
96
92
 
97
93
  ChatGPT users can download [`dist/zero-slop-single-file.md`](dist/zero-slop-single-file.md).
98
- Claude.ai users can upload the [latest release ZIP](https://github.com/manavmishra/ZeroSlop/releases/latest/download/zero-slop.zip).
99
- `npx skills update zero-slop --global` updates a skills CLI installation later.
94
+ Claude.ai users can upload the [release ZIP](https://github.com/manavmishra/ZeroSlop/releases/latest/download/zero-slop.zip).
100
95
 
101
96
  ## How to use Zero Slop
102
97
 
@@ -135,9 +130,8 @@ above.
135
130
  9. Synonym cycling: the agent, the assistant, the tool, all one thing.
136
131
  10. Marketing riders: "robust" and "leverage" score only beside a marketing trigger, so a runbook stays quiet.
137
132
 
138
- A reading pass covers document-wide problems: repeated shapes, crowded statistics,
139
- and paragraphs that shuffle without loss. [`references/eval.md`](references/eval.md)
140
- has all 80 checks.
133
+ A reading pass covers repeated shapes, crowded statistics, and paragraphs that
134
+ shuffle without loss. [`references/eval.md`](references/eval.md) has all 80 checks.
141
135
 
142
136
  Human writing scored 9 to 21 in [`data/corpus/must-not-flag/`](data/corpus/must-not-flag/);
143
137
  unedited AI drafts averaged 77 across [`bench/examples.json`](bench/examples.json).
@@ -147,7 +141,13 @@ unedited AI drafts averaged 77 across [`bench/examples.json`](bench/examples.jso
147
141
 
148
142
  ![Eight editorial roles, a private learning loop, and a separate release review](assets/engine.svg)
149
143
 
150
- Eight roles form one workflow. Each is a job rather than a service, run as its own pass so nothing grades its own output. The research supports the checks, not the number eight, which is an engineering choice.
144
+ Eight responsibilities form one workflow. They are jobs, not separate models. An
145
+ installed assistant can isolate them.
146
+ The free web editor combines
147
+ the five AI responsibilities into one model response, then runs the scorer and source
148
+ checks locally. It makes at most one live model call and never describes that response
149
+ as independent review. The research supports the checks, not the number eight, which
150
+ is an engineering choice.
151
151
 
152
152
  | Role | Who does it | What happens |
153
153
  |---|---|---|
@@ -155,10 +155,15 @@ Eight roles form one workflow. Each is a job rather than a service, run as its o
155
155
  | 2. Interpreter | Your AI assistant | Reads the claims, purpose, audience, structure, and voice before changing anything. |
156
156
  | 3. Rewriter | Your AI assistant | Removes stock language and rebuilds order, rhythm, and tone without inventing detail. |
157
157
  | 4. Fact gate | Local tools | Rejects any version that changes names, numbers, quotations, links, code, tables, paths, or structure. |
158
- | 5. Copy desk | Fresh AI pass | Corrects grammar, spelling, usage, and consistency in the actual deliverable. |
159
- | 6. Read-aloud editor | Fresh AI pass | Fixes stumbles, repetition, weak transitions, and awkward flow. |
160
- | 7. Verifier | Local tools and your AI assistant | Compares text with source for facts, meaning, qualifiers, voice, format, structure. |
161
- | 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. |
158
+ | 5. Copy desk | Your AI assistant | Corrects grammar, spelling, usage, and consistency in the actual deliverable. |
159
+ | 6. Read-aloud editor | Your AI assistant | Fixes stumbles, repetition, weak transitions, and awkward flow. |
160
+ | 7. Verifier | Local tools and your AI assistant | Compares text with source for facts, meaning, qualifiers, voice, format, structure. In the web editor, source safety is checked locally. |
161
+ | 8. Fresh-eyes finalizer | Your AI assistant | Reads the finished text as a first-time reader and applies only safe polish. Any change receives one final local recheck. |
162
+
163
+ Missed editorial targets do not erase a useful edit or start an open-ended loop. Zero
164
+ Slop permits one targeted repair and one local recheck, then returns the safest
165
+ source-preserving edit with a plain warning. On the website, a failed model call falls
166
+ back to a conservative local edit instead of retrying through more providers.
162
167
 
163
168
  Studies find
164
169
  [predictable wording](https://arxiv.org/abs/2301.11305) and
@@ -193,7 +198,7 @@ The saved replay ran Zero Slop, [avoid-ai-writing](https://github.com/conorbrons
193
198
  [no-ai-slop](https://github.com/petergyang/no-ai-slop) and
194
199
  [humanizer](https://github.com/blader/humanizer) over 18 drafts with GPT-5.4, high
195
200
  reasoning, and pinned instructions. Zero Slop's outputs came from v2.5.9; later
196
- releases rescore those frozen outputs rather than pretend to regenerate them.
201
+ releases only rescore those frozen outputs.
197
202
 
198
203
  | Method | Mean writing score ↓ | Passed Zero Slop's local gates | Source check passed | Average length change |
199
204
  |---|---:|---:|---:|---:|
@@ -209,16 +214,15 @@ releases rescore those frozen outputs rather than pretend to regenerate them.
209
214
 
210
215
  ![Method-hidden editorial preference on 18 drafts](assets/bench-incumbent-hidden.png)
211
216
 
212
- Cross-checks the tools didn't build: the AIStoryHub checker's clean
213
- rates, and a method-hidden quality ranking.
217
+ Two cross-checks: AIStoryHub clean rates and a method-hidden quality ranking.
214
218
 
215
219
  ![External checker clean rates per method](assets/bench-external-checker.png)
216
220
 
217
221
  ![Method-hidden quality ranking, lower is better](assets/bench-blind-quality.png)
218
222
 
219
- This is a small LLM-reviewed regression study. It measures neither field accuracy nor a
220
- universal ranking. Drafts, hashes, and limits are in [`bench/README.md`](bench/README.md). The separate method-hidden two-way replay used
221
- Zero Slop v2.6.0 and is preserved in
223
+ This small LLM-reviewed regression study measures neither field accuracy nor a
224
+ universal ranking. Drafts, hashes, and limits are in [`bench/README.md`](bench/README.md).
225
+ The separate two-way replay used Zero Slop v2.6.0 and is preserved in
222
226
  [`bench/incumbent-blind-replay/`](bench/incumbent-blind-replay/).
223
227
 
224
228
  For the 38-item editorial panel, the current scorer matched the prior 84.2% result.
@@ -228,13 +232,11 @@ proof of general accuracy.
228
232
 
229
233
  ### Speed
230
234
 
231
- One busy Apple silicon Mac. Meter: 1,000 documents in 1.9929 seconds (501.8 per
232
- second), 15,201 words in 0.3223 seconds, worst stress case 2.2932 seconds.
233
- Reading pass: 0.7823 seconds for the same 1,000 (1278.3 per
234
- second), 0.1092 for the same large document, linear to 96,000 words. Learning
235
- pass, 8,000 words: 0.1592 seconds. Across 24 interleaved runs against 2.7.7 we measured
236
- 0.00% higher median throughput—effectively no difference. Editing
237
- time is excluded.
235
+ One Apple silicon Mac: the meter scored 1,000 documents in 1.9929 seconds
236
+ (501.8 per second), 15,201 words in 0.3223 seconds, and the worst stress case in 2.2932
237
+ seconds. The reading pass handled the same 1,000 in 0.7823 seconds (1278.3/second);
238
+ learning on 8,000 words took 0.1592 seconds. Across 24 interleaved runs against 2.7.7,
239
+ median throughput was 0.26% lower, effectively no difference. Editing is excluded.
238
240
 
239
241
  ### Reading-pass accuracy
240
242
 
@@ -282,7 +284,7 @@ passes, private learning, portfolio analysis, and release tests.
282
284
 
283
285
  ![Documented capabilities at pinned repository versions](assets/competitor-capabilities.png)
284
286
 
285
- The chart records which features each project documents. It says nothing about writing quality and is not a claim about which tool writes better. Reproduce by using these tests:
287
+ The chart says nothing about writing quality. Reproduce it with:
286
288
 
287
289
  ```sh
288
290
  python3 tests/test_all.py
package/SKILL.md CHANGED
@@ -2,7 +2,7 @@
2
2
  name: zero-slop
3
3
  license: MIT
4
4
  metadata:
5
- version: "2.8.6"
5
+ version: "2.8.8"
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
  ---
@@ -75,10 +75,12 @@ citations, and the ladder below orders the signals by measured strength.
75
75
 
76
76
  ## Eight roles, one pipeline
77
77
 
78
- Run the rewrite workflow as eight ordered roles. They are separate jobs, not eight
79
- models or services. The same Claude, GPT, or other compatible model in the user's AI
80
- assistant may perform every editorial role, but each must be a separate pass. Keep
81
- local and AI responsibilities distinct:
78
+ Run the rewrite workflow as eight ordered responsibilities. They are editorial jobs,
79
+ not eight models or services. In an installed assistant, use role-isolated passes when
80
+ the harness can do that without extra network calls. When a service has a one-request
81
+ budget, combine the AI responsibilities into one structured editorial response and
82
+ run the local checks before and after it. Name that consolidation honestly; one model
83
+ response is not independent review. Keep local and AI responsibilities distinct:
82
84
 
83
85
  1. **Scorer — local tools.** Point to exact phrases and problems with rhythm,
84
86
  readability, formatting, and register; explain the writing score.
@@ -90,25 +92,28 @@ local and AI responsibilities distinct:
90
92
  quotations, or links; among the rest, select the version that best clears the
91
93
  measured checks. This local check cannot certify reframed claims or invented
92
94
  interior meaning; the verifier handles those with contextual comparison.
93
- 5. **Copy desk — a fresh AI pass.** Correct grammar, spelling, punctuation, usage,
95
+ 5. **Copy desk — the AI assistant.** Correct grammar, spelling, punctuation, usage,
94
96
  diction, and consistency in the selected text.
95
- 6. **Read-aloud editor — a fresh AI pass.** Read the complete copy-edited text aloud
97
+ 6. **Read-aloud editor — the AI assistant.** Read the complete copy-edited text aloud
96
98
  and directly fix stumbles, repetition, weak transitions, and awkward flow.
97
99
  7. **Verifier — local tools plus the AI assistant.** Check the exact final text
98
100
  against the source for the writing score, facts, meaning, qualifiers, voice,
99
- format, and structure. This is a release gate, not advice: a warning blocks
100
- delivery. Any repair returns through roles 5 and 6 before role 7 runs again.
101
- 8. **Fresh-eyes finalizer a new AI pass.** Read the verified text as a first-time
102
- reader, apply only safe final polish, and approve it without changes. A role 8
103
- edit restarts roles 5 through 8; the finalizer never bypasses verification.
101
+ format, and structure. A warning prevents an unqualified approval; it never erases
102
+ a source-safe edit or starts an open-ended loop. Apply at most one targeted repair,
103
+ then rerun the local checks on the exact changed text.
104
+ 8. **Fresh-eyes finalizer the AI assistant.** Read the verified text as a first-time
105
+ reader and apply only safe final polish. If it changes the text, rerun the local
106
+ score and fact checks once. Deliver the safest edit with a plain warning if a
107
+ remaining concern would require another model request or a guess.
104
108
 
105
109
  This is an engineering separation of responsibilities, not a claim that research has
106
110
  proved eight to be the uniquely correct number. Studies support several different
107
111
  signal families and several different editorial failure classes; no single score or
108
112
  prompt can cover them all. The local roles provide repeatable measurements. The AI
109
- roles supply contextual judgment and editing. A generating role never certifies its
110
- own output. Role 7 verifies; role 8 confirms that the same verified text reads cleanly
111
- to someone seeing it for the first time.
113
+ roles supply contextual judgment and editing. A generating role does not certify its
114
+ own factual safety. Role 7 supplies the local release checks; role 8 confirms that the
115
+ result reads cleanly to someone seeing it for the first time. In a one-request service,
116
+ the model's self-check is editorial guidance, not independent verification.
112
117
 
113
118
  ## Detailed workflow
114
119
 
@@ -632,25 +637,29 @@ format, and non-prose structure. Apply these contextual checks too:
632
637
  read as prose. The whole document uses one coherent register, and every
633
638
  cross-reference resolves exactly.
634
639
 
635
- If verification requires any textual repair, send the repaired text through the copy
636
- desk and final read-aloud pass again, then repeat every final check. Continue until the
637
- same text clears the copy desk, final read-aloud pass, semantic and format review,
638
- scorer, and fidelity gate.
640
+ If verification finds a concrete textual defect, apply one targeted repair. Run the
641
+ local score, fact, format, and structure checks once more on that exact text. Do not
642
+ restart the complete editorial sequence. If the second check still finds a problem,
643
+ return the safest source-preserving edit and name the remaining issue plainly.
644
+
645
+ If an AI editorial role returns no usable text, record that it was unavailable and
646
+ continue from the last source-preserving text. Unavailability is an abstention, not a
647
+ reason to retry, switch models, or replay earlier roles. A caller with a one-request
648
+ budget must never make a second remote request. Report any role that did not complete.
649
+
639
650
  A required repair may raise the writing score from the previous draft as long as it
640
651
  stays below the release limit. Source meaning, stated emotion, and factual accuracy
641
652
  outrank a smaller number. Never discard a necessary semantic repair merely because an
642
653
  unsafe version scored lower; rerun every check on the repaired text instead.
643
- Limit this repair loop to three rounds. If a problem still cannot be resolved
644
- without guessing, return the best source-preserving version that completed both
645
- editorial passes and state the unresolved issue and failed check plainly. Outside
646
- that explicit three-round fallback, nothing reaches the user until the exact text
647
- being returned has cleared every final check. A fallback still must have completed the
648
- copy desk and read-aloud pass; never describe it as fully verified.
649
-
650
- Initial gate failure → rewrite and recheck (max 3 passes). Final verification
651
- repaircopy desk, read-aloud pass, and every check again (max 3 rounds). If the
652
- initial gate still fails after three passes, keep the best version and flag it:
653
- "needs a real claim/detail, not better words."
654
+ There is at most one targeted repair. If a problem still cannot be resolved without
655
+ guessing, return the safest source-preserving edit and state the unresolved issue,
656
+ unavailable role, or missed target plainly. Never replace an explicit rewrite request
657
+ with the unchanged source merely because a quality target was missed. A quality target
658
+ controls the confidence label; it does not decide whether the writer receives the work.
659
+ A fallback must never be described as fully verified when a check did not complete.
660
+
661
+ Initial gate failure → keep the best safe edit and flag the missed target. Final
662
+ verification defect one targeted repair and one local recheck. Then deliver.
654
663
 
655
664
  ### 8. Fresh-eyes finalizer — approve the reader's copy
656
665
 
@@ -671,14 +680,12 @@ roles actually stayed separate, whether any role certified its own output, and
671
680
  whether the counts were reported. A generating role cannot answer those about
672
681
  itself, which is why they sit with the finalizer.
673
682
 
674
- The pass completes only when it returns the full text and explicitly says
675
- `approve without changes`. If it changes anything, apply that complete revision,
676
- then rerun the copy desk, read-aloud editor, verifier, and fresh-eyes finalizer in
677
- that order. A role 8 edit therefore restarts roles 5 through 8. Limit the loop to
678
- three rounds. The same exact text must clear roles 5, 6, and 7 and then receive a
679
- no-change approval from role 8. If safe approval is impossible without guessing,
680
- return the best source-preserving version that completed every pass and name the
681
- unresolved span; do not call it fully verified.
683
+ The pass returns the full text plus one status: `approve without changes`, `changed`,
684
+ or `unresolved needs the writer`. If it changes anything, apply the complete revision
685
+ and rerun the local score, fact, format, and structure checks once. Do not restart the
686
+ model pipeline. If safe approval is impossible without guessing, return the safest
687
+ source-preserving edit, name the unresolved span or unavailable pass, and do not call
688
+ it fully verified.
682
689
 
683
690
  ### 9. Report in plain language
684
691
 
@@ -951,8 +958,8 @@ the AI model already running in the assistant or rewrite this `SKILL.md`.
951
958
  the signs of human writing to preserve.
952
959
  - `references/readalong.md` — the mandatory, separate read-aloud pass that
953
960
  fixes flow, cohesion, and stumbles directly in the deliverable.
954
- - `references/fresh-eyes.md` — the separate first-time-reader finalizer that
955
- approves the verified text without changes or restarts every final pass.
961
+ - `references/fresh-eyes.md` — the first-time-reader finalizer and its bounded
962
+ one-recheck rule.
956
963
  - `references/copy-desk.md` — the grammar, spelling, and style pass that prepares
957
964
  the selected rewrite for read-aloud finalization.
958
965
  - `references/eval.md` — the pass/fail checklist for roles 7 and 8. It carries the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zero-slop",
3
- "version": "2.8.6",
3
+ "version": "2.8.8",
4
4
  "description": "An Agent Skill that scores AI-sounding prose locally, guides the host AI through an editorial rewrite, and checks changed source details. The local tools run offline with zero dependencies.",
5
5
  "bin": {
6
6
  "zero-slop": "bin/zero-slop.mjs"
@@ -76,14 +76,11 @@ artifact returned by the read-aloud editor:
76
76
  2. Compare it directly with both the original and selected rewrite for preserved
77
77
  claims, qualifiers, intended voice, regional spelling, format, and non-prose
78
78
  structure. The script cannot detect every semantic or stylistic change.
79
- 3. If any check or comparison requires a repair, apply it, send the repaired
80
- text through the copy desk and read-aloud pass again, and repeat all
81
- final checks.
79
+ 3. If a check requires a repair, apply one targeted correction and rerun the
80
+ local score, fact, format, and structure checks once.
82
81
 
83
82
  After verification, send that exact text through the finalizer in
84
- `references/fresh-eyes.md`. Stop only when the same artifact clears the copy desk,
85
- read-aloud pass, semantic and format review, scorer, fidelity check, and receives a
86
- no-change fresh-eyes approval. Limit this repair loop to
87
- three rounds. If an issue still cannot be resolved without guessing, return the best
88
- source-preserving version that completed both editorial passes, flag the unresolved
89
- span and failed check plainly, and do not describe the fallback as fully verified.
83
+ `references/fresh-eyes.md`. Do not restart the model pipeline. If an issue still
84
+ cannot be resolved without guessing after the one local recheck, return the best
85
+ source-preserving version, flag the unresolved span and failed check plainly, and do
86
+ not describe the fallback as fully verified.
@@ -3,8 +3,11 @@
3
3
  Answer every check with pass or fail. Where a check asks for a count, write the
4
4
  number down; a count is evidence, and a missing count means the pass did not run.
5
5
 
6
- Any fail sends the text back through the copy desk and read-aloud pass, after which
7
- every check here runs again on the new text. Limit that loop to three rounds.
6
+ Any fail permits one targeted textual repair followed by one local recheck. It does
7
+ not restart the copy desk, read-aloud pass, or model request. A failed check changes
8
+ the confidence label. It never suppresses the edited text when that edit preserves
9
+ the source. After the recheck,
10
+ return the safest source-preserving edit and name every unresolved check plainly.
8
11
 
9
12
  **This file exists because the meter cannot see most of what is on it.** The scorer
10
13
  reads the lexically anchored subset: listed phrases, sentence-length variance,
@@ -298,16 +301,18 @@ the report even when they are zero.
298
301
 
299
302
  ## F. Process integrity
300
303
 
301
- Role 8 answers this section. It is the check no single-agent eval can make.
304
+ Role 8 answers this section when it runs separately. In a one-request service, the
305
+ local verifier records the execution facts and the report names the consolidation.
302
306
 
303
- 73. **Roles stayed separate.** The copy desk, read-aloud pass, verification, and
304
- fresh-eyes review each ran as a distinct pass.
305
- 74. **No self-certification.** No role graded text it generated.
307
+ 73. **Execution described accurately.** Separate passes are named as separate; a
308
+ one-response consolidation is named as one response, never as independent review.
309
+ 74. **No self-certification of facts.** The local source gate checks the generated
310
+ text even when the model performs an editorial self-check inside one response.
306
311
  75. **Counts reported.** Every count in section A appears in the summary, including
307
312
  the zeros.
308
313
  76. **The exact final text cleared every check.** Not an earlier draft, not a version
309
314
  that was repaired afterward.
310
- 77. **Role 8 approved without changes.** If it changed anything, roles 5 through 8
311
- ran again on the revision.
312
- 78. **Fallbacks named honestly.** If the three-round limit was reached, the report
313
- says which check failed and does not describe the result as fully verified.
315
+ 77. **Finalizer edits were rechecked locally.** If role 8 changed anything, the score,
316
+ fact, format, and structure checks ran once on that exact revision.
317
+ 78. **Fallbacks named honestly.** The report names an unavailable role, local fallback,
318
+ missed target, or one-request constraint and does not call it fully verified.
@@ -48,17 +48,11 @@ and name the ambiguity.
48
48
  > followed by exactly one status: `approve without changes`, `changed — rerun final
49
49
  > checks`, or `unresolved — needs the writer`.
50
50
 
51
- ## Closed finalization loop
52
-
53
- Approval is valid only when the finalizer returns `approve without changes`. If it
54
- changes even one character, apply the complete revision and rerun, in order:
55
-
56
- 1. the copy desk;
57
- 2. the read-aloud editor;
58
- 3. the verifier, including local and contextual checks; and
59
- 4. this fresh-eyes finalizer.
60
-
61
- Repeat for at most three rounds. The same exact text must clear all four roles, with
62
- the fresh-eyes finalizer approving it unchanged. If the remaining issue cannot be
63
- fixed without guessing, return the best source-preserving text that completed every
64
- pass, identify the unresolved span, and do not describe it as fully verified.
51
+ ## Bounded finalization
52
+
53
+ Return `approve without changes`, `changed`, or `unresolved needs the writer`. If
54
+ the finalizer changes the text, apply the complete revision and rerun the local score,
55
+ fact, format, and structure checks once. Do not restart the AI pipeline. If the local
56
+ recheck fails, return the safest source-preserving edit, identify the unresolved span,
57
+ and do not describe it as fully verified. An unavailable finalizer is an abstention;
58
+ it never starts another model request.
@@ -110,22 +110,19 @@ use this brief:
110
110
 
111
111
  Apply the returned artifact to the actual deliverable before verification.
112
112
 
113
- ## Finalization loop
113
+ ## Bounded finalization
114
114
 
115
115
  Verify the exact artifact returned by the read-aloud editor:
116
116
 
117
117
  1. Rerun the heuristic surface scorer and scripted fidelity check.
118
118
  2. Compare it directly with the original and selected rewrite for claims,
119
119
  qualifiers, intended voice, regional spelling, format, and non-prose structure.
120
- 3. If any check requires a textual repair, apply it, run the copy desk again, run
121
- this read-aloud pass again, and repeat every final check.
122
-
123
- Stop only when the same artifact has cleared the copy desk, final read-aloud pass,
124
- semantic and format review, scorer, fidelity check, and the separate fresh-eyes
125
- finalizer in `fresh-eyes.md`. Limit this repair loop to
126
- three rounds. If an issue still cannot be resolved without guessing, return the best
127
- source-preserving version that completed both editorial passes, state the unresolved
128
- span and failed check plainly, and do not describe the fallback as fully verified.
120
+ 3. If a check requires a textual repair, apply one targeted correction and rerun the
121
+ local score, fact, format, and structure checks once.
122
+
123
+ Do not restart the copy desk or read-aloud pass. If an issue still cannot be resolved
124
+ without guessing, return the best source-preserving version, state the unresolved span
125
+ and failed check plainly, and do not describe the fallback as fully verified.
129
126
 
130
127
  ## Why it is separate
131
128