From the 2026-09-21 dogfood notes.
Regex cannot catch a rhetorical shape once its trigger word is gone. The antithesis rule keyed on "not" and "never"; the sentence a reader called out as LLM-generated had neither, and twelve days later "The correction was right. The place it landed was the problem." passed the widened rule for the same reason. Each miss became a measured branch plus a fail fixture, and the pass fixture gained the legitimate uses of the same words so the branch cannot drift wider than measured:
I've seen that read as a hole in his argument. It's the frame proving itself. (fail, 2026-09-08)
The correction was right. The place it landed was the problem. (fail, 2026-09-20)
Two collections beats one. This is the answer we shipped in June. (pass, must keep passing)
And: measure a new branch against the corpus before it ships at warning. Every branch in that rule carries its false-positive count from a run over the repository's markdown; a verdict-noun branch that looked broad returned one hit outside its fixtures. Without the number, a rule gets switched off the first week it fires on real prose.
# Every branch measured against the repo's 1,100 markdown files on
# 2026-09-20. Corpus false positives per branch: 0, 0, 4, 2, 1. All of
# the four were written by the assistant, never by the human author.
create-vale-rule.md has the fixture mechanics but no workflow step for either: no "a voice rule is a floor", no "run it over the corpus and record the count next to the branch".
What to do
- Recipe: a short workflow section for voice/tone rules — floor not ceiling, miss → fail fixture + legitimate-use pass fixture, corpus run before
warning, count recorded in a comment beside the branch; topic version bump.
- Consider whether
taskless check --rule <id> (or the existing filter, if one exists) is the documented way to get the corpus count; if there is no single command for "run one Vale rule over the whole repo and count", say so here and file it.
- No changeset (recipe only).
From the 2026-09-21 dogfood notes.
Regex cannot catch a rhetorical shape once its trigger word is gone. The antithesis rule keyed on "not" and "never"; the sentence a reader called out as LLM-generated had neither, and twelve days later "The correction was right. The place it landed was the problem." passed the widened rule for the same reason. Each miss became a measured branch plus a fail fixture, and the pass fixture gained the legitimate uses of the same words so the branch cannot drift wider than measured:
And: measure a new branch against the corpus before it ships at
warning. Every branch in that rule carries its false-positive count from a run over the repository's markdown; a verdict-noun branch that looked broad returned one hit outside its fixtures. Without the number, a rule gets switched off the first week it fires on real prose.create-vale-rule.mdhas the fixture mechanics but no workflow step for either: no "a voice rule is a floor", no "run it over the corpus and record the count next to the branch".What to do
warning, count recorded in a comment beside the branch; topic version bump.taskless check --rule <id>(or the existing filter, if one exists) is the documented way to get the corpus count; if there is no single command for "run one Vale rule over the whole repo and count", say so here and file it.