.github/workflows/ci.yml:36:7: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
.github/workflows/ci.yml:108:7: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Into the package, so `statsbadge install` uses bytecode)
.github/workflows/ci.yml:153:7: error SHP019 everything in the file is on purpose; say what the purpose is (Deliberately)
.github/workflows/ci.yml:189:7: error SHL001 42 words of comment for 2 lines of code (limit 40)
.github/workflows/ci.yml:190:7: warning SHP032 "and" did not do that; whoever wrote it did (and refuses)
.github/workflows/ci.yml:190:7: error SHP036 "a .mpy" is said "an .mpy" (a .mpy)
.github/workflows/ci.yml:195:7: error SHP005 "launcher" has no mind to make that up with; say what it does (launcher wants)
.github/workflows/ci.yml:232:7: error SHP005 "launcher" has no mind to make that up with; say what it does (launcher wants)
.github/workflows/publish-clock.yml:3:1: error SHL001 110 words of comment for 4 lines of code (limit 80)
.github/workflows/publish-clock.yml:3:1: error SHL007 9 lines in one block (limit 6)
.github/workflows/publish-clock.yml:3:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
.github/workflows/publish-clock.yml:10:1: warning SHP032 "release" did not do that; whoever wrote it did (release says)
.github/workflows/publish-clock.yml:30:5: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (A release for another package in this repository)
.github/workflows/publish-clock.yml:42:11: error SHD001 this block appears in 4 places (3 others); say it once where the behaviour lives (The tag is the version, so the build)
.github/workflows/publish-clock.yml:42:11: error SHP033 frames the code as a story; describe the behaviour (honest)
.github/workflows/publish-iss.yml:3:1: error SHL001 112 words of comment for 4 lines of code (limit 80)
.github/workflows/publish-iss.yml:3:1: error SHL007 9 lines in one block (limit 6)
.github/workflows/publish-iss.yml:3:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
.github/workflows/publish-iss.yml:10:1: warning SHP032 "release" did not do that; whoever wrote it did (release says)
.github/workflows/publish-iss.yml:13:1: error SHL002 comment line is 107 characters (limit 96)
.github/workflows/publish-iss.yml:30:5: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (A release for another package in this repository)
.github/workflows/publish-iss.yml:42:11: error SHD001 this block appears in 4 places (3 others); say it once where the behaviour lives (The tag is the version, so the build)
.github/workflows/publish-iss.yml:42:11: error SHP033 frames the code as a story; describe the behaviour (honest)
.github/workflows/publish-quakes.yml:3:1: error SHL001 111 words of comment for 4 lines of code (limit 80)
.github/workflows/publish-quakes.yml:3:1: error SHL007 9 lines in one block (limit 6)
.github/workflows/publish-quakes.yml:3:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
.github/workflows/publish-quakes.yml:10:1: warning SHP032 "release" did not do that; whoever wrote it did (release says)
.github/workflows/publish-quakes.yml:13:1: error SHL002 comment line is 107 characters (limit 96)
.github/workflows/publish-quakes.yml:30:5: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (A release for another package in this repository)
.github/workflows/publish-quakes.yml:42:11: error SHD001 this block appears in 4 places (3 others); say it once where the behaviour lives (The tag is the version, so the build)
.github/workflows/publish-quakes.yml:42:11: error SHP033 frames the code as a story; describe the behaviour (honest)
.github/workflows/publish.yml:37:11: error SHD001 this block appears in 4 places (3 others); say it once where the behaviour lives (The tag is the version, so the build)
.github/workflows/publish.yml:37:11: error SHP033 frames the code as a story; describe the behaviour (honest)
.github/workflows/publish.yml:68:7: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Into the package, so `statsbadge install` uses bytecode)
DEVELOPMENT.md:1:1: error SHM002 73 of 163 blocks end on "so the ..." (45%, limit 30%)
DEVELOPMENT.md:1:1: error SHM003 69 of 163 blocks pivot on a colon (42%, limit 40%)
DEVELOPMENT.md:1:1: error SHP001 58 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
DEVELOPMENT.md:1:1: error SHP013 43 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
DEVELOPMENT.md:1:1: error SHP015 8 blocks in this file use instead-of (budget 3); the count is the finding, search for the word to find them (instead of)
DEVELOPMENT.md:1:1: error SHP016 19 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (which is why)
DEVELOPMENT.md:1:1: error SHP018 8 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (reads as)
DEVELOPMENT.md:1:1: error SHP025 26 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (nothing to)
DEVELOPMENT.md:1:1: error SHP030 10 blocks in this file use the-whole-thing (budget 3); the count is the finding, search for the word to find them (the whole response)
DEVELOPMENT.md:3:1: error SHP005 "host" has no mind to make that up with; say what it does (host decides)
DEVELOPMENT.md:27:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and body separately, and)
DEVELOPMENT.md:29:1: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone switches)
DEVELOPMENT.md:29:1: warning SHP032 "Xx" did not do that; whoever wrote it did (Xx refuses)
DEVELOPMENT.md:37:1: error SHL009 sentence runs to 63 words (limit 55); break it with a full stop (The one exception is a port)
DEVELOPMENT.md:37:1: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
DEVELOPMENT.md:39:1: warning SHP032 "and" did not do that; whoever wrote it did (and refuses)
DEVELOPMENT.md:41:1: error SHL009 sentence runs to 59 words (limit 55); break it with a full stop (Two things are ever asked of)
DEVELOPMENT.md:41:1: error SHL010 sentence holds 7 commas, colons or semicolons (limit 5); break it with a full stop (Two things are ever asked of)
DEVELOPMENT.md:43:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the hands are dragged back to where the last poll left them, and)
DEVELOPMENT.md:45:1: error SHP017 fragment with no finite verb; make it a sentence (that being)
DEVELOPMENT.md:47:1: error SHL010 sentence holds 7 commas, colons or semicolons (limit 5); break it with a full stop (Measured with Xx -style probes on)
DEVELOPMENT.md:47:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and set the pen once a group, and)
DEVELOPMENT.md:51:1: error SHL009 sentence runs to 59 words (limit 55); break it with a full stop (Xx and Xx both walk the)
DEVELOPMENT.md:53:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and Xx are 40ms a call, and)
DEVELOPMENT.md:55:1: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone chose)
DEVELOPMENT.md:57:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and in Xx , and)
DEVELOPMENT.md:59:1: error SHP005 "it" has no mind to make that up with; say what it does (it wants)
DEVELOPMENT.md:59:1: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone reaching for)
DEVELOPMENT.md:63:1: error SHC001 comment describes a past state of the code (used to, instead of the); the change belongs in the commit message (used to)
DEVELOPMENT.md:63:1: error SHL009 sentence runs to 57 words (limit 55); break it with a full stop (The palette for the chosen theme)
DEVELOPMENT.md:63:1: error SHL009 sentence runs to 57 words (limit 55); break it with a full stop (So Xx is the only place)
DEVELOPMENT.md:65:1: error SHL009 sentence runs to 58 words (limit 55); break it with a full stop (Xx and Xx are one accent)
DEVELOPMENT.md:65:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
DEVELOPMENT.md:67:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
DEVELOPMENT.md:67:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and keeps it in the accent's own family, and)
DEVELOPMENT.md:69:1: error SHL009 sentence runs to 68 words (limit 55); break it with a full stop (Xx , Xx , Xx ,)
DEVELOPMENT.md:69:1: error SHL010 sentence holds 8 commas, colons or semicolons (limit 5); break it with a full stop (Xx , Xx , Xx ,)
DEVELOPMENT.md:69:1: error SHP005 "downstream" has no mind to make that up with; say what it does (downstream knows)
DEVELOPMENT.md:69:1: warning SHP032 "measurement" did not do that; whoever wrote it did (measurement says)
DEVELOPMENT.md:69:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and Xx were five palettes doing one thing, and)
DEVELOPMENT.md:71:1: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
DEVELOPMENT.md:71:1: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
DEVELOPMENT.md:71:1: warning SHP032 "colour" did not do that; whoever wrote it did (colour and agrees)
DEVELOPMENT.md:73:1: error SHL009 sentence runs to 73 words (limit 55); break it with a full stop (Xx fills the table in one)
DEVELOPMENT.md:73:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
DEVELOPMENT.md:75:1: error SHP004 hedge; either it does this or it does not (actually)
DEVELOPMENT.md:75:1: warning SHP032 "Xx" did not do that; whoever wrote it did (Xx agrees)
DEVELOPMENT.md:79:1: error SHP005 "large" has no mind to make that up with; say what it does (large wants)
DEVELOPMENT.md:83:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
DEVELOPMENT.md:103:1: warning SHP032 "nothing" did not do that; whoever wrote it did (nothing says)
DEVELOPMENT.md:103:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and as idle on a slow one, and)
DEVELOPMENT.md:112:1: warning SHP032 "part" did not do that; whoever wrote it did (part that says)
DEVELOPMENT.md:118:1: warning SHP032 "UI" did not do that; whoever wrote it did (UI can tell)
DEVELOPMENT.md:118:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
DEVELOPMENT.md:118:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and Xx so the UI can tell these apart, and)
DEVELOPMENT.md:133:1: error SHP005 "it" has no mind to make that up with; say what it does (it knows)
DEVELOPMENT.md:133:1: warning SHP032 "source" did not do that; whoever wrote it did (source says)
DEVELOPMENT.md:133:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and recovers on its own schedule, and)
DEVELOPMENT.md:149:1: warning SHP032 "host" did not do that; whoever wrote it did (host refuses)
DEVELOPMENT.md:155:1: error SHL009 sentence runs to 59 words (limit 55); break it with a full stop (The app ships its own HTTP)
DEVELOPMENT.md:163:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
DEVELOPMENT.md:167:1: error SHP005 "it" has no mind to make that up with; say what it does (it knows)
DEVELOPMENT.md:167:1: error SHP010 temporary by this account and permanent in practice; add an owner or finish it (placeholder)
DEVELOPMENT.md:167:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and counter, and)
DEVELOPMENT.md:171:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 5); break it with a full stop (Costs on this board, with more)
DEVELOPMENT.md:173:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and blitted, and)
DEVELOPMENT.md:175:1: warning SHP031 verb with its object dropped; name the thing being carried (to hold.)
DEVELOPMENT.md:176:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and took it from 30fps to 45, and)
DEVELOPMENT.md:177:1: error SHL009 sentence runs to 69 words (limit 55); break it with a full stop (Header and footer are drawn where)
DEVELOPMENT.md:177:1: warning SHP031 verb with its object dropped; name the thing being carried (they stand:)
DEVELOPMENT.md:177:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and subtitle from the label cache, and)
DEVELOPMENT.md:178:1: warning SHP032 "ring" did not do that; whoever wrote it did (ring says)
DEVELOPMENT.md:179:1: error SHL009 sentence runs to 60 words (limit 55); break it with a full stop (A field with no full scale)
DEVELOPMENT.md:179:1: warning SHP032 "and" did not do that; whoever wrote it did (and says)
DEVELOPMENT.md:179:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and leave: the whole plot rescaled slightly each time, and)
DEVELOPMENT.md:180:1: error SHL009 sentence runs to 61 words (limit 55); break it with a full stop (The two series take opposite ends)
DEVELOPMENT.md:180:1: error SHL009 sentence runs to 72 words (limit 55); break it with a full stop (The band is Xx , ten)
DEVELOPMENT.md:180:1: error SHP005 "Xx" has no mind to make that up with; say what it does (Xx decides)
DEVELOPMENT.md:180:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
DEVELOPMENT.md:180:1: warning SHP032 "which" did not do that; whoever wrote it did (which says)
DEVELOPMENT.md:180:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and 4ms on a sawtooth, and)
DEVELOPMENT.md:182:1: error SHL009 sentence runs to 63 words (limit 55); break it with a full stop (Splitting a long arc into quadrants)
DEVELOPMENT.md:182:1: error SHP004 hedge; either it does this or it does not (actually)
DEVELOPMENT.md:184:1: error SHP005 "other" has no mind to make that up with; say what it does (other cannot know)
DEVELOPMENT.md:185:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the column, and)
DEVELOPMENT.md:189:1: error SHL009 sentence runs to 58 words (limit 55); break it with a full stop (Every gauge fraction goes through Xx)
DEVELOPMENT.md:191:1: error SHL009 sentence runs to 56 words (limit 55); break it with a full stop (Six plots 22px tall have nowhere)
DEVELOPMENT.md:191:1: error SHP005 "neither" has no mind to make that up with; say what it does (neither knows)
DEVELOPMENT.md:191:1: warning SHP032 "setting" did not do that; whoever wrote it did (setting says)
DEVELOPMENT.md:191:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and Xx with the series, and)
DEVELOPMENT.md:193:1: warning SHP037 drop "is what"; the clause reads straight without it (Which is what)
DEVELOPMENT.md:195:1: error SHL009 sentence runs to 58 words (limit 55); break it with a full stop (A press answers immediately and the)
DEVELOPMENT.md:195:1: error SHL009 sentence runs to 63 words (limit 55); break it with a full stop (And the waiting branch is tested)
DEVELOPMENT.md:195:1: error SHP017 fragment with no finite verb; make it a sentence (that being)
DEVELOPMENT.md:197:1: error SHL009 sentence runs to 56 words (limit 55); break it with a full stop (The header and footer belong to)
DEVELOPMENT.md:225:1: warning SHP039 say "removed" (taken off)
DEVELOPMENT.md:227:1: error SHP005 "module" has no mind to make that up with; say what it does (module prefers)
DEVELOPMENT.md:227:1: warning SHP032 "message" did not do that; whoever wrote it did (message tells)
DEVELOPMENT.md:231:1: warning SHP039 say "come from" (come off)
DEVELOPMENT.md:233:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and bytecode, and)
DEVELOPMENT.md:237:1: warning SHP032 "firmware" did not do that; whoever wrote it did (firmware would refuse)
DEVELOPMENT.md:243:1: warning SHP032 "badge" did not do that; whoever wrote it did (badge can tell)
DEVELOPMENT.md:253:1: error SHL009 sentence runs to 57 words (limit 55); break it with a full stop (How the mechanism works is this)
DEVELOPMENT.md:257:1: warning SHP032 "here" did not do that; whoever wrote it did (here chooses)
DEVELOPMENT.md:259:1: error SHL009 sentence runs to 59 words (limit 55); break it with a full stop (Xx translates it, over the prose)
DEVELOPMENT.md:259:1: error SHP005 "app" has no mind to make that up with; say what it does (app wants)
DEVELOPMENT.md:259:1: warning SHP032 "0" did not do that; whoever wrote it did (0 and says)
DEVELOPMENT.md:259:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and says nothing, and)
DEVELOPMENT.md:282:1: warning SHP031 verb with its object dropped; name the thing being carried (holds.)
DEVELOPMENT.md:284:1: error SHP004 hedge; either it does this or it does not (actually)
DEVELOPMENT.md:284:1: error SHP005 "it" has no mind to make that up with; say what it does (it knows)
DEVELOPMENT.md:284:1: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody chose)
DEVELOPMENT.md:284:1: warning SHP032 "badge" did not do that; whoever wrote it did (badge says)
DEVELOPMENT.md:284:1: warning SHP039 say "restored" (put back)
DEVELOPMENT.md:284:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and its fields, and)
DEVELOPMENT.md:286:1: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody puts)
DEVELOPMENT.md:286:1: warning SHP032 "it" did not do that; whoever wrote it did (it says)
DEVELOPMENT.md:292:1: warning SHP032 "depth" did not do that; whoever wrote it did (depth says)
DEVELOPMENT.md:298:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and three leave 52, and)
DEVELOPMENT.md:302:1: error SHP005 "source" has no mind to make that up with; say what it does (source knows)
DEVELOPMENT.md:304:1: warning SHP032 "what" did not do that; whoever wrote it did (what says)
DEVELOPMENT.md:306:1: warning SHP032 "spacing" did not do that; whoever wrote it did (spacing says)
DEVELOPMENT.md:306:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a half of staircase, and)
DEVELOPMENT.md:308:1: warning SHP032 "Memory" did not do that; whoever wrote it did (Memory say)
DEVELOPMENT.md:308:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
DEVELOPMENT.md:308:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and then that source's readings, and)
DEVELOPMENT.md:312:1: error SHL009 sentence runs to 58 words (limit 55); break it with a full stop (Xx with no path is the)
DEVELOPMENT.md:312:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
DEVELOPMENT.md:316:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and where it is looking, and)
DEVELOPMENT.md:318:1: warning SHP039 say "restored" (put back)
DEVELOPMENT.md:320:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 5); break it with a full stop (For a page that splits into)
DEVELOPMENT.md:320:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and Xx the app uses, and)
DEVELOPMENT.md:328:1: warning SHP032 "different" did not do that; whoever wrote it did (different claims)
DEVELOPMENT.md:355:1: warning SHP032 "validate" did not do that; whoever wrote it did (validate refuses)
DEVELOPMENT.md:357:1: error SHL009 sentence runs to 61 words (limit 55); break it with a full stop (Nothing is executed: the badge modules)
DEVELOPMENT.md:357:1: warning SHP032 "source" did not do that; whoever wrote it did (source says)
DEVELOPMENT.md:359:1: warning SHP032 "resolve" did not do that; whoever wrote it did (resolve and refuses)
DEVELOPMENT.md:361:1: warning SHP032 "wrong" did not do that; whoever wrote it did (wrong says)
DEVELOPMENT.md:363:1: error SHL009 sentence runs to 58 words (limit 55); break it with a full stop (Xx records real call counts with)
DEVELOPMENT.md:363:1: error SHL010 sentence holds 7 commas, colons or semicolons (limit 5); break it with a full stop (Xx records real call counts with)
DEVELOPMENT.md:365:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 5); break it with a full stop (It also draws a deliberately sparse)
DEVELOPMENT.md:365:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
DEVELOPMENT.md:365:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
DEVELOPMENT.md:365:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and nothing else, and)
README.md:1:1: error SHP001 13 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
README.md:1:1: error SHP013 9 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
README.md:28:1: error SHP027 block opens on "Or"; it reads as half of the comment above (Or i)
README.md:44:1: warning SHP035 block opens on "That", with nothing yet named for it to stand in for (That writes)
README.md:46:1: error SHC001 comment describes a past state of the code (no longer); the change belongs in the commit message (no longer)
README.md:52:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and capped, and)
README.md:54:1: error SHL009 sentence runs to 57 words (limit 55); break it with a full stop (A button can run a host)
README.md:76:1: warning SHP032 "UI" did not do that; whoever wrote it did (UI says)
README.md:76:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
README.md:114:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
README.md:122:1: warning SHP032 "it" did not do that; whoever wrote it did (it says)
README.md:126:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 5); break it with a full stop (Six show readings as they are:)
README.md:126:1: warning SHP032 "Five" did not do that; whoever wrote it did (Five say)
README.md:137:1: error SHL009 sentence runs to 59 words (limit 55); break it with a full stop (Xx has a page to itself,)
README.md:141:1: error SHL010 sentence holds 9 commas, colons or semicolons (limit 5); break it with a full stop (Xx is the odd one out:)
README.md:141:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and screen as figures, and)
README.md:145:1: error SHL010 sentence holds 8 commas, colons or semicolons (limit 5); break it with a full stop (Written down and grouped light and)
README.md:147:1: error SHC001 comment describes a past state of the code (used to); the change belongs in the commit message (used to)
README.md:147:1: error SHL009 sentence runs to 76 words (limit 55); break it with a full stop (Pick one of forty-eight accents -)
README.md:147:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 5); break it with a full stop (Pick one of forty-eight accents -)
README.md:147:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and send the ramp to red unless the accent is already there, and)
README.md:173:1: warning SHP032 "Xx" did not do that; whoever wrote it did (Xx says)
README.md:177:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a face: point one page at Tokyo and another at home, and)
README.md:179:1: error SHP005 "limited" has no mind to make that up with; say what it does (limited still knows)
README.md:181:1: error SHP005 "it" has no mind to make that up with; say what it does (it wants)
README.md:194:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and pulls back out to cross an ocean, and)
README.md:206:1: warning SHP032 "host" did not do that; whoever wrote it did (host refuses)
README.md:251:1: warning SHP032 "sources" did not do that; whoever wrote it did (sources and says)
README.md:253:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and precompiled app zips, and)
README.md:255:1: warning SHP032 "tag" did not do that; whoever wrote it did (tag says)
ci/build-mpy.sh:1:1: error SHM002 6 of 11 blocks end on "so the ..." (55%, limit 30%)
ci/build-mpy.sh:2:1: error SHL006 211 words in one block (limit 60)
ci/build-mpy.sh:2:1: error SHL007 19 lines in one block (limit 6)
ci/build-mpy.sh:9:1: error SHP036 "A .mpy" is said "an .mpy" (A .mpy)
ci/build-mpy.sh:17:1: error SHP003 preamble; the sentence works without it (Note that)
ci/build-mpy.sh:36:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
ci/build-mpy.sh:52:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and defines functions, and)
ci/build-mpy.sh:105:1: error SHP005 "launcher" has no mind to make that up with; say what it does (launcher wants)
ci/build-mpy.sh:123:1: error SHL001 66 words of comment for 3 lines of code (limit 60)
ci/build-mpy.sh:123:1: error SHP036 "A .mpy" is said "an .mpy" (A .mpy)
ci/build-mpy.sh:124:1: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (The header is 'M', version, reserved,)
ci/build-mpy.sh:124:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (The header is 'M', version, reserved,)
ci/build-mpy.sh:162:1: warning SHP032 "installer" did not do that; whoever wrote it did (installer can tell)
ci/ruff.toml:83:1: error SHC002 2 lines of commented-out code; delete it, the history has it
ci/ruff.toml:83:1: error SHL006 77 words in one block (limit 60)
ci/ruff.toml:83:1: error SHL007 13 lines in one block (limit 6)
ci/ruff.toml:90:1: error SHL009 sentence runs to 48 words (limit 40); break it with a full stop (ISC - flake8-implicit-str-concat = Implicit string)
ci/ruff.toml:116:1: warning SHL006 48 words in one block (soft limit 40)
ci/ruff.toml:134:1: error SHP005 "B905" has no mind to make that up with; say what it does (B905 wants)
ci/ruff.toml:152:1: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
extensions/statsbadge-clock/README.md:1:1: error SHP001 8 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (badge's own squircle)
extensions/statsbadge-clock/README.md:30:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and longitude are there for a spot no name lands on, and)
extensions/statsbadge-clock/pyproject.toml:18:1: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (The whole extension mechanism is this one entry)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:1:1: error SHM002 12 of 34 blocks end on "so the ..." (35%, limit 30%)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:1:1: error SHP001 6 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own group)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:1:1: error SHP013 7 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:30:1: error SHL001 61 words of comment for 1 line of code (limit 20)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:30:1: error SHL009 sentence runs to 50 words (limit 40); break it with a full stop (Open-Meteo's geocoder rate limits and its)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:111:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the two digital faces' numbers: seven segments, and)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:176:9: error SHP005 "page" has no mind to make that up with; say what it does (page wants)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:222:9: error SHP005 "pages" has no mind to make that up with; say what it does (pages wants)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:243:13: error SHP010 temporary by this account and permanent in practice; add an owner or finish it (for now)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:286:9: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (Whatever the fetcher has already brought back. Nothing)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:435:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-clock/src/statsbadge_clock/__init__.py:458:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:1:1: error SHM002 20 of 50 blocks end on "so the ..." (40%, limit 30%)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:1:1: error SHP001 18 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (their own)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:1:1: error SHP013 10 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:1:1: error SHP016 7 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (is what the)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:4:1: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (This is the reason for shipping)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:8:1: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (The Swiss station dial, as far)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:11:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and twice the length of the others, and)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:26:1: error SHL001 45 words of comment for 1 line of code (limit 20)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:26:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (The weather symbols this extension ships,)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:34:1: error SHL001 62 words of comment for 2 lines of code (limit 40)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:41:1: error SHL001 49 words of comment for 2 lines of code (limit 40)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:56:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:82:5: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (Every colour None, so the dial)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:107:1: error SHL001 61 words of comment for 3 lines of code (limit 60)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:117:5: warning SHP032 "theme" did not do that; whoever wrote it did (theme says)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:142:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:245:1: error SHL001 40 words of comment for 1 line of code (limit 20)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:250:1: error SHL001 50 words of comment for 1 line of code (limit 20)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:251:1: warning SHP039 say "removed" (Taken off)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:290:5: error SHL009 sentence runs to 58 words (limit 40); break it with a full stop (As large as the band allows)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:292:5: error SHP005 "descender" has no mind to make that up with; say what it does (descender would want)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:298:5: error SHP027 block opens on "And"; it reads as half of the comment above (And n)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:314:5: error SHL001 62 words of comment for 2 lines of code (limit 40)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:320:5: error SHL001 48 words of comment for 1 line of code (limit 20)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:322:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:322:5: warning SHP039 say "removes" (takes off)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:324:5: error SHP004 hedge; either it does this or it does not (actually)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:324:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:341:5: error SHP005 the reader's body standing in for the reader (the eye lands)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:366:5: error SHL001 57 words of comment for 2 lines of code (limit 40)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:366:5: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (A page can name its own)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:372:5: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (A place carries a time only)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:372:5: error SHP017 fragment with no finite verb; make it a sentence (that being)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:393:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and never from a place's: there is one hardware clock, and)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:441:1: error SHL001 85 words of comment for 1 line of code (limit 20)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:441:1: error SHL009 sentence runs to 47 words (limit 40); break it with a full stop (A PCF85063A drifts a second or)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:463:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and cannot go stale, and)
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:474:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
extensions/statsbadge-clock/src/statsbadge_clock/badge/clockface.py:532:5: error SHL010 sentence holds 7 commas, colons or semicolons (limit 4); break it with a full stop ((year, month, day, weekday, hour, minute,)
extensions/statsbadge-iss/README.md:38:1: error SHP005 "page" has no mind to make that up with; say what it does (page that wants)
extensions/statsbadge-iss/pyproject.toml:18:1: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (The whole extension mechanism is this one entry)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:1:1: error SHM002 6 of 18 blocks end on "so the ..." (33%, limit 30%)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:1:1: error SHP013 4 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:1:1: error SHP025 5 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (nothing here)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:3:1: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (The ground track is asked for)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:64:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (No field slots: the renderer draws from its)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:100:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Take up where the last run left off,)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:100:9: warning SHP039 say "omitted" (left off)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:147:9: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (Whatever the fetcher has already brought back. Nothing)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:153:9: error SHL001 42 words of comment for 2 lines of code (limit 40)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:153:9: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (Where "now" sits in the track,)
extensions/statsbadge-iss/src/statsbadge_iss/__init__.py:158:13: warning SHP032 "badge" did not do that; whoever wrote it did (badge can say)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:1:1: error SHM002 11 of 30 blocks end on "so the ..." (37%, limit 30%)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:1:1: error SHM003 14 of 30 blocks pivot on a colon (47%, limit 40%)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:1:1: error SHP013 5 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:1:1: error SHP016 4 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (which is when)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:1:1: error SHP018 4 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (reads as)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:7:1: warning SHP032 "marker" did not do that; whoever wrote it did (marker that says)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:8:1: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (Why this is code and not)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:22:1: warning SHP032 "strip" did not do that; whoever wrote it did (strip that says)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:44:1: warning SHP032 "track" did not do that; whoever wrote it did (track says)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:54:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:83:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and re-aimed: the marker is the same size every frame, and)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:138:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:140:5: warning SHP032 "host" did not do that; whoever wrote it did (host says)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:159:5: error SHP004 hedge; either it does this or it does not (actually)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:184:5: error SHL002 comment line is 98 characters (limit 96)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:230:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The same rule the header draws, in the)
extensions/statsbadge-iss/src/statsbadge_iss/badge/issmap.py:307:1: warning SHL006 49 words in one block (soft limit 40)
extensions/statsbadge-quakes/README.md:31:1: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
extensions/statsbadge-quakes/README.md:35:1: error SHP005 "page" has no mind to make that up with; say what it does (page that wants)
extensions/statsbadge-quakes/README.md:37:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
extensions/statsbadge-quakes/pyproject.toml:18:1: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (The whole extension mechanism is this one entry)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:1:1: error SHP001 5 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (firmware's own)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:1:1: error SHP013 4 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:1:1: error SHP025 6 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (nothing here)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:4:1: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:33:1: error SHC001 comment describes a past state of the code (instead of the, before, this); the change belongs in the commit message (instead of the)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:50:5: error SHP005 "page" has no mind to make that up with; say what it does (page that wants)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:50:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:51:5: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:76:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (No field slots: the renderer draws from its)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:107:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Take up where the last run left off,)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:107:9: warning SHP039 say "omitted" (left off)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:163:9: error SHD001 this block appears in 3 places (2 others); say it once where the behaviour lives (Whatever the fetcher has already brought back. Nothing)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:166:9: error SHL001 85 words of comment for 3 lines of code (limit 60)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:166:9: error SHL009 sentence runs to 51 words (limit 40); break it with a full stop (The badge never draws an age)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:183:13: error SHP005 "anything" has no mind to make that up with; say what it does (anything that wants)
extensions/statsbadge-quakes/src/statsbadge_quakes/__init__.py:224:5: error SHP005 "badge" has no mind to make that up with; say what it does (badge wants)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:1:1: error SHM002 8 of 21 blocks end on "so the ..." (38%, limit 30%)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:1:1: error SHP013 5 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:7:1: error SHP005 "pages" has no mind to make that up with; say what it does (pages want)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:29:1: error SHL001 42 words of comment for 2 lines of code (limit 40)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:30:1: warning SHP032 "two" did not do that; whoever wrote it did (two says)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:120:5: error SHP005 "epicentre" has no body to do that with; say what it does (epicentre breathes)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:133:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The same rule the header draws, in the)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:183:5: error SHP005 "map" has no mind to make that up with; say what it does (map wants)
extensions/statsbadge-quakes/src/statsbadge_quakes/badge/quakemap.py:205:1: error SHP005 "page" has no mind to make that up with; say what it does (page wants)
pyproject.toml:21:5: error SHL001 44 words of comment for 1 line of code (limit 20)
pyproject.toml:52:1: error SHL001 46 words of comment for 2 lines of code (limit 40)
pyproject.toml:52:1: error SHL002 comment line is 97 characters (limit 96)
pyproject.toml:52:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (The tag is the version. uv's)
pyproject.toml:53:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and `uv publish` drive just the same: those are the frontend, and)
pyproject.toml:61:1: error SHL001 44 words of comment for 2 lines of code (limit 40)
pyproject.toml:79:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
src/statsbadge/__init__.py:4:1: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/__init__.py:12:5: warning SHP032 "install" did not do that; whoever wrote it did (install says)
src/statsbadge/__main__.py:1:1: error SHP025 5 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not the)
src/statsbadge/__main__.py:53:5: error SHP005 "latitude" has no mind to make that up with; say what it does (latitude wants)
src/statsbadge/__main__.py:111:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/__main__.py:365:5: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (Writing /state over the REPL and)
src/statsbadge/__main__.py:436:5: error SHP005 "host" has no mind to make that up with; say what it does (host knows)
src/statsbadge/__main__.py:545:9: warning SHP032 "so" did not do that; whoever wrote it did (so say)
src/statsbadge/__main__.py:569:9: error SHL001 40 words of comment for 1 line of code (limit 20)
src/statsbadge/__main__.py:569:9: error SHP005 "uv" has no mind to make that up with; say what it does (uv remembers)
src/statsbadge/__main__.py:584:17: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/__main__.py:590:13: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (Asked of the index before anything)
src/statsbadge/__main__.py:617:9: warning SHC006 describes an approach that is not in the file; nothing here can check it (instead, and leave the list as it was)
src/statsbadge/__main__.py:659:5: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (uv names one package, and it)
src/statsbadge/__main__.py:832:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and ignored: extensions go on by default now, and)
src/statsbadge/auth.py:1:1: error SHP001 4 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own Store)
src/statsbadge/auth.py:22:1: error SHL001 69 words of comment for 1 line of code (limit 20)
src/statsbadge/auth.py:33:1: error SHL001 112 words of comment for 2 lines of code (limit 40)
src/statsbadge/auth.py:33:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/auth.py:33:1: error SHL009 sentence runs to 52 words (limit 40); break it with a full stop (A hard cap would be something)
src/statsbadge/auth.py:34:1: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
src/statsbadge/auth.py:37:1: error SHL009 sentence runs to 51 words (limit 40); break it with a full stop (Doubling from 1s to a 30s)
src/statsbadge/auth.py:56:1: error SHL001 50 words of comment for 1 line of code (limit 20)
src/statsbadge/auth.py:116:9: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/auth.py:336:9: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody chose)
src/statsbadge/auth.py:377:13: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/auth.py:394:9: warning SHC006 describes an approach that is not in the file; nothing here can check it (was provisioned against a different starting poi)
src/statsbadge/auth.py:435:5: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
src/statsbadge/badge_app/__init__.py:1:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Stats: a host PC's vitals on the badge,)
src/statsbadge/badge_app/__init__.py:1:1: error SHM002 34 of 108 blocks end on "so the ..." (31%, limit 30%)
src/statsbadge/badge_app/__init__.py:1:1: error SHM003 48 of 108 blocks pivot on a colon (44%, limit 40%)
src/statsbadge/badge_app/__init__.py:1:1: error SHP001 9 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own input)
src/statsbadge/badge_app/__init__.py:1:1: error SHP013 15 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/badge_app/__init__.py:1:1: error SHP015 4 blocks in this file use instead-of (budget 3); the count is the finding, search for the word to find them (instead of)
src/statsbadge/badge_app/__init__.py:1:1: error SHP016 6 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (is what the)
src/statsbadge/badge_app/__init__.py:1:1: error SHP025 8 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (. Nothing)
src/statsbadge/badge_app/__init__.py:10:1: error SHP005 "host" has no mind to make that up with; say what it does (host decides)
src/statsbadge/badge_app/__init__.py:25:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Not installed: running from a mounted checkout. Locate)
src/statsbadge/badge_app/__init__.py:51:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Import the pairing screens on demand. The badge)
src/statsbadge/badge_app/__init__.py:62:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Import any badge-side modules an extension had pushed)
src/statsbadge/badge_app/__init__.py:89:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (HOME opens the hosts menu, so the launcher's)
src/statsbadge/badge_app/__init__.py:89:1: error SHL001 42 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/__init__.py:89:1: warning SHP039 say "removed" (taken off)
src/statsbadge/badge_app/__init__.py:95:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How much may be allocated between collects, and)
src/statsbadge/badge_app/__init__.py:95:1: error SHL001 115 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/__init__.py:95:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/badge_app/__init__.py:95:1: warning SHL008 6 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/__init__.py:96:1: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/badge_app/__init__.py:96:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (Left to itself the collector runs)
src/statsbadge/badge_app/__init__.py:98:1: error SHL002 comment line is 98 characters (limit 96)
src/statsbadge/badge_app/__init__.py:99:1: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (The threshold covers an animated page,)
src/statsbadge/badge_app/__init__.py:105:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (State writes /state/<app>.json, the same file net.Config keeps)
src/statsbadge/badge_app/__init__.py:109:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The lowest display.backlight value that lights the panel,)
src/statsbadge/badge_app/__init__.py:109:1: error SHL001 61 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/__init__.py:110:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (The driver raises its input to)
src/statsbadge/badge_app/__init__.py:115:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The smallest change worth asking for. display.backlight() is)
src/statsbadge/badge_app/__init__.py:115:1: error SHL001 42 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/__init__.py:115:1: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (The smallest change worth asking for.)
src/statsbadge/badge_app/__init__.py:120:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The share of the theme's case light level)
src/statsbadge/badge_app/__init__.py:124:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How much of a step to take towards)
src/statsbadge/badge_app/__init__.py:124:1: error SHL001 87 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/__init__.py:126:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (A tenth of the gap ten)
src/statsbadge/badge_app/__init__.py:132:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How many reads go into one of those.)
src/statsbadge/badge_app/__init__.py:132:1: error SHL001 83 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/__init__.py:139:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Bindings this badge answers itself, and the shares)
src/statsbadge/badge_app/__init__.py:139:1: error SHL001 43 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/__init__.py:145:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How many presses can be waiting for the)
src/statsbadge/badge_app/__init__.py:145:1: error SHL001 68 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/__init__.py:153:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How long a page takes to slide on,)
src/statsbadge/badge_app/__init__.py:156:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How long a press waits for another before)
src/statsbadge/badge_app/__init__.py:156:1: error SHL001 55 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/__init__.py:162:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How long the panel takes to reach a)
src/statsbadge/badge_app/__init__.py:165:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Where the panel is, and where it was)
src/statsbadge/badge_app/__init__.py:174:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Set the display brightness, over the range the)
src/statsbadge/badge_app/__init__.py:184:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Head for a brightness, easing there over `ms`.)
src/statsbadge/badge_app/__init__.py:191:5: error SHP005 "arrived" has no mind to make that up with; say what it does (arrived wants)
src/statsbadge/badge_app/__init__.py:191:5: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody asked)
src/statsbadge/badge_app/__init__.py:210:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Move the panel along its ramp, if it)
src/statsbadge/badge_app/__init__.py:228:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A local override of the configured brightness, for)
src/statsbadge/badge_app/__init__.py:233:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (When a button was last touched, and when)
src/statsbadge/badge_app/__init__.py:238:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The half of the frame that hardly ever)
src/statsbadge/badge_app/__init__.py:248:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whether the panel has been set once, so)
src/statsbadge/badge_app/__init__.py:250:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The page turn in progress, if the layout)
src/statsbadge/badge_app/__init__.py:250:9: error SHL009 sentence runs to 50 words (limit 40); break it with a full stop (The page turn in progress, if)
src/statsbadge/badge_app/__init__.py:250:9: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (The page turn in progress, if)
src/statsbadge/badge_app/__init__.py:260:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A turn waiting for the presses to stop:)
src/statsbadge/badge_app/__init__.py:268:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Poll state: one request in flight at a)
src/statsbadge/badge_app/__init__.py:273:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A request to make on the very next)
src/statsbadge/badge_app/__init__.py:276:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Presses waiting for the connection, oldest first, each)
src/statsbadge/badge_app/__init__.py:278:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How old the newest point in the series)
src/statsbadge/badge_app/__init__.py:287:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (State.load merges into the dict it is given)
src/statsbadge/badge_app/__init__.py:316:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The movement waits for the presses to stop;)
src/statsbadge/badge_app/__init__.py:316:13: error SHL001 109 words of comment for 4 lines of code (limit 80)
src/statsbadge/badge_app/__init__.py:316:13: error SHL007 8 lines in one block (limit 6)
src/statsbadge/badge_app/__init__.py:318:13: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/badge_app/__init__.py:320:13: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (Waiting would give a slide per)
src/statsbadge/badge_app/__init__.py:331:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Start a waiting page turn once the presses)
src/statsbadge/badge_app/__init__.py:335:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/__init__.py:341:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Only reached with nothing in flight: a press)
src/statsbadge/badge_app/__init__.py:351:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Set a page turn moving: the page arriving)
src/statsbadge/badge_app/__init__.py:351:9: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/__init__.py:353:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/__init__.py:371:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whatever was on the screen, toast and all:)
src/statsbadge/badge_app/__init__.py:381:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Render a page somewhere other than the screen.)
src/statsbadge/badge_app/__init__.py:408:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Advance whatever request is in flight, or start)
src/statsbadge/badge_app/__init__.py:419:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Ahead of anything the badge asks for itself:)
src/statsbadge/badge_app/__init__.py:436:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Back off when the host is not answering,)
src/statsbadge/badge_app/__init__.py:445:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (One the badge has never had, or one)
src/statsbadge/badge_app/__init__.py:454:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The series follows the stats rather than taking)
src/statsbadge/badge_app/__init__.py:454:9: error SHL001 122 words of comment for 5 lines of code (limit 100)
src/statsbadge/badge_app/__init__.py:454:9: error SHL007 8 lines in one block (limit 6)
src/statsbadge/badge_app/__init__.py:454:9: error SHL009 sentence runs to 56 words (limit 40); break it with a full stop (The series follows the stats rather)
src/statsbadge/badge_app/__init__.py:460:9: error SHP005 "thing" has no mind to make that up with; say what it does (thing that knows)
src/statsbadge/badge_app/__init__.py:467:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Which slow readings we already hold, so the)
src/statsbadge/badge_app/__init__.py:467:9: error SHL001 46 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/__init__.py:468:9: error SHP005 "app" has no mind to make that up with; say what it does (app knows)
src/statsbadge/badge_app/__init__.py:468:9: warning SHP032 "what" did not do that; whoever wrote it did (what tells)
src/statsbadge/badge_app/__init__.py:469:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/__init__.py:473:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Look for a paired host on the network)
src/statsbadge/badge_app/__init__.py:483:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Listening costs a frame's worth of time, so)
src/statsbadge/badge_app/__init__.py:504:21: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Another host's slow readings are not this one's,)
src/statsbadge/badge_app/__init__.py:517:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (An unpaired host we can see but cannot)
src/statsbadge/badge_app/__init__.py:523:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Keep the slow half of a frame, and)
src/statsbadge/badge_app/__init__.py:532:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A host too old to split the frame)
src/statsbadge/badge_app/__init__.py:541:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Post the oldest press, having dropped any that)
src/statsbadge/badge_app/__init__.py:562:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (403 is the host saying it does not)
src/statsbadge/badge_app/__init__.py:562:13: error SHP005 "it" has no mind to make that up with; say what it does (it does not know)
src/statsbadge/badge_app/__init__.py:563:13: warning SHP032 "so" did not do that; whoever wrote it did (so say)
src/statsbadge/badge_app/__init__.py:582:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A plot walks between the host's samples, so)
src/statsbadge/badge_app/__init__.py:582:13: error SHL006 69 words in one block (limit 60)
src/statsbadge/badge_app/__init__.py:583:13: error SHL009 sentence runs to 54 words (limit 40); break it with a full stop (The series is advanced from the)
src/statsbadge/badge_app/__init__.py:588:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Only meaningful when the lights follow a reading,)
src/statsbadge/badge_app/__init__.py:596:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (v=2 wraps the series in the two things)
src/statsbadge/badge_app/__init__.py:596:13: error SHL009 sentence runs to 64 words (limit 40); break it with a full stop (v=2 wraps the series in the)
src/statsbadge/badge_app/__init__.py:609:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Every field a page draws a series of,)
src/statsbadge/badge_app/__init__.py:611:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a trend draw one too, and)
src/statsbadge/badge_app/__init__.py:626:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The host sends the colours, so a theme)
src/statsbadge/badge_app/__init__.py:633:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The first layout to land is the badge)
src/statsbadge/badge_app/__init__.py:642:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (What the host calls the groups an extension)
src/statsbadge/badge_app/__init__.py:654:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The configured brightness, scaled by the room if)
src/statsbadge/badge_app/__init__.py:654:9: warning SHP032 "setting" did not do that; whoever wrote it did (setting says)
src/statsbadge/badge_app/__init__.py:659:9: error SHP005 "it" has no mind to make that up with; say what it does (it wants)
src/statsbadge/badge_app/__init__.py:659:9: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone reaching for)
src/statsbadge/badge_app/__init__.py:672:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Follow the room, slowly. Returns True when the)
src/statsbadge/badge_app/__init__.py:672:9: error SHP005 "panel" has no mind to make that up with; say what it does (panel wants)
src/statsbadge/badge_app/__init__.py:698:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Off, the theme's own level, or a level)
src/statsbadge/badge_app/__init__.py:728:21: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Nothing is on screen but the notice, so)
src/statsbadge/badge_app/__init__.py:735:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Only a press counts as being touched: the)
src/statsbadge/badge_app/__init__.py:741:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (What a button is bound to: something this)
src/statsbadge/badge_app/__init__.py:759:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Step the panel down and round again, over)
src/statsbadge/badge_app/__init__.py:761:9: error SHP005 "button" has no mind to make that up with; say what it does (button wants)
src/statsbadge/badge_app/__init__.py:761:9: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone reaching for)
src/statsbadge/badge_app/__init__.py:772:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Hold a press for the host, to go)
src/statsbadge/badge_app/__init__.py:786:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whether to offer the pairing screens. Not just)
src/statsbadge/badge_app/__init__.py:798:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Drop the connection and poll again now. Polls)
src/statsbadge/badge_app/__init__.py:819:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How solid the toast should be drawn: 1)
src/statsbadge/badge_app/__init__.py:830:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Notice the things that change with time rather)
src/statsbadge/badge_app/__init__.py:832:9: warning SHP032 "forever" did not do that; whoever wrote it did (forever and never admit)
src/statsbadge/badge_app/__init__.py:842:17: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Frames while it thins out and not before:)
src/statsbadge/badge_app/__init__.py:854:17: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Over the gap to the next reading, so)
src/statsbadge/badge_app/__init__.py:859:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (This page moves on its own, so it)
src/statsbadge/badge_app/__init__.py:862:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A gauge is part way to its reading,)
src/statsbadge/badge_app/__init__.py:868:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A plot walks left the whole time between)
src/statsbadge/badge_app/__init__.py:869:13: error SHP005 "it" has no mind to make that up with; say what it does (it wants)
src/statsbadge/badge_app/__init__.py:875:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Page on by itself when nobody has pressed)
src/statsbadge/badge_app/__init__.py:910:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whatever went wrong, this screen has to say)
src/statsbadge/badge_app/__init__.py:921:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A turn is waiting for the presses to)
src/statsbadge/badge_app/__init__.py:921:13: warning SHP032 "pip" did not do that; whoever wrote it did (pip say)
src/statsbadge/badge_app/__init__.py:921:13: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the pip say where it is going, and)
src/statsbadge/badge_app/__init__.py:922:13: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/badge_app/__init__.py:923:13: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (Nothing is left in flight to)
src/statsbadge/badge_app/__init__.py:937:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A page turn part way through: two cards,)
src/statsbadge/badge_app/__init__.py:953:17: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Landed: the finished page is already drawn in)
src/statsbadge/badge_app/__init__.py:963:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (One more frame, so the page is redrawn)
src/statsbadge/badge_app/__init__.py:970:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Arriving from the left, so its right hand)
src/statsbadge/badge_app/__init__.py:1001:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Collect between frames, at a moment when nothing)
src/statsbadge/badge_app/__init__.py:1005:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/__init__.py:1019:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Persist the page index, if it moved. Called)
src/statsbadge/badge_app/__init__.py:1033:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Before anything is drawn: a collect on allocation)
src/statsbadge/badge_app/__init__.py:1040:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Say something before the first fetch lands: a)
src/statsbadge/badge_app/__init__.py:1069:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (B selects, as it does on every screen)
src/statsbadge/badge_app/__init__.py:1081:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The panel's own ramp, which owes nothing to)
src/statsbadge/badge_app/__init__.py:1085:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A stats page changes when a poll lands,)
src/statsbadge/badge_app/__init__.py:1092:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (After the frame is composited, so a sweep)
src/statsbadge/badge_app/__init__.py:1100:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Called by the launcher when HOME quits the)
src/statsbadge/badge_app/draw.py:1:1: warning SHL008 4 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:1:1: error SHM002 58 of 145 blocks end on "so the ..." (40%, limit 30%)
src/statsbadge/badge_app/draw.py:1:1: error SHM003 70 of 145 blocks pivot on a colon (48%, limit 40%)
src/statsbadge/badge_app/draw.py:1:1: error SHP001 30 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
src/statsbadge/badge_app/draw.py:1:1: error SHP013 32 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/badge_app/draw.py:1:1: error SHP015 5 blocks in this file use instead-of (budget 3); the count is the finding, search for the word to find them (instead of)
src/statsbadge/badge_app/draw.py:1:1: error SHP016 9 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (which is where)
src/statsbadge/badge_app/draw.py:1:1: error SHP018 11 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (reads as)
src/statsbadge/badge_app/draw.py:1:1: error SHP023 5 blocks in this file use valuation (budget 3); the count is the finding, search for the word to find them (worth keeping)
src/statsbadge/badge_app/draw.py:1:1: error SHP025 15 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not a)
src/statsbadge/badge_app/draw.py:1:1: error SHP030 9 blocks in this file use the-whole-thing (budget 3); the count is the finding, search for the word to find them (the whole ramp)
src/statsbadge/badge_app/draw.py:3:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (The costs that shape this (measured)
src/statsbadge/badge_app/draw.py:9:1: warning SHP031 verb with its object dropped; name the thing being carried (they stand,)
src/statsbadge/badge_app/draw.py:10:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (A page that splits into something)
src/statsbadge/badge_app/draw.py:27:1: error SHL001 48 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/draw.py:27:1: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (A message travels only when it)
src/statsbadge/badge_app/draw.py:27:1: warning SHP031 verb with its object dropped; name the thing being carried (to hold.)
src/statsbadge/badge_app/draw.py:36:1: error SHL001 65 words of comment for 3 lines of code (limit 60)
src/statsbadge/badge_app/draw.py:36:1: warning SHP032 "key" did not do that; whoever wrote it did (key can say)
src/statsbadge/badge_app/draw.py:38:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a letter of the same string would collide, and)
src/statsbadge/badge_app/draw.py:83:39: warning SHP032 "BLE001" did not do that; whoever wrote it did (BLE001 try)
src/statsbadge/badge_app/draw.py:135:1: error SHL001 84 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:135:1: warning SHL008 8 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:142:1: error SHL001 132 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:142:1: error SHL007 8 lines in one block (limit 6)
src/statsbadge/badge_app/draw.py:142:1: warning SHL008 7 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:142:1: error SHL009 sentence runs to 62 words (limit 40); break it with a full stop (Every reading that moves is a)
src/statsbadge/badge_app/draw.py:142:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (Every reading that moves is a)
src/statsbadge/badge_app/draw.py:145:1: error SHL002 comment line is 98 characters (limit 96)
src/statsbadge/badge_app/draw.py:148:1: error SHL002 comment line is 98 characters (limit 96)
src/statsbadge/badge_app/draw.py:149:1: error SHL002 comment line is 98 characters (limit 96)
src/statsbadge/badge_app/draw.py:152:1: error SHL001 40 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:152:1: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:209:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/draw.py:269:5: warning SHP032 "describes" did not do that; whoever wrote it did (describes agree)
src/statsbadge/badge_app/draw.py:283:1: error SHL001 93 words of comment for 3 lines of code (limit 60)
src/statsbadge/badge_app/draw.py:284:1: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (A wide font keeps both ratios,)
src/statsbadge/badge_app/draw.py:310:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:312:5: error SHP005 "other" has no mind to make that up with; say what it does (other cannot know)
src/statsbadge/badge_app/draw.py:325:1: error SHL006 68 words in one block (limit 60)
src/statsbadge/badge_app/draw.py:325:1: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:357:1: error SHL001 103 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:357:1: warning SHP032 "up" did not do that; whoever wrote it did (up and says)
src/statsbadge/badge_app/draw.py:358:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and fifteen minutes, and)
src/statsbadge/badge_app/draw.py:360:1: error SHL009 sentence runs to 49 words (limit 40); break it with a full stop (Per-core loads are the other list)
src/statsbadge/badge_app/draw.py:360:1: warning SHP031 verb with its object dropped; name the thing being carried (can hold,)
src/statsbadge/badge_app/draw.py:375:5: warning SHL008 4 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:430:1: error SHL001 59 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:430:1: warning SHL008 5 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:471:5: warning SHL008 5 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:471:5: warning SHP031 verb with its object dropped; name the thing being carried (they stand.)
src/statsbadge/badge_app/draw.py:486:5: warning SHP032 "turn" did not do that; whoever wrote it did (turn can say)
src/statsbadge/badge_app/draw.py:486:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the pip are the page you are on, and)
src/statsbadge/badge_app/draw.py:552:1: error SHL001 42 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:568:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/draw.py:601:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/badge_app/draw.py:654:9: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/badge_app/draw.py:656:9: warning SHP032 "0M" did not do that; whoever wrote it did (0M still says)
src/statsbadge/badge_app/draw.py:661:9: error SHP005 the reader's body standing in for the reader (the eye expects)
src/statsbadge/badge_app/draw.py:686:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/badge_app/draw.py:704:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/draw.py:802:1: error SHL001 43 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:804:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
src/statsbadge/badge_app/draw.py:813:5: warning SHC006 describes an approach that is not in the file; nothing here can check it (instead cost)
src/statsbadge/badge_app/draw.py:813:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:888:5: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:914:5: error SHL001 52 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:919:5: error SHL001 60 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:920:5: error SHP002 tells the reader the code is easy; say what it does (simply)
src/statsbadge/badge_app/draw.py:934:5: error SHP033 frames the code as a story; describe the behaviour (the honest thing)
src/statsbadge/badge_app/draw.py:966:1: error SHL001 71 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/draw.py:966:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (Anti-aliased, so it costs its edges:)
src/statsbadge/badge_app/draw.py:984:1: error SHL001 83 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:995:5: warning SHP032 "time" did not do that; whoever wrote it did (time and says)
src/statsbadge/badge_app/draw.py:1040:5: warning SHP031 verb with its object dropped; name the thing being carried (holds.)
src/statsbadge/badge_app/draw.py:1077:1: error SHL001 54 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:1077:1: error SHL009 sentence runs to 47 words (limit 40); break it with a full stop (The first is nearly solid and)
src/statsbadge/badge_app/draw.py:1081:1: error SHL001 61 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:1094:5: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/badge_app/draw.py:1174:5: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
src/statsbadge/badge_app/draw.py:1175:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and half is strings that want reading, and)
src/statsbadge/badge_app/draw.py:1264:5: warning SHP032 "it" did not do that; whoever wrote it did (it says)
src/statsbadge/badge_app/draw.py:1284:1: error SHL001 41 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/draw.py:1284:1: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (The gap between a picture and)
src/statsbadge/badge_app/draw.py:1284:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the words beside it, and)
src/statsbadge/badge_app/draw.py:1295:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and not scaled: the pixels are palette indices, and)
src/statsbadge/badge_app/draw.py:1327:5: warning SHP031 verb with its object dropped; name the thing being carried (can afford.)
src/statsbadge/badge_app/draw.py:1336:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/draw.py:1352:5: warning SHP032 "it" did not do that; whoever wrote it did (it says)
src/statsbadge/badge_app/draw.py:1490:1: error SHL001 45 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:1519:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/draw.py:1551:9: error SHL001 42 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/draw.py:1559:1: error SHL001 67 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/draw.py:1568:5: error SHC001 comment describes a past state of the code (no longer); the change belongs in the commit message (no longer)
src/statsbadge/badge_app/draw.py:1570:5: warning SHP032 "page" did not do that; whoever wrote it did (page that says)
src/statsbadge/badge_app/draw.py:1602:9: error SHP017 fragment with no finite verb; make it a sentence (this being)
src/statsbadge/badge_app/draw.py:1644:5: error SHL001 65 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/draw.py:1644:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and 190 tall, and)
src/statsbadge/badge_app/draw.py:1693:5: warning SHP032 "own" did not do that; whoever wrote it did (own does not say)
src/statsbadge/badge_app/draw.py:1750:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/draw.py:1771:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/look.py:1:1: error SHM002 14 of 30 blocks end on "so the ..." (47%, limit 30%)
src/statsbadge/badge_app/look.py:1:1: error SHM003 15 of 30 blocks pivot on a colon (50%, limit 40%)
src/statsbadge/badge_app/look.py:1:1: error SHP001 4 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own full)
src/statsbadge/badge_app/look.py:1:1: error SHP013 9 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/badge_app/look.py:1:1: error SHP016 5 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (What ambient light is)
src/statsbadge/badge_app/look.py:12:1: warning SHP032 "footer" did not do that; whoever wrote it did (footer says)
src/statsbadge/badge_app/look.py:21:1: error SHL001 108 words of comment for 3 lines of code (limit 60)
src/statsbadge/badge_app/look.py:23:1: error SHL009 sentence runs to 68 words (limit 40); break it with a full stop (The gauge, the gap to the)
src/statsbadge/badge_app/look.py:25:1: error SHP005 "object" has no mind to make that up with; say what it does (object and wants)
src/statsbadge/badge_app/look.py:25:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and wants the space, and)
src/statsbadge/badge_app/look.py:34:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and run clockwise: 225 is lower-left, and)
src/statsbadge/badge_app/look.py:52:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/look.py:52:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the column read as one block, and)
src/statsbadge/badge_app/look.py:62:1: error SHL001 43 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/look.py:63:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and can change under us, and)
src/statsbadge/badge_app/look.py:79:1: error SHL001 111 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/look.py:79:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/badge_app/look.py:83:1: error SHL009 sentence runs to 51 words (limit 40); break it with a full stop (BRIGHT is where the panel wants)
src/statsbadge/badge_app/look.py:83:1: error SHP005 "panel" has no mind to make that up with; say what it does (panel wants)
src/statsbadge/badge_app/look.py:89:1: error SHL001 40 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/look.py:96:5: error SHP005 the reader's body standing in for the reader (the eye is)
src/statsbadge/badge_app/look.py:118:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (Measured on the board rather than)
src/statsbadge/badge_app/look.py:141:1: error SHL001 90 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/look.py:141:1: error SHL009 sentence runs to 59 words (limit 40); break it with a full stop (Not the panel colour, though that)
src/statsbadge/badge_app/look.py:152:5: error SHP005 "theme" has no mind to make that up with; say what it does (theme decides)
src/statsbadge/badge_app/look.py:162:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/look.py:176:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/look.py:178:9: error SHL001 57 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/look.py:192:9: error SHL001 63 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/look.py:200:9: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/look.py:200:9: error SHP005 the reader's body standing in for the reader (the eye reads)
src/statsbadge/badge_app/look.py:259:9: warning SHP032 "length" did not do that; whoever wrote it did (length says)
src/statsbadge/badge_app/look.py:259:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Stats: a host PC's vitals on the badge,)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHM002 34 of 108 blocks end on "so the ..." (31%, limit 30%)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHM003 48 of 108 blocks pivot on a colon (44%, limit 40%)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHP001 9 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own input)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHP013 15 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHP015 4 blocks in this file use instead-of (budget 3); the count is the finding, search for the word to find them (instead of)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHP016 6 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (is what the)
src/statsbadge/badge_app/mpy/__init__.py:1:1: error SHP025 8 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (. Nothing)
src/statsbadge/badge_app/mpy/__init__.py:10:1: error SHP005 "host" has no mind to make that up with; say what it does (host decides)
src/statsbadge/badge_app/mpy/__init__.py:25:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Not installed: running from a mounted checkout. Locate)
src/statsbadge/badge_app/mpy/__init__.py:51:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Import the pairing screens on demand. The badge)
src/statsbadge/badge_app/mpy/__init__.py:62:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Import any badge-side modules an extension had pushed)
src/statsbadge/badge_app/mpy/__init__.py:89:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (HOME opens the hosts menu, so the launcher's)
src/statsbadge/badge_app/mpy/__init__.py:89:1: error SHL001 42 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/mpy/__init__.py:89:1: warning SHP039 say "removed" (taken off)
src/statsbadge/badge_app/mpy/__init__.py:95:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How much may be allocated between collects, and)
src/statsbadge/badge_app/mpy/__init__.py:95:1: error SHL001 115 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/mpy/__init__.py:95:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/badge_app/mpy/__init__.py:95:1: warning SHL008 6 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/mpy/__init__.py:96:1: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/badge_app/mpy/__init__.py:96:1: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (Left to itself the collector runs)
src/statsbadge/badge_app/mpy/__init__.py:98:1: error SHL002 comment line is 98 characters (limit 96)
src/statsbadge/badge_app/mpy/__init__.py:99:1: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (The threshold covers an animated page,)
src/statsbadge/badge_app/mpy/__init__.py:105:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (State writes /state/<app>.json, the same file net.Config keeps)
src/statsbadge/badge_app/mpy/__init__.py:109:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The lowest display.backlight value that lights the panel,)
src/statsbadge/badge_app/mpy/__init__.py:109:1: error SHL001 61 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/mpy/__init__.py:110:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (The driver raises its input to)
src/statsbadge/badge_app/mpy/__init__.py:115:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The smallest change worth asking for. display.backlight() is)
src/statsbadge/badge_app/mpy/__init__.py:115:1: error SHL001 42 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/mpy/__init__.py:115:1: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (The smallest change worth asking for.)
src/statsbadge/badge_app/mpy/__init__.py:120:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The share of the theme's case light level)
src/statsbadge/badge_app/mpy/__init__.py:124:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How much of a step to take towards)
src/statsbadge/badge_app/mpy/__init__.py:124:1: error SHL001 87 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/mpy/__init__.py:126:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (A tenth of the gap ten)
src/statsbadge/badge_app/mpy/__init__.py:132:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How many reads go into one of those.)
src/statsbadge/badge_app/mpy/__init__.py:132:1: error SHL001 83 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/mpy/__init__.py:139:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Bindings this badge answers itself, and the shares)
src/statsbadge/badge_app/mpy/__init__.py:139:1: error SHL001 43 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/mpy/__init__.py:145:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How many presses can be waiting for the)
src/statsbadge/badge_app/mpy/__init__.py:145:1: error SHL001 68 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/mpy/__init__.py:153:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How long a page takes to slide on,)
src/statsbadge/badge_app/mpy/__init__.py:156:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How long a press waits for another before)
src/statsbadge/badge_app/mpy/__init__.py:156:1: error SHL001 55 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/mpy/__init__.py:162:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How long the panel takes to reach a)
src/statsbadge/badge_app/mpy/__init__.py:165:1: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Where the panel is, and where it was)
src/statsbadge/badge_app/mpy/__init__.py:174:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Set the display brightness, over the range the)
src/statsbadge/badge_app/mpy/__init__.py:184:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Head for a brightness, easing there over `ms`.)
src/statsbadge/badge_app/mpy/__init__.py:191:5: error SHP005 "arrived" has no mind to make that up with; say what it does (arrived wants)
src/statsbadge/badge_app/mpy/__init__.py:191:5: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody asked)
src/statsbadge/badge_app/mpy/__init__.py:210:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Move the panel along its ramp, if it)
src/statsbadge/badge_app/mpy/__init__.py:228:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A local override of the configured brightness, for)
src/statsbadge/badge_app/mpy/__init__.py:233:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (When a button was last touched, and when)
src/statsbadge/badge_app/mpy/__init__.py:238:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The half of the frame that hardly ever)
src/statsbadge/badge_app/mpy/__init__.py:248:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whether the panel has been set once, so)
src/statsbadge/badge_app/mpy/__init__.py:250:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The page turn in progress, if the layout)
src/statsbadge/badge_app/mpy/__init__.py:250:9: error SHL009 sentence runs to 50 words (limit 40); break it with a full stop (The page turn in progress, if)
src/statsbadge/badge_app/mpy/__init__.py:250:9: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (The page turn in progress, if)
src/statsbadge/badge_app/mpy/__init__.py:260:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A turn waiting for the presses to stop:)
src/statsbadge/badge_app/mpy/__init__.py:268:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Poll state: one request in flight at a)
src/statsbadge/badge_app/mpy/__init__.py:273:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A request to make on the very next)
src/statsbadge/badge_app/mpy/__init__.py:276:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Presses waiting for the connection, oldest first, each)
src/statsbadge/badge_app/mpy/__init__.py:278:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How old the newest point in the series)
src/statsbadge/badge_app/mpy/__init__.py:287:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (State.load merges into the dict it is given)
src/statsbadge/badge_app/mpy/__init__.py:316:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The movement waits for the presses to stop;)
src/statsbadge/badge_app/mpy/__init__.py:316:13: error SHL001 109 words of comment for 4 lines of code (limit 80)
src/statsbadge/badge_app/mpy/__init__.py:316:13: error SHL007 8 lines in one block (limit 6)
src/statsbadge/badge_app/mpy/__init__.py:318:13: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/badge_app/mpy/__init__.py:320:13: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (Waiting would give a slide per)
src/statsbadge/badge_app/mpy/__init__.py:331:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Start a waiting page turn once the presses)
src/statsbadge/badge_app/mpy/__init__.py:335:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/mpy/__init__.py:341:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Only reached with nothing in flight: a press)
src/statsbadge/badge_app/mpy/__init__.py:351:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Set a page turn moving: the page arriving)
src/statsbadge/badge_app/mpy/__init__.py:351:9: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/mpy/__init__.py:353:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/mpy/__init__.py:371:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whatever was on the screen, toast and all:)
src/statsbadge/badge_app/mpy/__init__.py:381:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Render a page somewhere other than the screen.)
src/statsbadge/badge_app/mpy/__init__.py:408:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Advance whatever request is in flight, or start)
src/statsbadge/badge_app/mpy/__init__.py:419:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Ahead of anything the badge asks for itself:)
src/statsbadge/badge_app/mpy/__init__.py:436:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Back off when the host is not answering,)
src/statsbadge/badge_app/mpy/__init__.py:445:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (One the badge has never had, or one)
src/statsbadge/badge_app/mpy/__init__.py:454:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The series follows the stats rather than taking)
src/statsbadge/badge_app/mpy/__init__.py:454:9: error SHL001 122 words of comment for 5 lines of code (limit 100)
src/statsbadge/badge_app/mpy/__init__.py:454:9: error SHL007 8 lines in one block (limit 6)
src/statsbadge/badge_app/mpy/__init__.py:454:9: error SHL009 sentence runs to 56 words (limit 40); break it with a full stop (The series follows the stats rather)
src/statsbadge/badge_app/mpy/__init__.py:460:9: error SHP005 "thing" has no mind to make that up with; say what it does (thing that knows)
src/statsbadge/badge_app/mpy/__init__.py:467:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Which slow readings we already hold, so the)
src/statsbadge/badge_app/mpy/__init__.py:467:9: error SHL001 46 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/mpy/__init__.py:468:9: error SHP005 "app" has no mind to make that up with; say what it does (app knows)
src/statsbadge/badge_app/mpy/__init__.py:468:9: warning SHP032 "what" did not do that; whoever wrote it did (what tells)
src/statsbadge/badge_app/mpy/__init__.py:469:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/mpy/__init__.py:473:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Look for a paired host on the network)
src/statsbadge/badge_app/mpy/__init__.py:483:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Listening costs a frame's worth of time, so)
src/statsbadge/badge_app/mpy/__init__.py:504:21: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Another host's slow readings are not this one's,)
src/statsbadge/badge_app/mpy/__init__.py:517:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (An unpaired host we can see but cannot)
src/statsbadge/badge_app/mpy/__init__.py:523:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Keep the slow half of a frame, and)
src/statsbadge/badge_app/mpy/__init__.py:532:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A host too old to split the frame)
src/statsbadge/badge_app/mpy/__init__.py:541:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Post the oldest press, having dropped any that)
src/statsbadge/badge_app/mpy/__init__.py:562:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (403 is the host saying it does not)
src/statsbadge/badge_app/mpy/__init__.py:562:13: error SHP005 "it" has no mind to make that up with; say what it does (it does not know)
src/statsbadge/badge_app/mpy/__init__.py:563:13: warning SHP032 "so" did not do that; whoever wrote it did (so say)
src/statsbadge/badge_app/mpy/__init__.py:582:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A plot walks between the host's samples, so)
src/statsbadge/badge_app/mpy/__init__.py:582:13: error SHL006 69 words in one block (limit 60)
src/statsbadge/badge_app/mpy/__init__.py:583:13: error SHL009 sentence runs to 54 words (limit 40); break it with a full stop (The series is advanced from the)
src/statsbadge/badge_app/mpy/__init__.py:588:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Only meaningful when the lights follow a reading,)
src/statsbadge/badge_app/mpy/__init__.py:596:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (v=2 wraps the series in the two things)
src/statsbadge/badge_app/mpy/__init__.py:596:13: error SHL009 sentence runs to 64 words (limit 40); break it with a full stop (v=2 wraps the series in the)
src/statsbadge/badge_app/mpy/__init__.py:609:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Every field a page draws a series of,)
src/statsbadge/badge_app/mpy/__init__.py:611:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a trend draw one too, and)
src/statsbadge/badge_app/mpy/__init__.py:626:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The host sends the colours, so a theme)
src/statsbadge/badge_app/mpy/__init__.py:633:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The first layout to land is the badge)
src/statsbadge/badge_app/mpy/__init__.py:642:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (What the host calls the groups an extension)
src/statsbadge/badge_app/mpy/__init__.py:654:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The configured brightness, scaled by the room if)
src/statsbadge/badge_app/mpy/__init__.py:654:9: warning SHP032 "setting" did not do that; whoever wrote it did (setting says)
src/statsbadge/badge_app/mpy/__init__.py:659:9: error SHP005 "it" has no mind to make that up with; say what it does (it wants)
src/statsbadge/badge_app/mpy/__init__.py:659:9: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone reaching for)
src/statsbadge/badge_app/mpy/__init__.py:672:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Follow the room, slowly. Returns True when the)
src/statsbadge/badge_app/mpy/__init__.py:672:9: error SHP005 "panel" has no mind to make that up with; say what it does (panel wants)
src/statsbadge/badge_app/mpy/__init__.py:698:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Off, the theme's own level, or a level)
src/statsbadge/badge_app/mpy/__init__.py:728:21: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Nothing is on screen but the notice, so)
src/statsbadge/badge_app/mpy/__init__.py:735:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Only a press counts as being touched: the)
src/statsbadge/badge_app/mpy/__init__.py:741:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (What a button is bound to: something this)
src/statsbadge/badge_app/mpy/__init__.py:759:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Step the panel down and round again, over)
src/statsbadge/badge_app/mpy/__init__.py:761:9: error SHP005 "button" has no mind to make that up with; say what it does (button wants)
src/statsbadge/badge_app/mpy/__init__.py:761:9: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (someone reaching for)
src/statsbadge/badge_app/mpy/__init__.py:772:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Hold a press for the host, to go)
src/statsbadge/badge_app/mpy/__init__.py:786:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whether to offer the pairing screens. Not just)
src/statsbadge/badge_app/mpy/__init__.py:798:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Drop the connection and poll again now. Polls)
src/statsbadge/badge_app/mpy/__init__.py:819:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (How solid the toast should be drawn: 1)
src/statsbadge/badge_app/mpy/__init__.py:830:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Notice the things that change with time rather)
src/statsbadge/badge_app/mpy/__init__.py:832:9: warning SHP032 "forever" did not do that; whoever wrote it did (forever and never admit)
src/statsbadge/badge_app/mpy/__init__.py:842:17: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Frames while it thins out and not before:)
src/statsbadge/badge_app/mpy/__init__.py:854:17: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Over the gap to the next reading, so)
src/statsbadge/badge_app/mpy/__init__.py:859:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (This page moves on its own, so it)
src/statsbadge/badge_app/mpy/__init__.py:862:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A gauge is part way to its reading,)
src/statsbadge/badge_app/mpy/__init__.py:868:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A plot walks left the whole time between)
src/statsbadge/badge_app/mpy/__init__.py:869:13: error SHP005 "it" has no mind to make that up with; say what it does (it wants)
src/statsbadge/badge_app/mpy/__init__.py:875:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Page on by itself when nobody has pressed)
src/statsbadge/badge_app/mpy/__init__.py:910:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Whatever went wrong, this screen has to say)
src/statsbadge/badge_app/mpy/__init__.py:921:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A turn is waiting for the presses to)
src/statsbadge/badge_app/mpy/__init__.py:921:13: warning SHP032 "pip" did not do that; whoever wrote it did (pip say)
src/statsbadge/badge_app/mpy/__init__.py:921:13: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the pip say where it is going, and)
src/statsbadge/badge_app/mpy/__init__.py:922:13: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/badge_app/mpy/__init__.py:923:13: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (Nothing is left in flight to)
src/statsbadge/badge_app/mpy/__init__.py:937:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A page turn part way through: two cards,)
src/statsbadge/badge_app/mpy/__init__.py:953:17: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Landed: the finished page is already drawn in)
src/statsbadge/badge_app/mpy/__init__.py:963:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (One more frame, so the page is redrawn)
src/statsbadge/badge_app/mpy/__init__.py:970:13: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Arriving from the left, so its right hand)
src/statsbadge/badge_app/mpy/__init__.py:1001:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Collect between frames, at a moment when nothing)
src/statsbadge/badge_app/mpy/__init__.py:1005:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/mpy/__init__.py:1019:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Persist the page index, if it moved. Called)
src/statsbadge/badge_app/mpy/__init__.py:1033:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Before anything is drawn: a collect on allocation)
src/statsbadge/badge_app/mpy/__init__.py:1040:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Say something before the first fetch lands: a)
src/statsbadge/badge_app/mpy/__init__.py:1069:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (B selects, as it does on every screen)
src/statsbadge/badge_app/mpy/__init__.py:1081:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (The panel's own ramp, which owes nothing to)
src/statsbadge/badge_app/mpy/__init__.py:1085:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (A stats page changes when a poll lands,)
src/statsbadge/badge_app/mpy/__init__.py:1092:9: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (After the frame is composited, so a sweep)
src/statsbadge/badge_app/mpy/__init__.py:1100:5: error SHD001 this block appears in 2 places (1 other); say it once where the behaviour lives (Called by the launcher when HOME quits the)
src/statsbadge/badge_app/net.py:1:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/net.py:10:1: warning SHP032 "host" did not do that; whoever wrote it did (host refuses)
src/statsbadge/badge_app/net.py:24:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/net.py:30:1: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (Nothing listening comes back as ECONNRESET)
src/statsbadge/badge_app/net.py:30:1: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/badge_app/net.py:89:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/badge_app/net.py:121:13: error SHP010 temporary by this account and permanent in practice; add an owner or finish it (placeholder)
src/statsbadge/badge_app/net.py:121:13: warning SHP032 "hello" did not do that; whoever wrote it did (hello tells)
src/statsbadge/badge_app/net.py:253:9: error SHP010 temporary by this account and permanent in practice; add an owner or finish it (placeholder)
src/statsbadge/badge_app/net.py:426:9: warning SHP032 "host" did not do that; whoever wrote it did (host says)
src/statsbadge/badge_app/net.py:459:5: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/badge_app/net.py:485:17: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/badge_app/pages.py:1:1: error SHM002 22 of 71 blocks end on "so the ..." (31%, limit 30%)
src/statsbadge/badge_app/pages.py:1:1: error SHP001 14 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own history)
src/statsbadge/badge_app/pages.py:1:1: error SHP013 7 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/badge_app/pages.py:1:1: error SHP025 5 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not a)
src/statsbadge/badge_app/pages.py:2:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (A page is data: `{"kind": "dial",)
src/statsbadge/badge_app/pages.py:18:1: error SHL001 40 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:32:1: error SHL001 100 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:32:1: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (How far back in the series)
src/statsbadge/badge_app/pages.py:32:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (How far back in the series)
src/statsbadge/badge_app/pages.py:39:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (How far apart the points are,)
src/statsbadge/badge_app/pages.py:61:1: error SHL001 51 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:87:1: error SHP005 "so" has no mind to make that up with; say what it does (so want)
src/statsbadge/badge_app/pages.py:92:1: error SHL001 44 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/pages.py:97:1: error SHP005 "loop" has no mind to make that up with; say what it does (loop knows)
src/statsbadge/badge_app/pages.py:106:5: warning SHP032 "reading" did not do that; whoever wrote it did (reading would say)
src/statsbadge/badge_app/pages.py:115:5: error SHP005 "turn" has no mind to make that up with; say what it does (turn forgets)
src/statsbadge/badge_app/pages.py:135:1: error SHL001 44 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:159:1: error SHP005 "bar" has no mind to make that up with; say what it does (bar knows)
src/statsbadge/badge_app/pages.py:180:1: error SHL001 45 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:196:1: error SHL001 53 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:248:5: error SHC001 comment describes a past state of the code (used to, this was); the change belongs in the commit message (used to)
src/statsbadge/badge_app/pages.py:262:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and whatever else a source asked it to, and)
src/statsbadge/badge_app/pages.py:313:5: warning SHP032 "slot" did not do that; whoever wrote it did (slot says)
src/statsbadge/badge_app/pages.py:339:5: error SHP033 frames the code as a story; describe the behaviour (honestly)
src/statsbadge/badge_app/pages.py:341:5: warning SHP032 "host" did not do that; whoever wrote it did (host says)
src/statsbadge/badge_app/pages.py:368:5: warning SHP032 "quiet" did not do that; whoever wrote it did (quiet says)
src/statsbadge/badge_app/pages.py:415:5: error SHL009 sentence runs to 56 words (limit 40); break it with a full stop (The same two arrows point opposite)
src/statsbadge/badge_app/pages.py:415:5: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (The same two arrows point opposite)
src/statsbadge/badge_app/pages.py:437:5: warning SHP032 "whatever" did not do that; whoever wrote it did (whatever tells)
src/statsbadge/badge_app/pages.py:438:5: error SHP005 "subsystem" has no mind to make that up with; say what it does (subsystem wants)
src/statsbadge/badge_app/pages.py:468:5: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody puts)
src/statsbadge/badge_app/pages.py:477:13: warning SHP032 "counters" did not do that; whoever wrote it did (counters should still say)
src/statsbadge/badge_app/pages.py:519:1: error SHL001 63 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/pages.py:519:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (What the badge is, as against)
src/statsbadge/badge_app/pages.py:542:1: error SHL001 83 words of comment for 3 lines of code (limit 60)
src/statsbadge/badge_app/pages.py:542:1: warning SHL008 4 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/pages.py:543:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and takes 44ms, and)
src/statsbadge/badge_app/pages.py:578:5: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
src/statsbadge/badge_app/pages.py:602:9: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/badge_app/pages.py:626:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and not CF_GADGETOID_COM: the key is all the badge has, and)
src/statsbadge/badge_app/pages.py:627:5: warning SHP039 say "restored" (put back)
src/statsbadge/badge_app/pages.py:635:5: warning SHP032 "names" did not do that; whoever wrote it did (names that tell)
src/statsbadge/badge_app/pages.py:725:1: error SHP005 "side" has no mind to make that up with; say what it does (side knows)
src/statsbadge/badge_app/setup.py:231:5: error SHP002 tells the reader the code is easy; say what it does (merely)
src/statsbadge/badge_app/splash.py:1:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/splash.py:2:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (Shapes only, no font and no)
src/statsbadge/badge_app/worldmap.py:1:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/worldmap.py:1:1: error SHM002 12 of 32 blocks end on "so the ..." (38%, limit 30%)
src/statsbadge/badge_app/worldmap.py:1:1: error SHM003 14 of 32 blocks pivot on a colon (44%, limit 40%)
src/statsbadge/badge_app/worldmap.py:1:1: error SHP001 4 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (firmware's own world)
src/statsbadge/badge_app/worldmap.py:1:1: error SHP005 "page" has no mind to make that up with; say what it does (page that wants)
src/statsbadge/badge_app/worldmap.py:1:1: error SHP013 7 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/badge_app/worldmap.py:1:1: error SHP018 4 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (read as)
src/statsbadge/badge_app/worldmap.py:30:1: error SHL001 72 words of comment for 1 line of code (limit 20)
src/statsbadge/badge_app/worldmap.py:30:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/badge_app/worldmap.py:31:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and 18KB a frame; the polygons are held sorted by band, and)
src/statsbadge/badge_app/worldmap.py:32:1: error SHL002 comment line is 98 characters (limit 96)
src/statsbadge/badge_app/worldmap.py:36:1: error SHL001 56 words of comment for 2 lines of code (limit 40)
src/statsbadge/badge_app/worldmap.py:36:1: error SHL009 sentence runs to 50 words (limit 40); break it with a full stop (Two figures, because the wash goes)
src/statsbadge/badge_app/worldmap.py:37:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and toward the ink on a pale one, and)
src/statsbadge/badge_app/worldmap.py:59:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and building 288 shapes out of it is over a second, and)
src/statsbadge/badge_app/worldmap.py:77:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and places it, and)
src/statsbadge/badge_app/worldmap.py:185:5: error SHP005 "chosen" has no mind to make that up with; say what it does (chosen decides)
src/statsbadge/badge_app/worldmap.py:200:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and moves it; two pages hold two, and)
src/statsbadge/badge_app/worldmap.py:268:13: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/badge_app/worldmap.py:268:13: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/badge_app/worldmap.py:275:17: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/beacon.py:3:1: error SHP005 "server" has no body to do that with; say what it does (server shouts)
src/statsbadge/collect.py:1:1: error SHM002 14 of 34 blocks end on "so the ..." (41%, limit 30%)
src/statsbadge/collect.py:1:1: error SHM003 14 of 34 blocks pivot on a colon (41%, limit 40%)
src/statsbadge/collect.py:1:1: error SHP001 7 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own history)
src/statsbadge/collect.py:1:1: error SHP013 6 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/collect.py:1:1: error SHP025 5 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not a)
src/statsbadge/collect.py:15:1: error SHL001 51 words of comment for 1 line of code (limit 20)
src/statsbadge/collect.py:16:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and fell over on it, and)
src/statsbadge/collect.py:24:9: warning SHP032 "reply" did not do that; whoever wrote it did (reply can say)
src/statsbadge/collect.py:80:17: warning SHP032 "tick" did not do that; whoever wrote it did (tick tries)
src/statsbadge/collect.py:95:17: error SHL001 42 words of comment for 1 line of code (limit 20)
src/statsbadge/collect.py:96:17: error SHP005 "it" has no mind to make that up with; say what it does (it knows)
src/statsbadge/collect.py:113:9: warning SHP031 verb with its object dropped; name the thing being carried (they stand.)
src/statsbadge/collect.py:127:9: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/collect.py:129:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and sent sixty times, and)
src/statsbadge/collect.py:130:9: warning SHP032 "source" did not do that; whoever wrote it did (source says)
src/statsbadge/collect.py:153:9: warning SHP032 "badge" did not do that; whoever wrote it did (badge can tell)
src/statsbadge/collect.py:156:9: error SHP005 "thing" has no mind to make that up with; say what it does (thing that knows)
src/statsbadge/collect.py:163:9: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
src/statsbadge/collect.py:168:9: error SHC001 comment describes a past state of the code (used to, this was); the change belongs in the commit message (used to)
src/statsbadge/collect.py:307:9: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/collect.py:309:9: warning SHP032 "source" did not do that; whoever wrote it did (source claims)
src/statsbadge/collect.py:373:1: error SHL001 41 words of comment for 2 lines of code (limit 40)
src/statsbadge/collect.py:383:5: error SHP005 "groups" has no mind to make that up with; say what it does (groups and cannot know)
src/statsbadge/collect.py:385:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and units the way it names everything else, and)
src/statsbadge/derive.py:1:1: error SHM002 16 of 34 blocks end on "so the ..." (47%, limit 30%)
src/statsbadge/derive.py:1:1: error SHM003 21 of 34 blocks pivot on a colon (62%, limit 40%)
src/statsbadge/derive.py:1:1: error SHP001 11 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (accent's own hue)
src/statsbadge/derive.py:1:1: error SHP013 13 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/derive.py:1:1: error SHP016 9 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (is what a)
src/statsbadge/derive.py:1:1: error SHP018 5 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (reads as)
src/statsbadge/derive.py:2:1: error SHL009 sentence runs to 52 words (limit 40); break it with a full stop (The badge's own colour arithmetic is)
src/statsbadge/derive.py:5:1: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
src/statsbadge/derive.py:9:1: warning SHP032 "trip" did not do that; whoever wrote it did (trip agrees)
src/statsbadge/derive.py:16:1: error SHL001 44 words of comment for 1 line of code (limit 20)
src/statsbadge/derive.py:20:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/derive.py:21:1: warning SHP032 "family" did not do that; whoever wrote it did (family says)
src/statsbadge/derive.py:34:1: error SHL001 57 words of comment for 1 line of code (limit 20)
src/statsbadge/derive.py:34:1: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (Not a text ratio - an)
src/statsbadge/derive.py:38:1: error SHL001 46 words of comment for 2 lines of code (limit 40)
src/statsbadge/derive.py:43:1: error SHL001 47 words of comment for 2 lines of code (limit 40)
src/statsbadge/derive.py:43:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (From the single-hue themes this replaces,)
src/statsbadge/derive.py:49:1: error SHP005 "mode" has no mind to make that up with; say what it does (mode decides)
src/statsbadge/derive.py:52:1: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (The lightnesses are the shipped dark)
src/statsbadge/derive.py:53:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
src/statsbadge/derive.py:67:1: error SHL001 107 words of comment for 2 lines of code (limit 40)
src/statsbadge/derive.py:67:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/derive.py:68:1: warning SHP032 "hue" did not do that; whoever wrote it did (hue and says)
src/statsbadge/derive.py:68:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/derive.py:77:1: warning SHC006 describes an approach that is not in the file; nothing here can check it (instead, being whichever of the twelve offered)
src/statsbadge/derive.py:77:1: error SHL001 80 words of comment for 2 lines of code (limit 40)
src/statsbadge/derive.py:79:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/derive.py:202:5: warning SHP032 "swatch" did not do that; whoever wrote it did (swatch says)
src/statsbadge/derive.py:242:5: warning SHP031 verb with its object dropped; name the thing being carried (can hold,)
src/statsbadge/derive.py:263:5: warning SHP032 "again" did not do that; whoever wrote it did (again says)
src/statsbadge/derive.py:277:5: warning SHP032 "mode" did not do that; whoever wrote it did (mode says)
src/statsbadge/derive.py:294:5: warning SHC006 describes an approach that is not in the file; nothing here can check it (instead of being squashed against the ceilin)
src/statsbadge/derive.py:300:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/derive.py:319:5: error SHP017 fragment with no finite verb; make it a sentence (it being)
src/statsbadge/derive.py:322:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/derive.py:323:5: error SHP002 tells the reader the code is easy; say what it does (simply)
src/statsbadge/derive.py:334:1: error SHL001 93 words of comment for 2 lines of code (limit 40)
src/statsbadge/derive.py:334:1: error SHL009 sentence runs to 62 words (limit 40); break it with a full stop (Where a picture's levels sit, in)
src/statsbadge/derive.py:334:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (Where a picture's levels sit, in)
src/statsbadge/derive.py:335:1: error SHP005 "ramp" has no mind to make that up with; say what it does (ramp and knows)
src/statsbadge/derive.py:337:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and white because a page is neither, and)
src/statsbadge/derive.py:342:1: error SHL006 114 words in one block (limit 60)
src/statsbadge/derive.py:342:1: error SHL007 7 lines in one block (limit 6)
src/statsbadge/derive.py:343:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and gets a phosphor screen, and)
src/statsbadge/derive.py:346:1: error SHL009 sentence runs to 48 words (limit 40); break it with a full stop (Against the hue's limit at each)
src/statsbadge/derive.py:348:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/derive.py:351:1: error SHL001 48 words of comment for 1 line of code (limit 20)
src/statsbadge/derive.py:351:1: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (Both travel, because index 2 of)
src/statsbadge/derive.py:361:5: warning SHP031 verb with its object dropped; name the thing being carried (can hold.)
src/statsbadge/derive.py:378:5: warning SHP031 verb with its object dropped; name the thing being carried (to carry.)
src/statsbadge/derive.py:388:5: error SHP005 "label" has no mind to make that up with; say what it does (label wants)
src/statsbadge/derive.py:388:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/derive.py:392:5: warning SHP032 "palette" did not do that; whoever wrote it did (palette says)
src/statsbadge/derive.py:402:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a dark accent nothing on a dark one, and)
src/statsbadge/extensions.py:1:1: error SHP001 4 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (frame's own group)
src/statsbadge/extensions.py:14:1: warning SHP032 "font" did not do that; whoever wrote it did (font say)
src/statsbadge/extensions.py:34:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/extensions.py:35:5: error SHP005 "load" has no mind to make that up with; say what it does (load wants)
src/statsbadge/extensions.py:131:5: error SHP005 "it" has no mind to make that up with; say what it does (it knows)
src/statsbadge/extensions.py:138:13: warning SHP032 "group" did not do that; whoever wrote it did (group says)
src/statsbadge/extensions.py:180:5: error SHP005 "page" has no mind to make that up with; say what it does (page knows)
src/statsbadge/extensions.py:180:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and not by extension: the config UI is editing a page, and)
src/statsbadge/identity.py:1:1: error SHC001 comment describes a past state of the code (no longer); the change belongs in the commit message (no longer)
src/statsbadge/identity.py:9:1: warning SHP032 "it" did not do that; whoever wrote it did (it says)
src/statsbadge/imaging.py:1:1: error SHM002 6 of 19 blocks end on "so the ..." (32%, limit 30%)
src/statsbadge/imaging.py:1:1: error SHP013 5 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/imaging.py:4:1: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
src/statsbadge/imaging.py:8:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/imaging.py:25:1: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (Low is a thumbnail beside a)
src/statsbadge/imaging.py:35:1: error SHL001 53 words of comment for 2 lines of code (limit 40)
src/statsbadge/imaging.py:41:1: error SHL001 47 words of comment for 1 line of code (limit 20)
src/statsbadge/imaging.py:46:1: error SHL009 sentence runs to 53 words (limit 40); break it with a full stop (Ordered rather than diffused because the)
src/statsbadge/imaging.py:48:1: error SHP002 tells the reader the code is easy; say what it does (obviously)
src/statsbadge/imaging.py:58:1: error SHL001 48 words of comment for 1 line of code (limit 20)
src/statsbadge/imaging.py:200:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/imaging.py:213:5: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/install.py:1:1: error SHP013 6 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/install.py:1:1: error SHP025 7 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not a)
src/statsbadge/install.py:37:5: error SHP005 "difference" has no mind to make that up with; say what it does (difference decides)
src/statsbadge/install.py:70:9: warning SHP032 "board" did not do that; whoever wrote it did (board that says)
src/statsbadge/install.py:99:1: error SHL001 58 words of comment for 1 line of code (limit 20)
src/statsbadge/install.py:128:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/install.py:153:9: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
src/statsbadge/install.py:160:5: error SHP036 "a .mpy" is said "an .mpy" (a .mpy)
src/statsbadge/install.py:236:9: error SHP010 temporary by this account and permanent in practice; add an owner or finish it (placeholder)
src/statsbadge/install.py:365:5: warning SHP032 "message" did not do that; whoever wrote it did (message tells)
src/statsbadge/install.py:460:5: error SHP002 tells the reader the code is easy; say what it does (simply)
src/statsbadge/install.py:589:5: error SHP005 "place" has no mind to make that up with; say what it does (place that decides)
src/statsbadge/install.py:611:5: error SHC001 comment describes a past state of the code (no longer, instead of the); the change belongs in the commit message (no longer)
src/statsbadge/install.py:634:1: error SHP005 "install" has no body to do that with; say what it does (install that eats)
src/statsbadge/install.py:634:1: error SHP036 "a install" is said "an install" (a install)
src/statsbadge/install.py:639:5: error SHC001 comment describes a past state of the code (no longer, the old one); the change belongs in the commit message (no longer)
src/statsbadge/install.py:641:5: error SHP036 "a .mpy" is said "an .mpy" (a .mpy)
src/statsbadge/install.py:679:17: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/install.py:721:5: error SHC001 comment describes a past state of the code (the old one, before, this); the change belongs in the commit message (the old one)
src/statsbadge/layout.py:1:1: error SHM002 22 of 59 blocks end on "so the ..." (37%, limit 30%)
src/statsbadge/layout.py:1:1: error SHM003 30 of 59 blocks pivot on a colon (51%, limit 40%)
src/statsbadge/layout.py:1:1: error SHP001 22 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
src/statsbadge/layout.py:1:1: error SHP013 7 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/layout.py:1:1: error SHP016 8 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (which is where)
src/statsbadge/layout.py:1:1: error SHP018 5 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (reads as)
src/statsbadge/layout.py:1:1: error SHP025 5 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (nothing else)
src/statsbadge/layout.py:4:1: warning SHP032 "page" did not do that; whoever wrote it did (page says)
src/statsbadge/layout.py:20:1: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
src/statsbadge/layout.py:39:1: warning SHP032 "page" did not do that; whoever wrote it did (page tells)
src/statsbadge/layout.py:43:1: error SHL001 55 words of comment for 1 line of code (limit 20)
src/statsbadge/layout.py:48:1: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/layout.py:48:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/layout.py:53:1: error SHL001 67 words of comment for 2 lines of code (limit 40)
src/statsbadge/layout.py:54:1: error SHL009 sentence runs to 48 words (limit 40); break it with a full stop (The tinted pair are the ones)
src/statsbadge/layout.py:55:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and not its result, and)
src/statsbadge/layout.py:64:1: error SHL009 sentence runs to 52 words (limit 40); break it with a full stop (Measured against the derived ones they)
src/statsbadge/layout.py:66:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and nothing anywhere else, and)
src/statsbadge/layout.py:67:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/layout.py:91:1: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/layout.py:115:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and never sends here: paging and the panel are its own business, and)
src/statsbadge/layout.py:125:1: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/layout.py:125:1: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
src/statsbadge/layout.py:275:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/layout.py:301:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/layout.py:338:9: error SHP005 "host" has no mind to make that up with; say what it does (host knows)
src/statsbadge/layout.py:355:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and `gpu`, and)
src/statsbadge/layout.py:357:5: warning SHP039 say "restored" (put back)
src/statsbadge/layout.py:361:5: warning SHP032 "badge" did not do that; whoever wrote it did (badge says)
src/statsbadge/layout.py:383:5: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
src/statsbadge/layout.py:399:5: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/layout.py:404:5: error SHL001 42 words of comment for 1 line of code (limit 20)
src/statsbadge/layout.py:417:5: error SHP005 "badge" has no mind to make that up with; say what it does (badge only knows)
src/statsbadge/layout.py:447:5: error SHL001 50 words of comment for 1 line of code (limit 20)
src/statsbadge/layout.py:448:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and moves for a third of it is a choice, and)
src/statsbadge/layout.py:471:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/layout.py:477:5: error SHL001 67 words of comment for 2 lines of code (limit 40)
src/statsbadge/layout.py:539:5: error SHP005 "latitude" has no mind to make that up with; say what it does (latitude wants)
src/statsbadge/layout.py:615:9: error SHP005 "badge" has no mind to make that up with; say what it does (badge knows)
src/statsbadge/layout.py:645:5: error SHL001 46 words of comment for 1 line of code (limit 20)
src/statsbadge/model.py:4:1: warning SHP032 "badge" did not do that; whoever wrote it did (badge can tell)
src/statsbadge/model.py:75:1: error SHL001 50 words of comment for 1 line of code (limit 20)
src/statsbadge/model.py:121:5: error SHP005 "gauge" has no mind to make that up with; say what it does (gauge knows)
src/statsbadge/model.py:136:5: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/model.py:138:5: error SHP005 "which" has no mind to make that up with; say what it does (which knows)
src/statsbadge/model.py:146:9: warning SHP032 "ring" did not do that; whoever wrote it did (ring and says)
src/statsbadge/repl.py:3:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and read what it printed, and)
src/statsbadge/repl.py:4:1: error SHL009 sentence runs to 48 words (limit 40); break it with a full stop (Both are the raw REPL -)
src/statsbadge/repl.py:19:1: error SHP005 "pyserial" has no mind to make that up with; say what it does (pyserial wants)
src/statsbadge/repl.py:21:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/server.py:1:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
src/statsbadge/server.py:1:1: error SHM002 14 of 44 blocks end on "so the ..." (32%, limit 30%)
src/statsbadge/server.py:1:1: error SHP001 9 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
src/statsbadge/server.py:27:1: warning SHC006 describes an approach that is not in the file; nothing here can check it (left in here refuses everything instead)
src/statsbadge/server.py:28:1: warning SHP032 "here" did not do that; whoever wrote it did (here refuses)
src/statsbadge/server.py:74:9: error SHP005 "extensions" has no mind to make that up with; say what it does (extensions know)
src/statsbadge/server.py:110:9: error SHC001 comment describes a past state of the code (used to); the change belongs in the commit message (used to)
src/statsbadge/server.py:110:9: error SHL001 50 words of comment for 2 lines of code (limit 40)
src/statsbadge/server.py:112:9: warning SHP026 opens on "What" with no main clause; make it a sentence (What a tinted theme can be built from, s)
src/statsbadge/server.py:125:9: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (Every discovered extension, not only the)
src/statsbadge/server.py:265:9: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
src/statsbadge/server.py:275:17: error SHP017 fragment with no finite verb; make it a sentence (this being)
src/statsbadge/server.py:313:13: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
src/statsbadge/server.py:313:13: warning SHP032 "badge" did not do that; whoever wrote it did (badge says)
src/statsbadge/server.py:314:13: error SHL009 sentence runs to 42 words (limit 40); break it with a full stop (Its own state travels in the)
src/statsbadge/server.py:316:13: error SHP005 "badge" has no mind to make that up with; say what it does (badge understands)
src/statsbadge/server.py:343:13: error SHL009 sentence runs to 56 words (limit 40); break it with a full stop (v=2 carries the spacing of the)
src/statsbadge/server.py:343:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/server.py:454:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/server.py:471:13: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
src/statsbadge/sources/__init__.py:43:13: error SHP002 tells the reader the code is easy; say what it does (simply)
src/statsbadge/sources/base.py:1:1: error SHM002 7 of 17 blocks end on "so the ..." (41%, limit 30%)
src/statsbadge/sources/base.py:1:1: error SHP001 7 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
src/statsbadge/sources/base.py:1:1: error SHP013 5 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/sources/base.py:13:5: warning SHP032 "exception" did not do that; whoever wrote it did (exception says)
src/statsbadge/sources/base.py:14:5: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/sources/base.py:37:5: error SHL001 59 words of comment for 1 line of code (limit 20)
src/statsbadge/sources/base.py:46:5: warning SHL006 51 words in one block (soft limit 40)
src/statsbadge/sources/base.py:62:5: error SHL006 77 words in one block (limit 60)
src/statsbadge/sources/base.py:64:5: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (Read off the source and not)
src/statsbadge/sources/base.py:88:5: error SHL001 77 words of comment for 1 line of code (limit 20)
src/statsbadge/sources/base.py:101:9: error SHL001 56 words of comment for 1 line of code (limit 20)
src/statsbadge/sources/base.py:155:9: error SHP005 "source" has no mind to make that up with; say what it does (source knows)
src/statsbadge/sources/base.py:173:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/sources/base.py:175:9: warning SHP032 "source" did not do that; whoever wrote it did (source says)
src/statsbadge/sources/base.py:176:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and recovers on its own schedule, and)
src/statsbadge/sources/linux.py:16:1: error SHP005 "panel" has no mind to make that up with; say what it does (panel wants)
src/statsbadge/sources/macos.py:1:1: error SHP013 4 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/sources/macos.py:1:1: error SHP025 5 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (nothing else)
src/statsbadge/sources/macos.py:10:1: error SHP002 tells the reader the code is easy; say what it does (simply)
src/statsbadge/sources/macos.py:28:1: error SHL001 49 words of comment for 2 lines of code (limit 40)
src/statsbadge/sources/macos.py:28:1: error SHL009 sentence runs to 49 words (limit 40); break it with a full stop (The one command this source runs)
src/statsbadge/sources/macos.py:29:1: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/sources/macos.py:41:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/sources/macos.py:75:9: warning SHP032 "poll" did not do that; whoever wrote it did (poll tries)
src/statsbadge/sources/macos.py:160:13: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/sources/macos.py:185:9: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/sources/macos.py:189:9: warning SHP032 "with" did not do that; whoever wrote it did (with that would refuse)
src/statsbadge/sources/macos.py:206:17: warning SHP032 "powermetrics" did not do that; whoever wrote it did (powermetrics that refuses)
src/statsbadge/sources/nvidia.py:3:1: error SHP005 "panel" has no mind to make that up with; say what it does (panel wants)
src/statsbadge/sources/portable.py:1:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (Everything psutil can answer on any)
src/statsbadge/state.py:9:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and sets one, and)
src/statsbadge/state.py:18:1: warning SHP031 verb with its object dropped; name the thing being carried (will hold.)
src/statsbadge/state.py:18:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/state.py:26:5: warning SHP031 verb with its object dropped; name the thing being carried (holds:)
src/statsbadge/state.py:50:17: error SHP017 fragment with no finite verb; make it a sentence (being what)
src/statsbadge/themes.py:1:1: error SHM002 9 of 13 blocks end on "so the ..." (69%, limit 30%)
src/statsbadge/themes.py:1:1: error SHM003 8 of 13 blocks pivot on a colon (62%, limit 40%)
src/statsbadge/themes.py:8:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and tiles on it ink / dim text, and)
src/statsbadge/themes.py:10:1: warning SHP032 "colour" did not do that; whoever wrote it did (colour that says)
src/statsbadge/themes.py:55:5: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (Nothing is inverted channel by channel)
src/statsbadge/themes.py:75:5: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (From a photograph of a kanzan)
src/statsbadge/themes.py:88:5: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (The five colours of the palette)
src/statsbadge/themes.py:100:5: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (The same five colours on paper:)
src/statsbadge/themes.py:106:9: error SHL009 sentence runs to 45 words (limit 40); break it with a full stop (The rind, as the second colour:)
src/statsbadge/themes.py:127:5: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (Unit-01: violet armour, the acid green)
src/statsbadge/tooling.py:1:1: error SHP001 4 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (uv's own receipt)
src/statsbadge/tooling.py:1:1: error SHP013 4 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/tooling.py:1:1: error SHP025 6 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not a)
src/statsbadge/tooling.py:31:1: warning SHP032 "what" did not do that; whoever wrote it did (what tells)
src/statsbadge/tooling.py:112:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and all, and)
src/statsbadge/tooling.py:174:5: error SHL002 comment line is 97 characters (limit 96)
src/statsbadge/tooling.py:175:5: warning SHP032 "here" did not do that; whoever wrote it did (here chooses)
src/statsbadge/tooling.py:191:5: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
src/statsbadge/tooling.py:229:5: error SHP005 "uv" has no mind to make that up with; say what it does (uv decide)
src/statsbadge/tooling.py:271:1: error SHL001 45 words of comment for 2 lines of code (limit 40)
src/statsbadge/tooling.py:271:1: error SHP005 "extension" has no mind to make that up with; say what it does (extension wants)
src/statsbadge/tooling.py:271:1: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
src/statsbadge/tooling.py:271:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/tooling.py:310:5: warning SHP032 "failure" did not do that; whoever wrote it did (failure and says)
src/statsbadge/tooling.py:310:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and says nothing about the versions, and)
src/statsbadge/web/app.js:1:1: warning SHL006 54 words in one block (soft limit 40)
src/statsbadge/web/app.js:1:1: error SHP001 20 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
src/statsbadge/web/app.js:1:1: error SHP013 12 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
src/statsbadge/web/app.js:1:1: error SHP016 4 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (. What an extension declared is)
src/statsbadge/web/app.js:1:1: error SHP025 10 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (nothing to)
src/statsbadge/web/app.js:1:1: error SHP030 5 blocks in this file use the-whole-thing (budget 3); the count is the finding, search for the word to find them (the whole item)
src/statsbadge/web/app.js:44:3: warning SHP032 "renderer" did not do that; whoever wrote it did (renderer tells)
src/statsbadge/web/app.js:83:1: warning SHL006 41 words in one block (soft limit 40)
src/statsbadge/web/app.js:98:79: error SHY001 trailing comment uses `/*` where this file's trailing comments mostly use `//` (/*)
src/statsbadge/web/app.js:98:79: warning SHY005 one short line in a block comment; a line comment would do
src/statsbadge/web/app.js:106:5: error SHY001 own-line comment uses `/*` where this file's own-line comments mostly use `//` (/*)
src/statsbadge/web/app.js:106:5: warning SHY005 one short line in a block comment; a line comment would do
src/statsbadge/web/app.js:156:1: warning SHP031 verb with its object dropped; name the thing being carried (can hold:)
src/statsbadge/web/app.js:164:1: warning SHP032 "nothing" did not do that; whoever wrote it did (nothing says)
src/statsbadge/web/app.js:174:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
src/statsbadge/web/app.js:189:1: warning SHL006 45 words in one block (soft limit 40)
src/statsbadge/web/app.js:218:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
src/statsbadge/web/app.js:288:1: error SHP005 "renderer" has no mind to make that up with; say what it does (renderer knows)
src/statsbadge/web/app.js:311:3: error SHC001 comment describes a past state of the code (changed); the change belongs in the commit message (changed)
src/statsbadge/web/app.js:346:3: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and two pickers, and)
src/statsbadge/web/app.js:373:1: error SHP005 "which" has no mind to make that up with; say what it does (which decides)
src/statsbadge/web/app.js:373:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and which edge is marked, and)
src/statsbadge/web/app.js:489:5: error SHP005 "extension" has no mind to make that up with; say what it does (extension knows)
src/statsbadge/web/app.js:528:21: error SHY001 trailing comment uses `/*` where this file's trailing comments mostly use `//` (/*)
src/statsbadge/web/app.js:528:21: warning SHY005 one short line in a block comment; a line comment would do
src/statsbadge/web/app.js:601:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and "set to the wrong one" have to be told apart, and)
src/statsbadge/web/app.js:699:3: warning SHP032 "readout" did not do that; whoever wrote it did (readout says)
src/statsbadge/web/app.js:806:1: warning SHL006 49 words in one block (soft limit 40)
src/statsbadge/web/app.js:806:1: error SHL009 sentence runs to 49 words (limit 40); break it with a full stop (-- the theme preview ---------------------------------------------------- The)
src/statsbadge/web/app.js:808:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and what reaches the badge cannot drift apart, and)
src/statsbadge/web/app.js:812:1: warning SHL006 42 words in one block (soft limit 40)
src/statsbadge/web/app.js:932:5: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (The whole ramp laid round the)
src/statsbadge/web/app.js:972:1: warning SHP032 "header" did not do that; whoever wrote it did (header says)
src/statsbadge/web/app.js:989:74: error SHY001 trailing comment uses `/*` where this file's trailing comments mostly use `//` (/*)
src/statsbadge/web/app.js:989:74: warning SHY005 one short line in a block comment; a line comment would do
src/statsbadge/web/app.js:998:21: error SHY001 trailing comment uses `/*` where this file's trailing comments mostly use `//` (/*)
src/statsbadge/web/app.js:998:21: warning SHY005 one short line in a block comment; a line comment would do
src/statsbadge/web/app.js:1049:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and gets a layout of its own, and)
src/statsbadge/web/app.js:1080:3: warning SHP032 "it" did not do that; whoever wrote it did (it says)
src/statsbadge/web/app.js:1122:1: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
src/statsbadge/web/app.js:1237:1: warning SHL006 54 words in one block (soft limit 40)
src/statsbadge/web/app.js:1244:1: warning SHL006 59 words in one block (soft limit 40)
src/statsbadge/web/app.js:1244:1: error SHL009 sentence runs to 53 words (limit 40); break it with a full stop (A source that finds out what)
src/statsbadge/web/app.js:1246:1: error SHP005 "pickers" has no mind to make that up with; say what it does (pickers know)
src/statsbadge/web/app.js:1312:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and its ground track as a list of points, and)
src/statsbadge/web/app.js:1339:5: error SHP004 hedge; either it does this or it does not (actually)
src/statsbadge/web/app.js:1370:3: warning SHL006 47 words in one block (soft limit 40)
src/statsbadge/web/app.js:1370:3: error SHL009 sentence runs to 47 words (limit 40); break it with a full stop (What each source is complaining about,)
src/statsbadge/web/app.js:1380:1: error SHP005 "extension" has no mind to make that up with; say what it does (extension does not always know)
stylelint.config.js:4:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:1:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (End-to-end checks for the server: framing,)
tests/test_core.py:1:1: error SHP001 52 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own)
tests/test_core.py:1:1: error SHP013 44 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
tests/test_core.py:1:1: error SHP015 6 blocks in this file use instead-of (budget 3); the count is the finding, search for the word to find them (instead of)
tests/test_core.py:1:1: error SHP016 20 blocks in this file use cleft-sentence (budget 3); the count is the finding, search for the word to find them (is what the)
tests/test_core.py:1:1: error SHP018 14 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (reads as)
tests/test_core.py:1:1: error SHP025 40 blocks in this file use negative-framing (budget 4); the count is the finding, search for the word to find them (is not a)
tests/test_core.py:1:1: error SHP030 9 blocks in this file use the-whole-thing (budget 3); the count is the finding, search for the word to find them (The whole point)
tests/test_core.py:64:9: error SHL001 41 words of comment for 1 line of code (limit 20)
tests/test_core.py:100:9: error SHP002 tells the reader the code is easy; say what it does (obviously)
tests/test_core.py:345:5: warning SHP032 "2" did not do that; whoever wrote it did (2 says)
tests/test_core.py:351:5: error SHL001 42 words of comment for 2 lines of code (limit 40)
tests/test_core.py:359:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:438:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:538:5: error SHC001 comment describes a past state of the code (removed the, the old one); the change belongs in the commit message (removed the)
tests/test_core.py:562:5: warning SHP032 "counter" did not do that; whoever wrote it did (counter must say)
tests/test_core.py:634:5: warning SHP032 "must" did not do that; whoever wrote it did (must refuse)
tests/test_core.py:662:5: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
tests/test_core.py:736:5: error SHP004 hedge; either it does this or it does not (actually)
tests/test_core.py:736:5: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:770:5: error SHP027 block opens on "And"; it reads as half of the comment above (And n)
tests/test_core.py:876:5: warning SHP039 say "remove" (take off)
tests/test_core.py:898:9: error SHP036 "a .mpy" is said "an .mpy" (a .mpy)
tests/test_core.py:1094:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tests/test_core.py:1097:5: warning SHP032 "badge" did not do that; whoever wrote it did (badge says)
tests/test_core.py:1098:5: error SHP005 "it" has no mind to make that up with; say what it does (it knows)
tests/test_core.py:1145:5: error SHP027 block opens on "And"; it reads as half of the comment above (And w)
tests/test_core.py:1173:5: warning SHP039 say "restored" (put back)
tests/test_core.py:1174:5: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody chose)
tests/test_core.py:1188:5: warning SHP032 "badge" did not do that; whoever wrote it did (badge says)
tests/test_core.py:1198:5: error SHP027 block opens on "And"; it reads as half of the comment above (And w)
tests/test_core.py:1286:5: error SHP005 "server" has no mind to make that up with; say what it does (server knows)
tests/test_core.py:1458:9: error SHP027 block opens on "And"; it reads as half of the comment above (And w)
tests/test_core.py:1506:5: error SHP005 "what" has no mind to make that up with; say what it does (what decides)
tests/test_core.py:1506:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:1561:9: error SHP004 hedge; either it does this or it does not (actually)
tests/test_core.py:1561:9: warning SHP032 "root" did not do that; whoever wrote it did (root claims)
tests/test_core.py:1594:5: error SHL001 76 words of comment for 1 line of code (limit 20)
tests/test_core.py:1595:5: error SHP005 "table" has no mind to make that up with; say what it does (table that remembers)
tests/test_core.py:1629:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
tests/test_core.py:1682:5: error SHP005 "CI" has no mind to make that up with; say what it does (CI wants)
tests/test_core.py:1682:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:1682:5: warning SHP032 "copy" did not do that; whoever wrote it did (copy still say)
tests/test_core.py:1702:5: error SHP027 block opens on "And"; it reads as half of the comment above (And r)
tests/test_core.py:1747:5: error SHP027 block opens on "And"; it reads as half of the comment above (And w)
tests/test_core.py:1753:5: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tests/test_core.py:1768:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:1798:5: warning SHP031 verb with its object dropped; name the thing being carried (carries.)
tests/test_core.py:1815:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a column, and)
tests/test_core.py:1916:9: error SHP005 "turn" has no mind to make that up with; say what it does (turn forgets)
tests/test_core.py:1916:9: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:1934:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and clipped: that is the card, and)
tests/test_core.py:1958:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:1973:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:1984:5: warning SHC006 describes an approach that is not in the file; nothing here can check it (instead gave)
tests/test_core.py:1998:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:2018:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:2026:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and not only the name, and)
tests/test_core.py:2051:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:2051:5: warning SHP032 "with" did not do that; whoever wrote it did (with agrees)
tests/test_core.py:2070:5: error SHL006 80 words in one block (limit 60)
tests/test_core.py:2071:5: error SHL009 sentence runs to 55 words (limit 40); break it with a full stop (Their lightnesses are fixed and the)
tests/test_core.py:2088:9: error SHL001 90 words of comment for 2 lines of code (limit 40)
tests/test_core.py:2088:9: error SHL007 7 lines in one block (limit 6)
tests/test_core.py:2088:9: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (The levels are placed exactly; what)
tests/test_core.py:2088:9: error SHP033 frames the code as a story; describe the behaviour (honest)
tests/test_core.py:2098:5: error SHP027 block opens on "And"; it reads as half of the comment above (And h)
tests/test_core.py:2099:5: error SHP017 fragment with no finite verb; make it a sentence (that being)
tests/test_core.py:2105:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:2105:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:2106:5: warning SHP032 "length" did not do that; whoever wrote it did (length says)
tests/test_core.py:2124:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:2158:5: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:2198:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
tests/test_core.py:2222:5: error SHP027 block opens on "And"; it reads as half of the comment above (And e)
tests/test_core.py:2240:5: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:2300:5: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
tests/test_core.py:2317:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and stays in its own hue where it has not, and)
tests/test_core.py:2326:13: warning SHP032 "gauge" did not do that; whoever wrote it did (gauge says)
tests/test_core.py:2332:13: error SHP004 hedge; either it does this or it does not (actually)
tests/test_core.py:2332:13: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:2332:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:2347:5: error SHP005 "badge" has no mind to make that up with; say what it does (badge never knows)
tests/test_core.py:2384:5: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody names)
tests/test_core.py:2401:5: warning SHL006 41 words in one block (soft limit 40)
tests/test_core.py:2401:5: warning SHP028 an unnamed person credited with a decision; name the setting or the caller (somebody chose)
tests/test_core.py:2401:5: warning SHP032 "badges" did not do that; whoever wrote it did (badges says)
tests/test_core.py:2447:9: error SHP027 block opens on "And"; it reads as half of the comment above (And w)
tests/test_core.py:2492:5: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:2499:5: warning SHP032 "it" did not do that; whoever wrote it did (it says)
tests/test_core.py:2525:5: error SHP017 fragment with no finite verb; make it a sentence (that being)
tests/test_core.py:2573:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tests/test_core.py:2580:5: error SHP005 "what" has no mind to make that up with; say what it does (what decides)
tests/test_core.py:2580:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:2614:13: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:2627:5: error SHC001 comment describes a past state of the code (used to); the change belongs in the commit message (used to)
tests/test_core.py:2634:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and then given positions of its own parses as invalid, and)
tests/test_core.py:2643:5: warning SHC006 describes an approach that is not in the file; nothing here can check it (the other way round and was)
tests/test_core.py:2652:5: error SHP004 hedge; either it does this or it does not (actually)
tests/test_core.py:2657:5: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:2729:5: error SHP027 block opens on "And"; it reads as half of the comment above (And n)
tests/test_core.py:2769:5: error SHP027 block opens on "And"; it reads as half of the comment above (And s)
tests/test_core.py:2789:5: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:2797:5: error SHL009 sentence runs to 49 words (limit 40); break it with a full stop (Whether to interpolate at all is)
tests/test_core.py:2809:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tests/test_core.py:2816:5: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (An axis with no full scale)
tests/test_core.py:2827:5: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:2854:5: error SHP005 "neither" has no mind to make that up with; say what it does (neither knows)
tests/test_core.py:2856:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and how old the newest is, and)
tests/test_core.py:2878:5: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:2881:5: warning SHP032 "setting" did not do that; whoever wrote it did (setting says)
tests/test_core.py:2901:5: error SHL001 45 words of comment for 1 line of code (limit 20)
tests/test_core.py:2921:5: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (A sparkline is drawn still whatever)
tests/test_core.py:2921:5: warning SHP032 "setting" did not do that; whoever wrote it did (setting says)
tests/test_core.py:2941:5: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:2989:5: error SHP027 block opens on "And"; it reads as half of the comment above (And o)
tests/test_core.py:3023:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:3083:5: error SHP017 fragment with no finite verb; make it a sentence (that being)
tests/test_core.py:3155:5: warning SHP032 "default" did not do that; whoever wrote it did (default and says)
tests/test_core.py:3198:5: warning SHP032 "docstring" did not do that; whoever wrote it did (docstring says)
tests/test_core.py:3225:9: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:3273:5: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:3286:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and "set to the wrong one" have to be told apart, and)
tests/test_core.py:3326:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:3372:9: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:3377:5: error SHL001 43 words of comment for 2 lines of code (limit 40)
tests/test_core.py:3443:5: error SHP005 "order" has no mind to make that up with; say what it does (order decides)
tests/test_core.py:3509:5: error SHP027 block opens on "And"; it reads as half of the comment above (And b)
tests/test_core.py:3545:5: warning SHP032 "failure" did not do that; whoever wrote it did (failure and says)
tests/test_core.py:3560:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:3565:5: warning SHP031 verb with its object dropped; name the thing being carried (carries.)
tests/test_core.py:3617:5: warning SHP032 "all" did not do that; whoever wrote it did (all try)
tests/test_core.py:3638:9: error SHP005 "guard" has no mind to make that up with; say what it does (guard that decides)
tests/test_core.py:3642:9: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:3647:5: error SHL002 comment line is 97 characters (limit 96)
tests/test_core.py:3686:5: warning SHP032 "message" did not do that; whoever wrote it did (message says)
tests/test_core.py:3692:5: error SHP004 hedge; either it does this or it does not (actually)
tests/test_core.py:3700:5: error SHP017 fragment with no finite verb; make it a sentence (that being)
tests/test_core.py:3703:5: warning SHP032 "UI" did not do that; whoever wrote it did (UI can say)
tests/test_core.py:3709:5: error SHP027 block opens on "And"; it reads as half of the comment above (And e)
tests/test_core.py:3728:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and two end markers, and)
tests/test_core.py:3804:9: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:3853:9: warning SHP032 "py" did not do that; whoever wrote it did (py says)
tests/test_core.py:3861:9: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (And a port that was never)
tests/test_core.py:3861:9: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tests/test_core.py:3885:5: error SHL002 comment line is 97 characters (limit 96)
tests/test_core.py:3886:5: error SHL002 comment line is 98 characters (limit 96)
tests/test_core.py:3905:13: error SHL002 comment line is 97 characters (limit 96)
tests/test_core.py:3934:9: error SHP027 block opens on "And"; it reads as half of the comment above (And e)
tests/test_core.py:3967:9: error SHL009 sentence runs to 49 words (limit 40); break it with a full stop (Which package it was, out of)
tests/test_core.py:3975:9: error SHP005 "uv" has no mind to make that up with; say what it does (uv decides)
tests/test_core.py:3997:9: warning SHP032 "uv" did not do that; whoever wrote it did (uv would refuse)
tests/test_core.py:4006:5: error SHC001 comment describes a past state of the code (no longer, removed the); the change belongs in the commit message (no longer)
tests/test_core.py:4009:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and of nothing else, and)
tests/test_core.py:4011:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:4030:9: warning SHP032 "list" did not do that; whoever wrote it did (list spells)
tests/test_core.py:4032:9: error SHP027 block opens on "And"; it reads as half of the comment above (And w)
tests/test_core.py:4060:13: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:4064:13: error SHP004 hedge; either it does this or it does not (actually)
tests/test_core.py:4095:5: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
tests/test_core.py:4113:5: error SHP027 block opens on "And"; it reads as half of the comment above (And i)
tests/test_core.py:4153:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:4153:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tests/test_core.py:4194:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:4208:5: warning SHL008 3 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tests/test_core.py:4215:5: warning SHP032 "it" did not do that; whoever wrote it did (it and says)
tests/test_core.py:4228:5: error SHP027 block opens on "And"; it reads as half of the comment above (And e)
tests/test_core.py:4261:5: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tests/test_core.py:4296:9: error SHP027 block opens on "And"; it reads as half of the comment above (And e)
tests/test_core.py:4305:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and the night wash are the app's, and)
tests/test_core.py:4318:5: warning SHP032 "it" did not do that; whoever wrote it did (it and say)
tests/test_core.py:4328:5: error SHP019 everything in the file is on purpose; say what the purpose is (deliberately)
tests/test_core.py:4328:5: error SHP027 block opens on "And"; it reads as half of the comment above (And d)
tests/test_core.py:4338:5: warning SHP031 verb with its object dropped; name the thing being carried (carries,)
tests/test_core.py:4347:5: warning SHP032 "nothing" did not do that; whoever wrote it did (nothing and says)
tests/test_core.py:4365:5: error SHP027 block opens on "And"; it reads as half of the comment above (And e)
tools/bench_clockface.py:1:1: error SHP033 frames the code as a story; describe the behaviour (honest)
tools/bench_clockface.py:15:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/callgraph.py:2:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and badge code into a graph, and)
tools/callgraph.py:5:1: error SHL009 sentence runs to 61 words (limit 40); break it with a full stop (The badge modules cannot be imported)
tools/callgraph.py:7:1: warning SHP032 "source" did not do that; whoever wrote it did (source says)
tools/callgraph.py:52:1: error SHL001 40 words of comment for 1 line of code (limit 20)
tools/callgraph.py:53:1: error SHP002 tells the reader the code is easy; say what it does (merely)
tools/callgraph.py:175:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/callgraph.py:213:5: warning SHP032 "and" did not do that; whoever wrote it did (and refuse)
tools/callgraph.py:336:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and marked: those are the dispatches and the callbacks, and)
tools/callgraph.py:481:1: error SHL001 62 words of comment for 1 line of code (limit 20)
tools/callgraph.py:481:1: error SHL009 sentence runs to 48 words (limit 40); break it with a full stop (An external node belongs to no)
tools/callgraph.py:482:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and no module, and)
tools/callgraph.py:483:1: warning SHP032 "rail" did not do that; whoever wrote it did (rail say)
tools/callgraph.py:499:5: warning SHP032 "revision" did not do that; whoever wrote it did (revision agree)
tools/callgraph.toml:1:1: error SHL006 82 words in one block (limit 60)
tools/callgraph.toml:1:1: error SHP013 4 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
tools/callgraph.toml:6:1: warning SHP032 "nothing" did not do that; whoever wrote it did (nothing says)
tools/callgraph.toml:94:1: warning SHP032 "model" did not do that; whoever wrote it did (model says)
tools/callgraph.toml:97:31: warning SHC004 comment repeats the identifiers on the line below
tools/callgraph.toml:101:1: warning SHL006 45 words in one block (soft limit 40)
tools/callgraph.toml:103:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/callgraph_cost.py:2:1: warning SHL008 6 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tools/callgraph_cost.py:2:1: error SHP004 hedge; either it does this or it does not (actually)
tools/callgraph_cost.py:32:1: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tools/callgraph_cost.py:46:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and cost_conf on every node, and)
tools/callgraph_cost.py:84:5: error SHP033 frames the code as a story; describe the behaviour (story)
tools/callgraph_cost.py:86:5: warning SHP031 verb with its object dropped; name the thing being carried (to take,)
tools/callgraph_cost.py:134:5: error SHP033 frames the code as a story; describe the behaviour (honest)
tools/callgraph_cost.py:286:5: error SHP017 fragment with no finite verb; make it a sentence (this being)
tools/callgraph_cost.py:287:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a shape 416, and)
tools/callgraph_cost.py:319:5: warning SHP032 "and" did not do that; whoever wrote it did (and say)
tools/callgraph_cost.py:323:5: error SHP004 hedge; either it does this or it does not (actually)
tools/callgraph_layout.py:1:1: error SHM002 10 of 20 blocks end on "so the ..." (50%, limit 30%)
tools/callgraph_layout.py:1:1: error SHP001 5 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own box)
tools/callgraph_layout.py:3:1: error SHL009 sentence runs to 46 words (limit 40); break it with a full stop (Laid out here rather than in)
tools/callgraph_layout.py:7:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and recognise where you are, and)
tools/callgraph_layout.py:96:5: error SHL001 65 words of comment for 2 lines of code (limit 40)
tools/callgraph_palette.py:8:1: error SHL009 sentence runs to 50 words (limit 40); break it with a full stop (Sampled here rather than in the)
tools/callgraph_palette.py:14:1: error SHP005 "cache" has no mind to make that up with; say what it does (cache wants)
tools/callgraph_resolve.py:1:1: error SHP001 8 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (its own pass)
tools/callgraph_resolve.py:1:1: error SHP018 4 blocks in this file use reads-as (budget 3); the count is the finding, search for the word to find them (read as)
tools/callgraph_resolve.py:6:1: error SHP005 "half" has no mind to make that up with; say what it does (half that decides)
tools/callgraph_resolve.py:209:9: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
tools/callgraph_resolve.py:398:13: error SHP027 block opens on "Or"; it reads as half of the comment above (Or a)
tools/callgraph_resolve.py:448:9: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
tools/callgraph_resolve.py:507:9: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and never touched is a constant, and)
tools/callgraph_resolve.py:559:9: warning SHP032 "shape" did not do that; whoever wrote it did (shape cannot tell)
tools/callgraph_resolve.py:1002:9: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/callgraph_resolve.py:1147:9: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
tools/callgraph_resolve.py:1197:9: warning SHP032 "arithmetic" did not do that; whoever wrote it did (arithmetic says)
tools/callgraph_resolve.py:1251:13: error SHP002 tells the reader the code is easy; say what it does (merely)
tools/callgraph_resolve.py:1371:9: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (One edge a (source, target, kind,)
tools/callgraph_scan.py:5:1: error SHL009 sentence runs to 48 words (limit 40); break it with a full stop (A reference is recorded as the)
tools/callgraph_scan.py:6:1: error SHP005 "here" has no mind to make that up with; say what it does (here knows)
tools/callgraph_scan.py:7:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/callgraph_scan.py:9:1: warning SHP032 "pass" did not do that; whoever wrote it did (pass can tell)
tools/callgraph_scan.py:36:1: error SHP033 frames the code as a story; describe the behaviour (story)
tools/callgraph_scan.py:75:38: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop ((shape, method, line, loops, literal, arg_shape))
tools/callgraph_scan.py:369:9: warning SHP032 "what" did not do that; whoever wrote it did (what say)
tools/callgraph_scan.py:450:17: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and BODY_TOP, and)
tools/callgraph_scan.py:509:9: error SHP004 hedge; either it does this or it does not (actually)
tools/callgraph_scan.py:623:5: warning SHP031 verb with its object dropped; name the thing being carried (holds,)
tools/callgraph_trace.py:2:1: error SHP004 hedge; either it does this or it does not (actually)
tools/callgraph_trace.py:8:1: error SHL009 sentence runs to 54 words (limit 40); break it with a full stop (It exercises nearly every host path,)
tools/callgraph_trace.py:8:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (It exercises nearly every host path,)
tools/callgraph_trace.py:21:1: warning SHP032 "viewer" did not do that; whoever wrote it did (viewer says)
tools/callgraph_trace.py:163:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and a real server, and)
tools/callgraph_walk.py:3:1: error SHL009 sentence runs to 57 words (limit 40); break it with a full stop (A timeline is a named scenario)
tools/callgraph_walk.py:13:1: warning SHP032 "viewer" did not do that; whoever wrote it did (viewer says)
tools/callgraph_walk.py:26:1: warning SHP032 "nothing" did not do that; whoever wrote it did (nothing says)
tools/callgraph_walk.py:124:13: warning SHP032 "count" did not do that; whoever wrote it did (count says)
tools/callgraph_web/callgraph.html:12:1: warning SHP032 "drawing" did not do that; whoever wrote it did (drawing agree)
tools/callgraph_web/callgraph.html:383:44: error SHY004 no space after `/*` (/*__GRAPH__*/)
tools/callgraph_web/callgraph.html:384:9: error SHY004 no space after `/*` (/*__VIEWER__*/)
tools/callgraph_web/callgraph.js:1:1: error SHL006 88 words in one block (limit 60)
tools/callgraph_web/callgraph.js:1:1: error SHL007 7 lines in one block (limit 6)
tools/callgraph_web/callgraph.js:1:1: error SHP013 14 blocks in this file use rather-than (budget 3); the count is the finding, search for the word to find them (rather than)
tools/callgraph_web/callgraph.js:49:1: warning SHL006 44 words in one block (soft limit 40)
tools/callgraph_web/callgraph.js:49:1: warning SHP032 "Shape" did not do that; whoever wrote it did (Shape says)
tools/callgraph_web/callgraph.js:76:1: error SHL006 95 words in one block (limit 60)
tools/callgraph_web/callgraph.js:76:1: error SHL007 7 lines in one block (limit 6)
tools/callgraph_web/callgraph.js:87:1: error SHL006 89 words in one block (limit 60)
tools/callgraph_web/callgraph.js:91:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and more, and)
tools/callgraph_web/callgraph.js:109:1: warning SHL006 57 words in one block (soft limit 40)
tools/callgraph_web/callgraph.js:124:1: error SHP019 everything in the file is on purpose; say what the purpose is (on purpose)
tools/callgraph_web/callgraph.js:240:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and not log: fan-in here is heavily power-law, and)
tools/callgraph_web/callgraph.js:336:1: warning SHP032 "measure" did not do that; whoever wrote it did (measure says)
tools/callgraph_web/callgraph.js:354:1: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (At tilt 0 and azimuth 0)
tools/callgraph_web/callgraph.js:355:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/callgraph_web/callgraph.js:739:5: error SHL001 40 words of comment for 1 line of code (limit 20)
tools/callgraph_web/callgraph.js:837:5: warning SHL006 45 words in one block (soft limit 40)
tools/callgraph_web/callgraph.js:1382:1: error SHP005 the reader's body standing in for the reader (the eye stays)
tools/callgraph_web/callgraph.js:1384:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and fifty-six calls a second that is nauseating, and)
tools/callgraph_web/callgraph.js:1402:3: error SHP004 hedge; either it does this or it does not (actually)
tools/callgraph_web/callgraph.js:1553:1: error SHP005 the reader's body standing in for the reader (the eye sees)
tools/check_app.py:2:1: error SHP034 the sentence already said this; the insistence adds nothing (and nothing else)
tools/check_app.py:28:1: error SHL001 64 words of comment for 1 line of code (limit 20)
tools/failover_test.py:46:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/font_shots.py:17:1: warning SHL006 43 words in one block (soft limit 40)
tools/icon.py:1:1: error SHM002 5 of 13 blocks end on "so the ..." (38%, limit 30%)
tools/icon.py:31:5: error SHP005 "PIL" has no mind to make that up with; say what it does (PIL wants)
tools/icon.py:31:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/image_themes.py:1:1: error SHM003 6 of 12 blocks pivot on a colon (50%, limit 40%)
tools/image_themes.py:6:1: error SHL009 sentence runs to 56 words (limit 40); break it with a full stop (This does the second half here,)
tools/image_themes.py:16:1: error SHP004 hedge; either it does this or it does not (actually)
tools/image_themes.py:59:9: error SHP005 the reader's body standing in for the reader (the eye reads)
tools/image_themes.py:60:9: error SHP004 hedge; either it does this or it does not (actually)
tools/image_themes.py:83:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/image_themes.py:124:5: warning SHP032 "them" did not do that; whoever wrote it did (them say)
tools/image_themes.py:187:5: error SHP004 hedge; either it does this or it does not (actually)
tools/image_themes.py:187:5: warning SHP032 "sheet" did not do that; whoever wrote it did (sheet says)
tools/light_probe.py:4:1: error SHL009 sentence runs to 43 words (limit 40); break it with a full stop (Hold it under a pillow, in)
tools/light_probe.py:4:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (Hold it under a pillow, in)
tools/light_probe.py:12:1: error SHP004 hedge; either it does this or it does not (actually)
tools/live.py:96:1: error SHP004 hedge; either it does this or it does not (actually)
tools/live.py:119:1: error SHP027 block opens on "And"; it reads as half of the comment above (And a)
tools/live_shots.py:7:1: error SHP004 hedge; either it does this or it does not (actually)
tools/live_shots.py:11:1: error SHP005 "frame" has no mind to make that up with; say what it does (frame and wants)
tools/make_icon_font.py:1:1: error SHP001 4 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (tool's own doing)
tools/make_icon_font.py:41:1: error SHP004 hedge; either it does this or it does not (actually)
tools/make_icon_font.py:57:1: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (The .af container, as alright-fonts writes)
tools/make_icon_font.py:57:1: error SHP006 editorialising; describe the constraint that forced it (magic)
tools/make_icon_font.py:61:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and points as 16-bit, and)
tools/make_icon_font.py:63:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/make_icon_font.py:65:36: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (codepoint, bbox x, y, w, h,)
tools/make_icon_font.py:70:1: error SHL001 48 words of comment for 2 lines of code (limit 40)
tools/make_icon_font.py:186:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and cross themselves, and)
tools/make_icon_font.py:435:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/make_text_font.py:1:1: error SHM002 7 of 22 blocks end on "so the ..." (32%, limit 30%)
tools/make_text_font.py:24:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/make_text_font.py:34:1: error SHP005 "size" has no mind to make that up with; say what it does (size wants)
tools/make_text_font.py:51:1: warning SHL006 47 words in one block (soft limit 40)
tools/make_text_font.py:51:1: error SHP004 hedge; either it does this or it does not (actually)
tools/make_text_font.py:74:1: error SHL001 55 words of comment for 2 lines of code (limit 40)
tools/make_text_font.py:80:1: error SHL001 127 words of comment for 2 lines of code (limit 40)
tools/make_text_font.py:80:1: error SHL007 8 lines in one block (limit 6)
tools/make_text_font.py:82:1: error SHL009 sentence runs to 56 words (limit 40); break it with a full stop (Per contour rather than per glyph)
tools/make_text_font.py:87:1: warning SHP032 "nothing" did not do that; whoever wrote it did (nothing says)
tools/make_text_font.py:115:5: error SHL001 41 words of comment for 1 line of code (limit 20)
tools/make_text_font.py:115:5: error SHL009 sentence runs to 41 words (limit 40); break it with a full stop (advance.x is in the units the)
tools/make_text_font.py:143:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and no advance is what a units mix-up produces, and)
tools/mem_probe.py:1:1: error SHP001 5 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (app's own policy)
tools/mem_probe.py:6:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/mem_probe.py:12:1: error SHL002 comment line is 97 characters (limit 96)
tools/mem_probe.py:12:1: error SHP006 editorialising; describe the constraint that forced it (gross)
tools/mem_probe.py:72:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/mem_probe.py:89:9: error SHL009 sentence runs to 59 words (limit 40); break it with a full stop (A frame here is a second)
tools/mem_probe.py:106:13: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/mem_probe.py:147:1: error SHL001 62 words of comment for 1 line of code (limit 20)
tools/mem_probe.py:148:1: error SHP006 editorialising; describe the constraint that forced it (gross)
tools/mem_probe.py:159:5: error SHP006 editorialising; describe the constraint that forced it (gross)
tools/mem_probe.py:192:5: warning SHP032 "left" did not do that; whoever wrote it did (left says)
tools/mem_probe.py:214:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/multihost_test.py:47:1: error SHP010 temporary by this account and permanent in practice; add an owner or finish it (placeholder)
tools/multihost_test.py:84:1: error SHP027 block opens on "And"; it reads as half of the comment above (And t)
tools/notify_probe.py:1:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and without pictures, and)
tools/notify_probe.py:6:1: error SHL009 sentence runs to 47 words (limit 40); break it with a full stop (What this is for is the)
tools/notify_probe.py:12:1: warning SHP032 "depth" did not do that; whoever wrote it did (depth says)
tools/notify_probe.py:98:5: error SHC001 comment describes a past state of the code (used to); the change belongs in the commit message (used to)
tools/notify_probe.py:117:9: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (Three, because a label is drawn)
tools/notify_probe.py:119:9: error SHP004 hedge; either it does this or it does not (actually)
tools/probe.py:1:1: error SHP001 5 blocks in this file use possessive-own (budget 3); the count is the finding, search for the word to find them (README's own out)
tools/probe.py:51:5: error SHL010 sentence holds 5 commas, colons or semicolons (limit 4); break it with a full stop (Four things - who, what, when,)
tools/probe.py:199:1: error SHL009 sentence runs to 44 words (limit 40); break it with a full stop (A second pass over the same)
tools/read_af.py:11:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/read_af.py:13:1: warning SHP031 verb with its object dropped; name the thing being carried (carries.)
tools/read_af.py:23:36: error SHP006 editorialising; describe the constraint that forced it (magic)
tools/read_af.py:24:36: error SHL010 sentence holds 6 commas, colons or semicolons (limit 4); break it with a full stop (codepoint, bbox x, y, w, h,)
tools/run.py:11:1: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/shots.py:7:1: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and every theme is a review artefact, and)
tools/shots.py:9:1: error SHL002 comment line is 115 characters (limit 96)
tools/shots.py:76:5: warning SHL008 2 measurements in a comment; name the test that holds them, or move them to a benchmark that runs
tools/shots.py:92:5: warning SHP037 drop "is what"; the clause reads straight without it (which is what)
tools/shots.py:95:5: warning SHP040 two "and"s in one sentence; make the first a comma or split the sentence (and to nowhere else would never be copied in, and)
tools/shots.py:105:5: warning SHP032 "and" did not do that; whoever wrote it did (and say)
tools/waterfall_shot.py:15:1: error SHP005 "plateau" has no body to do that with; say what it does (plateau that breathes)
