sloplint 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0aabc7314411211ed5adcbb5e09bb81a4291b2ffb7748e8d07d15f0150e6c43c
4
- data.tar.gz: f8c9af283d490a6acb2d4cd6260ccc776e868542be3f1b10066ec6232e856ea0
3
+ metadata.gz: 7b924df142be1939d6da4e27d2e925b2de378cbe835e5c9ea41e3c3b0b046633
4
+ data.tar.gz: 128a3a13dd8d4dc81610266ede34b52e73293b61af560ff7fa26d9dbd9708dd5
5
5
  SHA512:
6
- metadata.gz: 508f10329c7698ab4cce5b1dd09902984975ed2baeaa5646b7c288d33ee913f1a8f19e2aba36ab860a77a7b2ea2acde07748ce11db39367958c6ec86af3b4b1f
7
- data.tar.gz: b75def69bddf045ddab9f99798985cf210ae7b3997266f9199600cf77638b5db8759738879b51949f31945b2ad183706b34654736cfdd7420f292c5442d2445d
6
+ metadata.gz: ffc7954ff2c5ccab7e431e007be51bddbb0a42cf27fe54a1c8629ec90c9c0c47c9a7ceba91bc03116f38303241efcf7b4263a84376aedae67a95dae2877d3db8
7
+ data.tar.gz: f0c893e80441a5e738a5a037897a064b9cf201fb1bca6f5ca5e1b160eabbf2d5c7d870800a0d8ac36263b00a8dbc0ca331673da4f302a3e2e4a3f41346248e3e
data/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.8.1] - 2026-09-20
9
+
10
+ ### Added
11
+
12
+ - `cataphoric-teaser` (self-rating, warning, high confidence): the
13
+ forward-pointing tease that sells a claim as rare knowledge before making
14
+ it. "Here's what nobody tells you about hiring.", "The part most people get
15
+ wrong is the rollback." Three closed frames (a forward demonstrative, a
16
+ noun slot, a scarcity subject and a verb of telling); the bare-subject
17
+ form must reach a copula or colon, and "that's what nobody understands"
18
+ points backward and is left alone.
19
+ - `punch-sentence` (cadence, info, medium confidence): the verbless beat of
20
+ one to three words wedged between two long sentences in the middle of a
21
+ paragraph, "Not anymore." and "Simple.", which `mic-drop-closer` and
22
+ `bare-auxiliary-closer` only see at a paragraph's end. Two closed shapes:
23
+ a negator with up to two words after it, or one capitalised word of five
24
+ letters or more. Titles, initials and case citations before the stop are
25
+ guarded, and short clauses with a subject ("He agrees.") are not matched.
26
+
8
27
  ## [0.8.0] - 2026-09-15
9
28
 
10
29
  ### Changed (breaking)
data/README.md CHANGED
@@ -156,11 +156,11 @@ An unknown id or category in `--select`/`--ignore` is a usage error (exit 2, nam
156
156
 
157
157
  ## The rule catalog
158
158
 
159
- 80 rules across nine categories, each named for the rhetorical move the construct makes. `sloplint rules` prints them; `sloplint rules --json` gives an agent the enumerable form.
159
+ 82 rules across nine categories, each named for the rhetorical move the construct makes. `sloplint rules` prints them; `sloplint rules --json` gives an agent the enumerable form.
160
160
 
161
- - **self-rating** (15) the writer grades their own prose or claim: `clean-x`, `clean-count`, `cleanest-x`, `cleanly`, `honest-x`, `most-honest-x`, `honestly` (the honesty family, built the same way as the four `clean` rules), `worth-naming`, `worth-saying-plainly`, `earns-its-place`, `does-a-lot-of-work`, `exact-exactly`, `genuinely` (off by default), `the-punchline-is`, `announced-takeaway`.
161
+ - **self-rating** (16) the writer grades their own prose or claim: `clean-x`, `clean-count`, `cleanest-x`, `cleanly`, `honest-x`, `most-honest-x`, `honestly` (the honesty family, built the same way as the four `clean` rules), `worth-naming`, `worth-saying-plainly`, `earns-its-place`, `does-a-lot-of-work`, `exact-exactly`, `genuinely` (off by default), `the-punchline-is`, `announced-takeaway`, `cataphoric-teaser` ("Here's what nobody tells you", "the part most people get wrong").
162
162
  - **closer** (12) closes by restating or announcing the point: `thats-the-whole`, `is-the-whole-x` (the same closer on any subject: "Consistency is the real test.", at `medium` confidence), `is-the-entire`, `the-entire-is`, `thats-how-x`, `thats-the-tension`, `right-up-until`, `and-nothing-else` (the trailing "…, and nothing else"), `nothing-else-frag`, `bare-equative` ("The lesson is the handoff.", at `medium` confidence), `trailing-restatement` (the "…, which means …" tail that says the sentence again, off by default), `and-what-it-should` (the elliptical tail: "…, and what it should.").
163
- - **cadence** (17) rhythm: repetition, parallelism, and the long-then-short kicker: `no-x-no-y`, `no-x-no-y-frag`, `did-not-x-did-not-y`, `one-x-one-y` ("one reviewer, one queue, one deadline"), `from-x-to-y-chain` ("from guessing to measuring, from hoping to knowing"), `same-determiner-chain` (any other repeated determiner, at `medium` confidence), `real-x-real-y`, `epistrophe` (off by default), `phrase-echo` (off by default), `is-is` (doubled copula), `the-x-is-the-x` ("the problem with A is the problem with B"), `rule-of-three` (off by default), `everyone-nobody` (the comma-spliced antithesis: "Everyone wants the dashboard, nobody maintains it."), `short-run` (three sentences of thirty characters or fewer in a row, at `medium` confidence), `mic-drop-closer` (the short quantifier-led sentence that ends a paragraph after a long one, at `medium` confidence), `bare-auxiliary-closer` (the same shape, but the closer's verb is elided down to a bare auxiliary: "The agent did.", at `medium` confidence), `np-fragment-and` (the verbless "A named owner and a quarterly review.", at `medium` confidence).
163
+ - **cadence** (18) rhythm: repetition, parallelism, and the long-then-short kicker: `no-x-no-y`, `no-x-no-y-frag`, `did-not-x-did-not-y`, `one-x-one-y` ("one reviewer, one queue, one deadline"), `from-x-to-y-chain` ("from guessing to measuring, from hoping to knowing"), `same-determiner-chain` (any other repeated determiner, at `medium` confidence), `real-x-real-y`, `epistrophe` (off by default), `phrase-echo` (off by default), `is-is` (doubled copula), `the-x-is-the-x` ("the problem with A is the problem with B"), `rule-of-three` (off by default), `everyone-nobody` (the comma-spliced antithesis: "Everyone wants the dashboard, nobody maintains it."), `short-run` (three sentences of thirty characters or fewer in a row, at `medium` confidence), `mic-drop-closer` (the short quantifier-led sentence that ends a paragraph after a long one, at `medium` confidence), `bare-auxiliary-closer` (the same shape, but the closer's verb is elided down to a bare auxiliary: "The agent did.", at `medium` confidence), `np-fragment-and` (the verbless "A named owner and a quarterly review.", at `medium` confidence), `punch-sentence` (the verbless beat of three words or fewer between two long sentences, "Not anymore.", at `medium` confidence).
164
164
  - **puffery** (8) inflates the subject: `puffery-words` (vibrant, nestled, groundbreaking, in the heart of), `rich-tapestry`, `vital-role`, `stands-serves-as`, `underscores-highlights`, `impact-noun-vague` ("a significant impact", "make an impact"), `trailing-significance-participle` (the "…, showcasing its importance" clause), `abstract-lives-in` ("the value sits in the follow-up", at `medium` confidence).
165
165
  - **false-correction** (8) corrects a reading nobody offered: `not-just-x-but-y`, `not-x-but-y` (the bare corrective), `not-by-x-but-by-y` ("not by luck, but by design"), `isnt-x-its-y` (the same corrective split across two clauses: "It isn't the tool. It's the habit."), `question-isnt` (the corrective frame in interrogative dress), `less-about-more-about`, `actually-not-x`, `dont-verb-it`.
166
166
  - **false-concession** (7) performs balance or candour and gives nothing up: `two-things-true`, `none-of-this-is-to-say`, `is-real-and-not`, `not-nothing`, `vague-attribution` ("some critics argue", "it is widely regarded"), `if-im-being-honest` (the candor preamble, from slopwash.com's "false intimacy"), `and-thats-fine`.
data/docs/SPEC.md CHANGED
@@ -47,6 +47,9 @@ so the source never needs to enter the repository.
47
47
  - **A reference corpus of human prose must be public domain.** Copyrighted text
48
48
  can't be redistributed, so a corpus built from it can't live in the repo, and
49
49
  neither can the false-positive check that depends on it.
50
+ - **The probe corpus is fetched, not committed.** `script/probe-raid fetch` pulls
51
+ RAID (Dugan et al. 2024, MIT) into `.corpus/`, which is ignored. The script
52
+ and the numbers it prints may be quoted in a commit message; the texts may not.
50
53
 
51
54
  This repository is MIT-licensed, so anything committed is redistributable by
52
55
  anyone. Writing the fixtures ourselves also means nobody's prose gets held up as
@@ -313,6 +316,7 @@ The writer grades their own prose or claim.
313
316
  - `genuinely` — any "genuinely"; `low` confidence, off by default; no narrowing holds
314
317
  - `the-punchline-is` — "the punchline is/:/?", "the honest answer/version is"; "short version" left out; ordinary writing
315
318
  - `announced-takeaway` — colon-led label: "The pattern/lesson/takeaway…:"; sentence-initial
319
+ - `cataphoric-teaser` — the forward-pointing tease, sentence-initial, in three closed frames: an optional forward demonstrative ("here's", "here is", "this is", with one lead-in word allowed: "So here's"), a noun slot (what / the part / the thing / the bit / the secret), a scarcity subject (nobody, no one, most X, few people, hardly anyone, almost nobody, people), up to two adverbs, and a verb of telling, getting wrong, talking about, admitting or noticing: "Here's what nobody tells you about hiring.", "The part most people get wrong is the rollback." Without the demonstrative the sentence must reach a copula or a colon ("What nobody tells you is…"), since "What nobody tells you gets forgotten." is a report, and "they" is allowed only after a demonstrative, since a bare "What they don't realize is" refers to the people in the story. "That's what nobody understands" points backward and is left alone.
316
320
 
317
321
  ### closer
318
322
 
@@ -351,7 +355,7 @@ Rhythm: repetition, parallelism, and the long-then-short kicker.
351
355
  - `short-run` — three consecutive sentences of thirty characters or fewer, each letter-led and closing on a full stop, no quotation marks or digits, no lone-letter labels (either case, though a possessive is not one) or abbreviations, starting at a real sentence boundary (never on a wrap continuation), crossing a hard wrap but not a paragraph break; `medium` confidence. A list marker may open a run but never sit inside one, so consecutive bullets are a list — the marker set covers glyphs, the literal "o" plain-text documents use as a bullet, and numbered and lettered items. Two whole-run exclusions keep document furniture out, each a property of the run rather than of any sentence in it: three single-word sentences in a row is a citation line ("Natl. Inst. Stand. Technol."), and three lowercase-led sentences in a row is transcribed speech ("we all get gas. we go to divert to Albany."). One single-word sentence is the archetypal kicker and stays, and a run that reaches a capital anywhere is prose, so identifier-initial writing ("npm was slow. git blame helped. We moved on.") is untouched. One is a question; a draft that repeats it is the tell.
352
356
  - `mic-drop-closer` — a sentence of 60+ characters, then a paragraph-final closer of two to eight words opening on a **quantifier** (Nothing, Most, None, Everything, Everyone, Nobody, Then, Neither, Both): "Nothing here needs a new login."; `medium` confidence. The bare demonstratives (That, This, It) were in the list and are out: procedural writing ends a step with one as a matter of course ("This completes the roughing operations."). A blank line or the end of the text must follow the closer; both sentences may be hard-wrapped; whitespace runs in the long sentence are capped so blanked Markdown cannot make it, and the long-sentence prefix is an atomic group so an unpunctuated stretch cannot send it into catastrophic backtracking. The note points at the closer. One means nothing; a draft where it repeats is the tell.
353
357
  - `bare-auxiliary-closer` — the same long-sentence-then-short-closer shape as `mic-drop-closer`, but the tell sits in the verb rather than the subject: the closer's verb phrase is elided down to a bare auxiliary with no object, "The agent did."; `medium` confidence. No subject list is needed — a one-to-three word subject runs straight into a bare `did/does/do/was/were/is/are/had/has/can/could/would/will/should/might/must` (contracted forms included) and a period, and the closer must be the last thing in the paragraph, same as `mic-drop-closer`, so a closing quotation mark after the period excludes quoted dialogue the same way `short-run` excludes it. A negative lookahead drops a closer that still holds "what", "that", "which", "who", "why" or "how", since those introduce a subordinate clause supplying its own complement rather than an elided one ("Nobody knew who did." asks who did it). Reuses `mic-drop-closer`'s long-sentence prefix rather than a second copy of it. One means nothing; a draft where it repeats is the tell.
354
- - `np-fragment-and` — a whole sentence made of two noun phrases and an "and", opening on A/An/One at a sentence start or after a list marker ("A named owner and a quarterly review."). One to three words a side, no auxiliary or modal anywhere (contractions included); a lexical verb is invisible, so "A car and a truck collided." flags, which is why it ships at `medium` confidence.
358
+ - `punch-sentence` — the same long-then-short shape in the middle of a paragraph, where the closer rules refuse it: after the shared sixty-character prefix, a verbless beat of one to three words closing on a full stop, then one or two spaces and a sentence of forty or more characters on the same paragraph ("…three nights running that week. Not anymore. The job now checks…"); `info`, `medium` confidence. The beat is one of two closed shapes: a negator (Not, No, Never, Nothing, None) followed by up to two lowercase words, or a single capitalised word of five letters or more ("Simple."). The stop before the beat may not close a capitalised word of one to four letters or a lone lowercase letter, so a title, an initial or a case citation ("Mrs. Cadaver.", "John F. Kennedy.", "Swift v. Tyson.") never yields a one-word sentence. Short clauses with a subject ("He agrees.", "Dawes refuses.") are how plot summaries and news briefs move and are not matched; a one-word imperative in procedural prose ("Drain.") is, at about one per 25,000 words of recipes. A run of short sentences is `short-run`'s, and a paragraph-final beat is `mic-drop-closer`'s or `bare-auxiliary-closer`'s.- `np-fragment-and` — a whole sentence made of two noun phrases and an "and", opening on A/An/One at a sentence start or after a list marker ("A named owner and a quarterly review."). One to three words a side, no auxiliary or modal anywhere (contractions included); a lexical verb is invisible, so "A car and a truck collided." flags, which is why it ships at `medium` confidence.
355
359
 
356
360
  ### puffery
357
361
 
@@ -1895,6 +1895,59 @@ module Sloplint
1895
1895
  rationale: "Labelling a claim as the portable lesson does the persuading that the claim " \
1896
1896
  "should be doing — a model habit borrowed from thought-leader prose."
1897
1897
  ),
1898
+ Rule.new(
1899
+ id: "cataphoric-teaser",
1900
+ category: "self-rating",
1901
+ severity: "warning",
1902
+ confidence: "high",
1903
+ # The forward-pointing tease: "Here's what nobody tells you", "the
1904
+ # part most people get wrong". Three parts, each a closed frame. A
1905
+ # sentence-initial position, optionally opened by a forward demonstrative
1906
+ # (here's / this is; "that's what nobody understands" points backward
1907
+ # and is left alone). A noun slot: what / the part / the thing / the
1908
+ # bit / the secret. A subject that claims scarcity for the reader's
1909
+ # benefit: nobody, no one, most people, few people, hardly anyone,
1910
+ # they, people. Then up to two adverbs and a verb of telling, getting
1911
+ # wrong, talking about, admitting or noticing. The bare subject form
1912
+ # ("What nobody tells you ...") must also reach a copula or colon in
1913
+ # the same sentence, since that is what makes it a setup rather than a
1914
+ # plain report ("What nobody tells you gets forgotten."), and it may
1915
+ # not take "they": without a demonstrative in front, "what they don't
1916
+ # realize is" refers to the people the story is about, and narrative
1917
+ # says it. Read across 8.7 MB of RAID that was the one human hit.
1918
+ pattern: /(?:\A|[.!?]\s+|\n\s*\n|:\s+)\s*
1919
+ (?:(?<demo>(?:\w+,?\s+)?(?:here'?s|here\s+is|this\s+is)\s+)|(?-i:(?=[A-Z])))
1920
+ (?:what|the\s+(?:part|thing|bit|secret))\s+
1921
+ (?:nobody|no[-\s]?one|most\s+\w+(?:\s+\w+)?|few\s+people|hardly\s+anyone|almost\s+(?:nobody|no[-\s]?one)|people|(?(<demo>)they|(?!)))\s+
1922
+ (?:(?:will|won'?t|don'?t|doesn'?t|actually|ever|really|never|rarely|wants?\s+to)\s+){0,2}
1923
+ (?:tells?|gets?|talks?|says?|admits?|mentions?|warns?|teach(?:es)?|explains?|notices?|realizes?|understands?|hears?)\b
1924
+ (?(<demo>)|[^.!?\n:]{0,60}?(?:\s+is\b|:))/ix,
1925
+ message: "Cataphoric teaser promises a hidden insight before giving it.",
1926
+ suggestion: "Cut the tease and state the thing itself.",
1927
+ examples_bad: [
1928
+ "Here's what nobody tells you about hiring.",
1929
+ "Here is the part most people get wrong.",
1930
+ "This is the thing they don't tell you.",
1931
+ "What nobody tells you is that the migration is the easy part.",
1932
+ "The part nobody talks about is the rollback.",
1933
+ "What most senior engineers won't admit is that the estimate was a guess.",
1934
+ "So here's what few people realize: the cache is cold on every deploy."
1935
+ ],
1936
+ examples_ok: [
1937
+ # Backward-pointing: the sentence reports, it does not tease.
1938
+ "That's what nobody understands.",
1939
+ "That is the part most people get wrong.",
1940
+ # A bare-subject sentence that never reaches a copula is a report.
1941
+ "What nobody tells you gets forgotten by lunch.",
1942
+ # Mid-sentence, the phrase is an object, not a setup.
1943
+ "I finally learned what nobody tells you about hiring.",
1944
+ # Lowercase after a hard wrap is a continuation, not a sentence start.
1945
+ "the reviewer read it and\nwhat nobody tells you is that she signed it anyway."
1946
+ ],
1947
+ rationale: "The tease sells the claim as rare knowledge before the claim exists, so the " \
1948
+ "reader is asked to rate it before reading it. Models reach for it as an " \
1949
+ "opener because engagement training rewards the hook."
1950
+ ),
1898
1951
  Rule.new(
1899
1952
  id: "is-is",
1900
1953
  category: "cadence",
@@ -3079,6 +3132,80 @@ module Sloplint
3079
3132
  "it to close a setup; careful writers join the clauses with a conjunction " \
3080
3133
  "or give the problem its own sentence."
3081
3134
  ),
3135
+ Rule.new(
3136
+ id: "punch-sentence",
3137
+ category: "cadence",
3138
+ severity: "info",
3139
+ confidence: "medium",
3140
+ # The mid-paragraph punch: a verbless beat of one to three words wedged
3141
+ # between two long sentences. "...for the third time that quarter. Not
3142
+ # anymore. The new rota puts..." mic-drop-closer and
3143
+ # bare-auxiliary-closer take the long-then-short shape at the end of a
3144
+ # paragraph; this is the one in the middle, which the closer rules
3145
+ # refuse. The setup is the shared sixty-character prefix, and a
3146
+ # sentence of forty or more characters must follow on the same
3147
+ # paragraph, so a closer and a run of short sentences (short-run's
3148
+ # tell) are both left to their own rules.
3149
+ #
3150
+ # Read against RAID, the first draft fired on human prose at four
3151
+ # times its model rate, and every kind of hit is now a guard:
3152
+ #
3153
+ # A title or initial before the stop ("Mrs. Cadaver.", "John F.
3154
+ # Kennedy.", "St. Petersburg.") makes the proper name after it look
3155
+ # like a one-word sentence, so the stop the punch follows may not
3156
+ # close a capitalised word of one to four letters, or a lone lowercase
3157
+ # letter ("Swift v. Tyson"). The same guard on
3158
+ # the punch's own last word ("When Mr.", "Felix and Rev.") is why a
3159
+ # lone word must be five letters or more when capitalised; a lowercase
3160
+ # last word ("Not anymore.") is never an abbreviation.
3161
+ #
3162
+ # A short clause with a pronoun subject ("He agrees.", "She complies.",
3163
+ # "Both die.") is how a plot summary and a news brief move the story
3164
+ # along, and an imperative with a name or a noun subject ("Dawes
3165
+ # refuses.", "Set aside.") reads the same to a regex as a beat, so the
3166
+ # punch is two closed shapes: a negator (Not, No, Never, Nothing,
3167
+ # None) with up to two lowercase words after it, or one capitalised
3168
+ # word of five letters or more. A one-word imperative in procedural
3169
+ # prose ("Drain.", "Repeat.") still lands in the second shape, at about
3170
+ # one per 25,000 words of recipes, which the info severity allows for.
3171
+ pattern: /#{SENTENCE_OF_SIXTY_CHARACTERS_ENDING_IN_PUNCTUATION_AND_SPACE}\K
3172
+ (?<![A-Z]\.[ \t]|[A-Z][a-z]\.[ \t]|[A-Z][a-z]{2}\.[ \t]|[A-Z][a-z]{3}\.[ \t]|[ \t][a-z]\.[ \t]
3173
+ |[A-Z]\.[ \t]{2}|[A-Z][a-z]\.[ \t]{2}|[A-Z][a-z]{2}\.[ \t]{2}|[A-Z][a-z]{3}\.[ \t]{2}|[ \t][a-z]\.[ \t]{2})
3174
+ (?:(?:Not|No|Never|Nothing|None)(?:(?:[ \t]|\r?\n(?!\s*\n)[ \t]*)[a-z][A-Za-z'’-]*){0,2}
3175
+ |[A-Z][A-Za-z'’-]{4,})\.
3176
+ (?=[ \t]{1,2}[A-Z](?:[^.!?\n]|\r?\n(?!\s*\n)){40,})/x,
3177
+ message: "A verbless beat of three words or fewer between two long sentences is the AI punch.",
3178
+ suggestion: "Fold the beat into the sentence before or after it, or cut it.",
3179
+ examples_bad: [
3180
+ "The on-call engineer had been paged for the same cron job three nights running that week. Not anymore. The job now checks the lock file before it starts and exits quietly.",
3181
+ "The reviewers spent the whole afternoon arguing about whether the migration should run in one pass. Never again. The first half ran on Tuesday and the second half is still waiting on a sign-off.",
3182
+ "Every team we talked to had a wiki page describing the release process in loving detail. No exceptions. The page had not been touched since the person who wrote it left the company.",
3183
+ "The retry loop was supposed to give up after five attempts and page someone with the error. Simple. Instead it kept going all night because the counter reset on every restart."
3184
+ ],
3185
+ examples_ok: [
3186
+ # Paragraph-final: that is the closer rules' shape, not this one.
3187
+ "The reviewers spent the whole afternoon arguing about whether the migration should run in one pass. Not anymore.",
3188
+ # Followed by another short sentence: short-run's territory.
3189
+ "The reviewers spent the whole afternoon arguing about whether the migration should run in one pass. Not anymore. Nobody minded. The second half is still waiting on a sign-off from the platform team.",
3190
+ # A short clause with a pronoun subject is narrative, not a beat.
3191
+ "The reviewers spent the whole afternoon arguing about whether the migration should run in one pass. It didn't. The first half ran on Tuesday and the second half is still waiting on a sign-off.",
3192
+ "Every team we talked to had a wiki page describing the release process in loving detail. Nobody read it. The page had not been touched since the person who wrote it left the company.",
3193
+ # A title or initial with its complement on the far side of the stop.
3194
+ "The committee met for the last time on a wet Thursday in the back room of the library annex. Mr. Whitaker moved that the minutes be approved as read and the motion carried without a vote.",
3195
+ "The only survivor of the crash on the coast road that spring was the widow of the lighthouse keeper, Mrs. Cadaver. The inquest sat for two days in the town hall and returned no verdict at all.",
3196
+ "The freight line ran west from the river through three counties before it reached the yards. St. Louis was the end of the line for most of the crews and the start of it for the rest.",
3197
+ "The freight line ran west from the river through three counties before it reached the yards. Cyrus M. Jarrett owned the yards and every siding on the line from the river to the state line.",
3198
+ "The rule that a federal court sitting in diversity applies general common law was set out in Swift v. Tyson. The decision stood for nearly a century before the court overruled it in Erie.",
3199
+ # Digits are data, and a quotation mark is dialogue.
3200
+ "The freight line ran west from the river through three counties before it reached the yards. Fig. 2 shows the route as it stood in 1890 and the sidings that were added after the flood.",
3201
+ "The freight line ran west from the river through three counties before it reached the yards. \"Enough.\" The foreman waved the crew back toward the sheds and nobody argued with him.",
3202
+ # Four or more words is a sentence, not a beat.
3203
+ "The freight line ran west from the river through three counties before it reached the yards. The crews liked it. The foreman waved the crew back toward the sheds and nobody argued with him."
3204
+ ],
3205
+ rationale: "The beat withholds the verb and the object the long sentence set up and " \
3206
+ "hands the reader a pause instead. People write one on purpose; a draft " \
3207
+ "that keeps doing it is the tell, which is why it ships at info."
3208
+ ),
3082
3209
  Rule.new(
3083
3210
  id: "np-fragment-and",
3084
3211
  category: "cadence",
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sloplint
4
- VERSION = "0.8.0"
4
+ VERSION = "0.8.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sloplint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Jackson