The meme-derived "the struggle is real" / "the stakes are real" punch line
asserts significance instead of showing it. Catalog it as a soft emphasis
crutch, restricted to abstract-emphasis subjects so the literal "is it
genuine?" sense (a painting that is real, not a forgery) is spared.
- banned_phrase_scan.py: new STRUCTURAL_PATTERNS regex (soft, emphasis_crutch)
- taboo-phrases.md: Emphasis Crutches table rows + detection-regex entry
- adversarial-evals.json: FN-06 (detection) + FP-14 (literal-sense guard)
- SKILL.md: 2.1.0 -> 2.2.0
Adversarial harness: PASS 54, FAIL 0; benchmark in sync.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Addresses the root cause behind the adversarial writing audit's B1: the skill
TAUGHT the anti-slop register. Its gold examples modeled bare fragment contrasts
and staccato triplets, so faithful operators reproduced them.
- edit-library.md: rewrote the three worst After examples (Patterns 1, 3, 12)
from fragment/staccato cadence into single varied sentences; tightened Pattern
2; added a "Vary the rhythm" transformation principle.
- crisp-human.md (the engine): sentence-length guidance now requires variety
("never three sub-six-word sentences in a row; avoid 'Not X. Y.'"); "one idea
per sentence / no compound thoughts" relaxed to allow flowing clauses; the two
antithesis gold examples rewritten; checklist gains rhythm + load-bearing-hedge
items.
- warm-human.md: rewrote the gold example that tripped binary_contrast.
- personality-guide.md: added two guardrails (don't invent a first-person voice
for impersonal copy; don't mistake de-hedging for voice in regulated content);
scoped the "show uncertainty" example.
- banned_phrase_scan.py: dropped the single-em-dash soft flag, keeping only the
2+ overuse flag, to match the revised "one appositive dash is fine" rule.
Result: all 0 gold After examples trip the scanner (was 8). Harness unchanged
(50 PASS / 1 XFAIL / 0 FAIL).
A red-team of the writing the skill PRODUCES (not just detection) confirmed the
core thesis: unslop can swap corporate slop for an equally-detectable "anti-slop"
register, and its validation is blind to the semantic facts most at risk. An
incentivized adversary attacked faithful skill outputs; the top findings were
re-verified by hand before fixing.
Scanner (B1, B7): the gold fragment-contrast form ("Not the technology. The
people.") and staccato triplets scored 0 — the scanner was blind to the skill's
own house style. Added an anti_slop_register category (fragment contrast +
staccato run, soft) and a readability staccato flag with no sentence-count gate.
Validation (B2): extract_constraints now captures cited references (Section 12(b),
Figure 2, Eq. 3) as hard must-preserve; validate_preservation warns when
negations, scope words, or conditionals are dropped ("does not support" ->
"supports"). SKILL.md no longer claims validation covers meaning.
SKILL.md guards (B3/B4/B6/B8): added "Register & genre guards" — don't de-hedge
regulated/technical text, don't invent first-person voice, avoid your own
staccato/fragment tell, keep warm text warm. Em-dash rule rewritten from "default
to zero" (which 2/4 presets violate) to "sparing appositive dash, never a splice".
Evals: +8 deterministic (AS-01/02/03, FP-12, PRES-08/09, SEM-01) and +8 behavioral
(SKILL-FRAGMENT/HEDGE/LEGAL/STACCATO/WARMTH/NOINVENT/OVEREDIT/EMDASH). Full
write-up in evals/ADVERSARIAL-WRITING-ANALYSIS.md.
Suite: 77 cases (51 script: 50 PASS / 1 XFAIL / 0 FAIL, 26 behavioral).
Adds research-sourced AI-writing tells the scanner was missing, applied
conservatively to keep false positives low, plus detection/FP-guard evals.
New patterns (scanner + references/taboo-phrases.md, with sources):
- Wikipedia "Signs of AI writing": plays a {vital,crucial,significant} role,
enduring/lasting legacy, leaves a lasting impact, watershed moment, in the
realm of, rich cultural heritage, stunning natural beauty, has been described
as, is widely regarded as, some critics argue, observers have noted, would be
complete without, in this article we will explore, as an AI language model
- Berens & Kobak (Science Advances 2024, excess-vocab study of 14M PubMed
abstracts): elucidate, delineate, underpin, unveil, seamless, invaluable,
noteworthy, revolutionize, holds (great) promise, new avenues, shed new light,
warrants further, it should be noted that, in recent years, with the advent
of, taken together, garnered significant attention, a deeper understanding of
Restraint to avoid false positives:
- academic single-words are soft (flag when clustered, not on one use)
- gated "serves as a"/"stands as a" behind significance nouns, so "serves as a
kitchen" is clean but "serves as a testament" still flags
- skipped cluster-only words (notably, particularly, demonstrate, exhibit)
Evals: DET-01..07 detection cases, FP-10/11 false-positive guards.
Suite now 62 cases (44 script: 43 PASS / 1 XFAIL / 0 FAIL, 18 behavioral skill).
Robustness:
- every script now exits cleanly (code 2) on a missing/unreadable input file
instead of raising a traceback (was only fixed for validate_preservation)
- runner adds a per-case timeout and survives a missing command/crash instead
of aborting the whole run
- gated two more context-sensitive single words behind their jargon
collocations: "harness" (a horse harness vs "harness the power of") and
"foster" (a foster family vs "foster a culture of")
CI:
- .github/workflows/evals.yml compiles the scripts and runs the regression
harness on every push and PR; only an undocumented FAIL breaks the build
New eval cases (script target, all passing):
- FP-07/08 literal harness/foster; FP-09 smart-quote exemption
- REC-01/02/03 recall guards proving the gating still flags real jargon and
stacked slop (so de-noising can't silently gut detection)
- PRES-05 comma-format equality, PRES-06 $2.4M == $2.4 million, PRES-07 dropped
quarter is a lost fact
- ROB-04..07 missing-file robustness for each script, ROB-08 empty stdin
Suite: 53 cases (35 script: 34 PASS / 1 XFAIL / 0 FAIL, 18 behavioral skill).
Flips 19 of the 20 deterministic xfail cases to PASS (FP-06, literal
"delve into a place", stays xfail as an accepted regex sense-ambiguity limit).
Final: 20 PASS, 1 XFAIL, 0 FAIL.
Fact preservation (validate_preservation.py, extract_constraints.py):
- currency compares absolute magnitude, so $47.3M no longer equals $47.3 billion
- percentages require an exact token match (12% no longer matches 120%)
- dates require the month, not just the year (March 3 2020 != December 2020)
- bare integers and whole phone numbers are now tracked as constraints
- faithful rewordings ($47.3M -> $47.3 million) still pass, no false missing
- missing input files exit cleanly instead of raising a traceback
Scanner (banned_phrase_scan.py):
- removed over-broad entries: "the real" (hit "the real estate"), bare
"period."/"full stop." (hit any sentence ending in "period")
- gated context-sensitive words (leverage, navigate, tapestry, boasts) behind
jargon collocations so literal/financial senses aren't flagged
- added missing tells: in conclusion, firstly/secondly, underscore the
importance, treasure trove, ever-evolving, rich mosaic, plus stop-slop's
false-agency family (numbers speak for themselves, data tells a story)
- quote masking: dropped the 500-char cap, allowed multi-line quotes, and
stopped masking single-quoted prose that was hiding real slop
Robustness (readability_metrics.py, diff_check.py):
- numeric-only text counts as words instead of reading as empty
- punctuation-only edits register as change instead of 0%
Kept references/taboo-phrases.md in sync with the new scanner patterns.
Adds chatbot-deference phrases, stacked-negation parallelisms,
and AI vocabulary (meticulous, bolstered, vibrant, etc.).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add em-dash detection to scanner (soft for single, hard for multiple per paragraph)
- Add ~40 new banned phrases: resonates with, speaks volumes, at the intersection of, etc.
- Add structural patterns: colon reveals, staccato fragmentation, So-openers, exclamation overuse
- Promote Punctuation Abuse to top-level section in taboo-phrases.md
- Fix contradictory examples that used em-dashes in "after" text
- Update SKILL.md workflow to explicitly require em-dash elimination in Pass 2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>