~open source
Small, specific changes to other people's code. Mostly inference routing and the unglamorous parts around it.
3 merged, one in review. None of them are large. The pattern I keep landing on is the narrow first slice — find the thing that is already broken or already being thrown away, fix exactly that, and leave the larger design question on the issue where someone who owns the project can answer it.
semantic-router#2609 →
The NLI layer already computed per-span severity, an entailment label and an explanation for every hallucination span. All of it was formatted into a warning string and then thrown away — Router Replay persisted a flattened []string and nothing else. The durable record of a routing decision was missing the part that said why.
Added a typed span field so the structure survives into the replay record instead of being reconstructed from prose later, or not at all. Deliberately the narrowest useful slice of a much larger issue: it does not touch the materializer, Router Learning consumption, or the config surface. It only stops discarding data that already exists.
semantic-router#2632 →
An earlier fix closed a fork-checkout hole by splitting CI into a trusted base/ checkout holding the scanner code and an untrusted pr-code/ checkout holding data that is parsed and never executed. Correct fix, with a side effect nobody had hit yet: both malicious-code scanners recognised their own source by an absolute path derived from __file__, which only holds while the scanner and the tree it scans share a root.
Run the scanner from one checkout against the other and it fails its own credential-detection rules on its own signature strings. A maintainer had independently fixed one of the two scanners while this was open, so I rebased onto their work and cut the PR down to the regex fallback scanner they had not covered — the same bug, in the file that still had it.
screenpipe#4243 →
Two reported bugs, one cause. Typing # in the search bar ran a GROUP BY over the tag join table with no LIMIT. SQLite has to compute every group count before it can order them, so on a database with millions of rows it reliably blew the five-second abort deadline — a five to six second freeze on a keystroke.
The second bug was the first one wearing a disguise. The timeout returned an empty tag list, so the JavaScript-side filter for #workflow found nothing — and even without the timeout it would still miss any tag ranked past the rows that came back. The fix was to stop filtering in JavaScript: bound the scan when the query is a bare #, and push a LIKE into SQL the moment there is a prefix to match. Thirty-three lines, one file.
semantic-router#2712 →
Router Learning's experience state lives in process and is only ever read by the live scorer — there is no way to get it back out as data. This is a versioned snapshot type and a read-only export, and nothing else: no materializer, no storage backend, no import path. Those are larger decisions, and I would rather ask about them on the issue than guess at them in a pull request.
The rest of what I build is at /things, and the things that did not work are at /failures.