Skip to content

The advice takes its own advice, and the teacher package stops quoting a corpus of ninety - #96

Merged
peopleworks merged 2 commits into
mainfrom
advice-without-dashes-and-before-2022
Sep 9, 2026
Merged

The advice takes its own advice, and the teacher package stops quoting a corpus of ninety#96
peopleworks merged 2 commits into
mainfrom
advice-without-dashes-and-before-2022

Conversation

@peopleworks

Copy link
Copy Markdown
Owner

Two issues that looked like tidying. Neither was.

#82 — the advice took its own advice

The packs delivered their advice with the mark one of the rules is about, the three empty-intensifier rules among them. Measured with the project's own instrument: rules.en.json advised at 2.1 em-dashes per 100 words, which EmDashAnalyzer calls Medium severity on anybody else's prose.

49 strings reworded. A list of alternatives keeps a comma — mix, blend, range, or just name the thing. A description after a label takes a colon — empty intensifier: cut it. Two were left with a full stop instead, because "who wrote it: and a text inside the range" is not English; the issue's own guard rail says if a rewrite reads worse, leave it.

The part the issue called cosmetic and is not. SuggestionParser cuts a suggestion at the first aside marker, and the em-dash is one of them. Twenty built-in rules state no replacements and fall through to that parser, so empty intensifier — cut it yielded one term and was refused for being alone.

A comma would have yielded two, and the live rewriter substitutes two. The words "empty intensifier" would have gone into somebody's sentence in place of "just". A colon is filtered by the parser; a comma is not. The obvious rewrite was the dangerous one.

So the guards are, per the issue's instruction, not a ban on dashes:

  • every built-in rule without explicit replacements must salvage nothing
  • each pack is held to the same 1.0 per 100 words the rule applies to everyone, rather than to zero — which would be a stricter rule than the one we publish, and the product would be wrong about itself again

#78 — verified before working, and the issue was already done

The issue listed ten surfaces and its own comment reported them swept in #85. That was true — all ten are clean. Two it never listed were not.

Docs/Paraphrase/README.md was the small one. Docs/Teaching/README.mdthe teacher package — carried five stale claims in one paragraph, the paragraph whose whole job is "this project can afford to say all that because it publishes how often it is wrong":

said is
ninety texts 296
before generative models existed before 2022
none flagged two are, at the recommended threshold
below 4.1% below 2.4%
neither language supports its own threshold English has since 0.6.0

Six weeks telling teachers the error rate was zero, on the artefact written for the person who has to act on a score. #85 fixed exactly this rot on why.html and never looked here, because nothing pointed from one to the other.

TeacherPackageTests now reads the same published-calibration.json the engine ships, the way WhyPageTests does. It also pins the two distinctions that are easy to get wrong and were: ninguno marcado must never return while anything is flagged, and the figure beside English is the bound at its threshold, not its best bound — the error a reviewer caught in the report on 1 September.

Verification

Every guard mutation-checked, since one that has never failed is untested:

  • the comma version of a delete rule fails by rule id, with the fix in the message
  • the previous rules.en.json fails the density test at 2.1
  • all three teacher-package guards fail against the paragraph that was live, each naming its own defect

366 + 72 + 7, plus the Windows desktop job's 31. The teacher guard normalises whitespace: a phrase can straddle a hand-wrapped line, and a guard that breaks on reflowing is one somebody weakens instead of satisfying.

🤖 Generated with Claude Code

https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF

peopleworks and others added 2 commits September 9, 2026 00:31
Closes #82.

The packs delivered their advice with the mark one of the rules is about, the
three empty-intensifier rules among them. Measured with the project's own
instrument, rules.en.json advised at 2.1 em-dashes per 100 words -- which
EmDashAnalyzer calls Medium severity on anybody else's prose.

49 strings reworded. A list of alternatives keeps a comma ("mix, blend, range,
or just name the thing"); a description that follows a label takes a colon
("empty intensifier: cut it"). Two were left with a full stop instead, because
"who wrote it: and a text inside the range" is not English -- the issue's own
guard rail: if a rewrite reads worse, leave it.

The part that was NOT cosmetic, and the issue said it was:

SuggestionParser cuts a suggestion at the first aside marker, and the em-dash
is one of them. Twenty built-in rules state no `replacements` and fall through
to that parser, so "empty intensifier -- cut it" yielded one term and was
refused for being alone. A comma would have yielded two, and the live rewriter
substitutes two: the words "empty intensifier" would have gone into somebody's
sentence in place of "just". A colon is filtered by the parser; a comma is not.

So the guard for that is the one that matters, and it is not a ban on dashes:
- every built-in rule without explicit replacements must salvage nothing
- each pack is held to the same 1.0 per 100 words the rule applies to everyone,
  rather than to zero, which would be a stricter rule than the one we publish

Both verified by mutation: the comma version fails by rule id, and the previous
pack fails the density test at 2.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF
Closes #78.

The issue listed ten surfaces still saying "before generative models existed"
and its own comment reported them swept in #85. Verified against the code
first, and that was true: all ten are clean. Two the issue never listed were
not.

Docs/Paraphrase/README.md was the small one -- the phrase, nothing else.

Docs/Teaching/README.md is the teacher package, and it carried five stale
claims in a single paragraph. The paragraph whose entire job is "this project
can afford to say all that because it publishes how often it is wrong":

  ninety texts            -> 296
  before generative models -> before 2022
  none flagged             -> two are, at the recommended threshold
  below 4.1%               -> below 2.4%
  neither language supports its own threshold -> English has since 0.6.0

Six weeks of a page telling teachers the error rate was zero, on the artefact
written for the person who has to act on a score. #85 fixed exactly this rot on
why.html and never looked here, because nothing pointed from one to the other.

So TeacherPackageTests reads the same published-calibration.json the engine
ships, the way WhyPageTests does. It also pins the two distinctions that are
easy to get wrong and were: that "ninguno marcado" must never come back while
anything is flagged, and that the figure quoted beside English is the bound *at
its threshold*, not its best bound -- the error a reviewer caught in the report
on 1 September.

Verified by mutation: all three fail against the paragraph that was live, each
naming its own defect. The guard normalises whitespace, because a phrase can
straddle a hand-wrapped line and a guard that breaks on reflowing is one
somebody weakens instead of satisfying.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015PEbbiYSNPw7jE3LrPNhyF
@peopleworks
peopleworks merged commit 631b1d6 into main Sep 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant