Repository navigation
Upstream intake 2026-11-04: curly apostrophes, surprisingly, wider A3 (1.3.0) - #8
Merged
Merged
Conversation
A TELL check never shows in the FAIL table, so a change to one could not be measured with the repo's own scripts. The new tables give the share of texts where each check fires and the AUC of the number of items found per text.
The checklist patterns are written with a straight apostrophe, so it's, let's and we'll in GPT's curly form slipped past A1, A4, A32, B3 and the rest. Source: theclaymethod/unslop@17ed39c, scripts/banned_phrase_scan.py. evaluate.py, same held-out split (40 human posts, 14 per model), checklist AUC: blog opus 0.753 -> 0.746, sonnet 0.997 -> 0.996, gpt 0.830 -> 0.854 (A32 on GPT 7% -> 29%); fiction gpt 0.911 -> 0.922; Spanish unchanged. Held-out humans: no new FAIL in any register; one blog post now trips A4 (0 -> 2.5%).
The word lists of slop-score (data/slop_list.json), Antislop (slop_words_2025-04-07.json) and avoid-ai-writing@ccc8fc4 (detector tiers) were scored entry by entry on the training split, with the rule every ai-lean.txt entry passed: at most 4% of human posts, at least 10% of assistant posts. 2,779 entries came in that the lexicons did not hold; one survived. evaluate.py, blog, held-out: AI-lexicon AUC sonnet 0.857 -> 0.861; B1 FAIL on GPT posts 43% -> 50%; held-out humans 0% -> 0%. Sources for this and the curly-apostrophe change are now in references/sources.md.
A3 caught "the real question is" only. unslop@17ed39c (taboo-phrases.md) lists "the real X is" with any noun. evaluate.py, held-out split: blog A3 on Sonnet posts 0% -> 14%, T1 FAIL on Sonnet 93% -> 100%, checklist AUC sonnet 0.996 -> 1.0, opus and gpt unchanged; held-out humans unchanged (A3 5%, no FAIL). Fiction and Spanish unchanged.
The skill against the same rewriter with one sentence of instruction and the same notes, a human post given as the draft, and every upstream candidate measured this week and not shipped, with its numbers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This was the first read of all eight reference repos, so I went through each whole tree. Three small detection changes shipped, plus a change to
evaluate.pyso their gains show up in the repo's own output. I measured 27 candidates and 4 evaluation methods. Most were rejected, and two that passed the cheap screen made rewrites worse in the end-to-end runs.The human corpora were rebuilt for this run (160 dev.to posts with 40 held out, 157 stories, 245 Spanish posts). dev.to no longer returns 7 of the posts behind the shipped bands, so the absolute figures differ a little from
numbers.md. Every before/after pair below was measured on the same corpus, chosen on the training split and judged on the held-out one.Shipped
Curly apostrophes count as straight ones in
audit.py. The checklist patterns use', and GPT writesit’sandlet’s, so those posts slipped past A1, A4, A32, B3 and the rest. Source: theclaymethod/unslop@17ed39c,scripts/banned_phrase_scan.py.No held-out human text fails anything new in any register. One blog post by a person now trips A4 (0% to 2.5%), and that one post is the whole of the Opus drop.
surprisinglyjoins the blog lexicon. The word lists from slop-score, Antislop and avoid-ai-writing@ccc8fc4 were scored one entry at a time against the rule everyai-lean.txtentry passed: no more than 4% of human posts and at least 10% of assistant posts, on the training split. Of 2,779 entries the lexicons did not already hold, one survived.A3 now catches "the real X is" with any noun, not only "the real question is". Source: unslop@17ed39c,
taboo-phrases.md.evaluate.pyreports how often each check fires and the checklist AUC. Before this, a TELL check never showed up in its output, so none of the three changes above could be measured with the repo's own scripts.Measured and not shipped
All of these are also in
references/numbers.md, so they won't come up again without new evidence.factdiff.pyTwo findings from the end-to-end runs
Both are now in
references/numbers.md.Deferred
Nothing.
A ledger of everything tried
From now on,
/upstream-synckeeps.claude/skills/upstream-sync/tried.json, a record of every candidate it has measured. Each entry has its source, the numbers that decided it and what new evidence would justify trying it again. The ledger starts with 53 entries: this week's candidates plus the rejections already listed inreferences/numbers.md.sync.py tried WORDsearches it, and the skill now does that before proposing anything, so next week won't spend time on what this week already ruled out. The skill also lists the pitfalls this run ran into, such as Windows encoding andcodexhanging on stdin.Notes
On Windows,
build-corpus*.shcrashes on emoji unless you setPYTHONUTF8=1, because the console encoding is cp1252. This PR doesn't fix that.The rewrites cost 144.5 USD, not counting the judges.
Version 1.3.0. All eight repos are marked as reviewed on 2026-11-04.