I find bugs in other people's code and send the fixes upstream.
ai-tells finds the marks a language model leaves in shipped text: curly quotes pasted into source, generated phrasing in interface strings. Matches are weighted by where they land, so a stray dash in an identifier counts for more than the same dash in a README. Baselined against six repositories pinned to their last commit before June 2020, where it scores 0.16 against 4.5 to 27 for text known to be generated. Node, no dependencies, MIT.
shortlist browses the Claude Code plugin catalogue from inside Claude Code. 2,269 upstream entries filtered to 1,652 on licence, archive status and staleness, grouped into 25 categories, with every exclusion and its reason recorded.
| bun #35606 | Buffer.byteLength undercounts unpaired surrogates, so Content-Length goes out short and HTTP bodies truncate. Confirmed, and already fixed on main by #32784 before I filed |
| bun #35610 | path.win32 skips the drive and reserved-device guards Node applies. Confirmed on 1.4.0; a fix was already in flight in #35423 |
| picomatch #187 | [!abc] compiles to a class containing !, matching the characters it should exclude |
| iarna-toml #63 | BigInt.asIntN wraps instead of erroring, so out-of-range integers parse to the wrong value and write back wrong |
| ini #310 | stringify quotes a key containing =, then parse splits inside those quotes |
| croniter #248 | 0 0 31 2 0 raises instead of returning Sundays in February |
| human-interval #49 | humanInterval('an hour') returns 0, which schedulers read as run immediately |
| humanize #358 | ordinal(-1) returns -1th |
| claude-usage #163 | One-hour cache writes bill at twice the input rate, not 1.25 times, understating reported cost |
| BrogueCE #871 | Cells discovered while never visible stay a "chilly void" |
| prismarine-nbt #190 | equal() returns true for any two Bedrock long values |
| ndjson #6 | A line reading null ends the stream and drops every record after it |
| vscode-claude-status #44 | A single cache rate applied to an aggregate billed at two different rates |
Property tests and differential tests against a second implementation of the same spec, rather than reading code and hoping something looks wrong. Round-tripping parse(stringify(x)) found the ini bug. Diffing a runtime against the one it claims compatibility with found both Bun bugs in a single pass.
I check closed issues before reporting. bytes.js silently treats an unrecognised unit as bytes, which is real, but it was settled in #31 so I left it alone.
When a maintainer disagrees I check again, and say so plainly in the thread if they are right. The Brogue patch above went up with the wrong explanation of the cause and the description was corrected in place.