Skip to content

Zero Slop v2.8.0

Choose a tag to compare

@manavmishra manavmishra released this 01 Sep 17:08
· 25 commits to main since this release

Count the antithesis family the report never had a row for

A 479-word manifesto with five antithesis pairs in it scored 13.4 and printed
Binary contrasts: 1 found, ok. The contrast row was doing what it was built to
do. It was the wrong row.

references/eval.md separates two families and the report only carried one.

  • A2, subtractive contrast — "X, not Y", "A rather than B" — judged on
    density, budget 6.0 per 1,000. RX_SUBTRACTIVE implements it correctly.
  • A1, antithesis pairs — two balanced statements, the second landing the
    twist, budget one per piece, and "three or more under 500 words means the
    register failed whatever the score said." Nothing measured it. No row, no
    budget, no detector, while A2 carried the whole family's name in the report.

antithesis_pair ships the two shapes reachable without a parser: the marked
form at either end of the pair ("Not perfect. Honest.", "The draft was cheap.
The signal it sent was not.") and adjacent isocolon, one verb frame with the
arguments swapped, matched on shared content words with a trailing -s folded
away so let/lets is one frame. Bare subject swap and unmarked reversal stay
the reader's judgment, exactly as references/tells.md says. The budget is
(0.0, 2): one is a device, two is a finding, at every length.

Bare imperatives stop reading as verbless fragments

An imperative is the base form, so it carries none of the inflection or
auxiliaries FINITE_VERB looks for. "Play to win." and "Build durable growth."
were both reported as verbless fragments — two of five hits, so 40% of that
document's one finding was wrong. That check is the one zero-slop.ai puts in its
headline, so the wrong hit was reaching readers.

Measured before shipping

  • 4 canonical anchors now counted — not-perfect-honest, draft-cheap-signal,
    isocolon-adapt, detection-fragile. All four were invisible before.
  • 0 findings across 64 clean files: must-not-flag, must-not-flag-shape,
    community-register, performed-register, must-flag, and the repo's docs.
  • register --selftest, --gate on README, 272 tests.

The writing score is unchanged. The register pass never moves it by design; this
release makes the failure visible, not the number worse.

Release records

slopscore.py is byte-identical this release, so the RAID+ and feature-ablation
numbers are what 2.8.0 produces — both pin the scorer by content hash and both
hashes still match, so only the version label beside them moved.
bench/version-comparison.json is a real re-run against 2.7.7 over 31
interleaved runs, and the README quotes its measured direction verbatim: 1.86%
lower median throughput, machine noise on a loaded laptop, not a speed claim.