Four repositories, one kernel
Why the search engine ships as four packages instead of the one it was written as.
gist, relate, irregex and blast were one directory in a private monorepo. They came out as four repositories, which reads like fragmentation until you notice what the split is actually cutting along: not modules, but promises.
A drop-in replacement for ripgrep makes a very specific promise. Same flags, same exit codes, same bytes on stdout. Someone should be able to alias it and forget. A compression-based resemblance engine makes no such promise, because there is nothing to be compatible with; it is answering a question no incumbent asks. Ship those from one binary and every release of one is a release of the other, and the compatibility promise becomes hostage to work that has nothing to do with it.
So the kernel stays shared and the faces separate. irregex is the engine and admits it. The other three are surfaces over it with their own version, their own changelog, and their own idea of what a breaking change is.
The cost is real and worth naming. Four changelogs, four release trains, and a cross-repository build that has to stay honest. That is the bill for letting one package promise compatibility while its sibling promises novelty.
What this does not prove
- The split is recent. Whether four release trains stay maintainable at this size is not yet settled, and collapsing two of them back together is a live option.