<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: gritzko</title><link>https://news.ycombinator.com/user?id=gritzko</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 12 Apr 2026 07:47:15 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gritzko" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by gritzko in "How to build a `Git diff` driver"]]></title><description><![CDATA[
<p>I recently implemented a diff driver as part of git-dogs. The  integration part Claude one-shotted.<p>Mine is token based: <a href="https://replicated.wiki/blog/img/difflet.png" rel="nofollow">https://replicated.wiki/blog/img/difflet.png</a><p>The set of git tools itself, very much in development: <a href="https://github.com/gritzko/git-dogs" rel="nofollow">https://github.com/gritzko/git-dogs</a></p>
]]></description><pubDate>Sat, 11 Apr 2026 20:01:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47733516</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47733516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47733516</guid></item><item><title><![CDATA[New comment by gritzko in "I imported the full Linux kernel git history into pgit"]]></title><description><![CDATA[
<p>I was giving students an assignment to import git repo into fossil and the other way around. git was a tad faster, but not dramatically.</p>
]]></description><pubDate>Thu, 09 Apr 2026 12:28:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47702811</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47702811</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47702811</guid></item><item><title><![CDATA[New comment by gritzko in "Spot – Git repo code search, replace, diff and merge"]]></title><description><![CDATA[
<p>It can use multiple cores for a full reindex. On each commit, it reindexes affected files.</p>
]]></description><pubDate>Sun, 29 Mar 2026 17:28:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47565200</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47565200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47565200</guid></item><item><title><![CDATA[Spot – Git repo code search, replace, diff and merge]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/gritzko/librdx/tree/master/spot">https://github.com/gritzko/librdx/tree/master/spot</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47565073">https://news.ycombinator.com/item?id=47565073</a></p>
<p>Points: 2</p>
<p># Comments: 3</p>
]]></description><pubDate>Sun, 29 Mar 2026 17:14:45 +0000</pubDate><link>https://github.com/gritzko/librdx/tree/master/spot</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47565073</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47565073</guid></item><item><title><![CDATA[Spot – git repo AST-aware index, search and replace]]></title><description><![CDATA[
<p>Article URL: <a href="https://replicated.wiki/spot/">https://replicated.wiki/spot/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47549139">https://news.ycombinator.com/item?id=47549139</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 27 Mar 2026 22:20:13 +0000</pubDate><link>https://replicated.wiki/spot/</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47549139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47549139</guid></item><item><title><![CDATA[New comment by gritzko in "The future of version control"]]></title><description><![CDATA[
<p>In 2007 Bram said to me that my Causal Tree algorithm is a variant of weave. Which is broadly correct. In these 20 years, the family of weave-class algos grew quite big. In my 2020 article, I devoted the intro to making their family portrait <a href="https://arxiv.org/abs/2002.09511" rel="nofollow">https://arxiv.org/abs/2002.09511</a> Could have been a separate article.</p>
]]></description><pubDate>Sun, 22 Mar 2026 19:52:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47481406</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47481406</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47481406</guid></item><item><title><![CDATA[New comment by gritzko in "[dead]"]]></title><description><![CDATA[
<p>Fresh account, no history, AI avatar, a vibed project suspiciously similar to some existing project. Is this the new norm?<p><a href="https://github.com/gritzko/librdx/tree/master/be" rel="nofollow">https://github.com/gritzko/librdx/tree/master/be</a></p>
]]></description><pubDate>Fri, 20 Mar 2026 06:37:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47451229</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47451229</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47451229</guid></item><item><title><![CDATA[New comment by gritzko in "RX – a new random-access JSON alternative"]]></title><description><![CDATA[
<p>I recently created my own low-overhead binary JSON cause I did not like Mongo's BSON (too hacky, not mergeable). It took me half a day maybe, including the spec, thanks Claude. First, implemented the critical feature I actually need, then made all the other decisions in the least-surprising way.<p>At this point, probably, we have to think how to classify all the "JSON alternatives" cause it gets difficult to remember them all.<p>Is RX a subset, a superset or bijective to JSON?<p><a href="https://github.com/gritzko/librdx/tree/master/json" rel="nofollow">https://github.com/gritzko/librdx/tree/master/json</a></p>
]]></description><pubDate>Thu, 19 Mar 2026 10:47:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47437293</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47437293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47437293</guid></item><item><title><![CDATA[New comment by gritzko in "Lies I was told about collaborative editing, Part 2: Why we don't use Yjs"]]></title><description><![CDATA[
<p>When I was starting my research into collaborative editing as a PhD student 20+ years ago, rebase-and-resubmit was well known. It was used in one Microsoft team collab product (I forgot the name). It is 100% legit algo except intermittently-connected clients may face challenges (screw them then).<p>Unless you have to support some complicated scenarios, it will work. I believe Google Docs initially used something of the sort (diff-match-patch based). It annoyed users with alerts "lets rebase your changes", esp on bad WiFi. So they borrowed proper OT from Google Wave and lived happily since (not really).<p>One way to think about it: how many users will your product have and how strange your data races / corner cases can get. At Google's scale, 0.1% users complaining is a huge shit storm. For others, that is one crazy guy in the channel, no biggie. It all depends.<p>TLDR: people invented OT/CRDT for a reason.</p>
]]></description><pubDate>Mon, 16 Mar 2026 14:13:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47399342</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47399342</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47399342</guid></item><item><title><![CDATA[New comment by gritzko in "Lies I was told about collaborative editing, Part 2: Why we don't use Yjs"]]></title><description><![CDATA[
<p>At least Yjs, Loro and Automerge must handle some degree of operation reordering. Either causally-consistent or virtually any order.</p>
]]></description><pubDate>Mon, 16 Mar 2026 14:03:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47399190</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47399190</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47399190</guid></item><item><title><![CDATA[New comment by gritzko in "Lies I was told about collaborative editing, Part 2: Why we don't use Yjs"]]></title><description><![CDATA[
<p>One way to minimize impedance mismatch is to work with DOM-like or JSON-like structures mostly immune to transient bugs, which I am doing currently in the librdx project. It has full-CRDT RDX format[1] and essentially-JSON BASON[2] format. It does not solve all the problems, more like the set of problems is different. On the good side, it is really difficult to break. On the bad side, it lacks some of the rigor (esp BASON) that mature CRDT models have. But, those models are way more complex and, most likely, will have mismatching bugs in different implementations. No free lunch.<p>[1]: <a href="https://github.com/gritzko/librdx/tree/master/rdx" rel="nofollow">https://github.com/gritzko/librdx/tree/master/rdx</a>
[2]: <a href="https://github.com/gritzko/librdx/tree/master/json" rel="nofollow">https://github.com/gritzko/librdx/tree/master/json</a></p>
]]></description><pubDate>Mon, 16 Mar 2026 11:31:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47397641</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47397641</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47397641</guid></item><item><title><![CDATA[New comment by gritzko in "Lies I was told about collaborative editing, Part 2: Why we don't use Yjs"]]></title><description><![CDATA[
<p>The actual point of the post: Y.js is slow and buggy.</p>
]]></description><pubDate>Mon, 16 Mar 2026 11:22:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=47397569</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47397569</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47397569</guid></item><item><title><![CDATA[New comment by gritzko in "Kotlin creator's new language: talk to LLMs in specs, not English"]]></title><description><![CDATA[
<p>So is it basically Markdown? The landing does not articulate, unfortunately, what the key contribution is.</p>
]]></description><pubDate>Thu, 12 Mar 2026 14:36:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47351140</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47351140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47351140</guid></item><item><title><![CDATA[New comment by gritzko in "Beagle, a source code management system that stores AST trees"]]></title><description><![CDATA[
<p>Tree-sitter can parse somewhat-bad code.<p>Also, there is an option to pick a codec for a particular file. Might use tree-sitter-C, might use general-text. The only issue here, you can't change the codec and keep nice diffs.<p>So, these cases are handled.</p>
]]></description><pubDate>Mon, 09 Mar 2026 07:01:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47305638</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47305638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47305638</guid></item><item><title><![CDATA[New comment by gritzko in "Beagle, a source code management system that stores AST trees"]]></title><description><![CDATA[
<p>I cannot remember a case, in the last 10 years at least, when I committed code that does not compile. Why should I share that? Also, tree-sitter sort of handles that.</p>
]]></description><pubDate>Mon, 09 Mar 2026 01:41:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47303847</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47303847</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47303847</guid></item><item><title><![CDATA[New comment by gritzko in "Beagle, a source code management system that stores AST trees"]]></title><description><![CDATA[
<p>(Author) There is a fall-back general-text codec: tokens, no AST (e.g. for Markdown).  If that fails (non UTF8), there is the general-blob final-fallback codec (the git mode).<p>The way it makes an AST tree is non-lossy. Additionally, it stamps ids on the nodes, so merges do not get confused by renames, formatting changes and similar things. There is value in preserving structure this way that repeat parsing can not provide. In big-O terms, working with such an AST tree and a stack of its patches is not much different from stacks of binary diffs git is using.<p>If I have k independent changesets, I have k^2 unplanned interactions and 2^k unplanned change combinations. Having a bunch of change sets, which I had not fully evaluated yet, esp in relation to one another, I would like k-way merges and repeat-merges to be seamless, non-intrusive and deterministic. git's merges are not.<p>The project is experimental at this point.</p>
]]></description><pubDate>Sun, 08 Mar 2026 19:07:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47300107</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47300107</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47300107</guid></item><item><title><![CDATA[New comment by gritzko in "Beagle, a source code management system that stores AST trees"]]></title><description><![CDATA[
<p>CRDT's trick is <i>metadata</i>. Good old <i>diff</i> guesses the changes by solving the longest-common-subsequence problem. There is always some degree of confusion as changes accumulate. CRDTs can know the exact changes, or at least guess less.</p>
]]></description><pubDate>Sun, 08 Mar 2026 18:46:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47299871</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47299871</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47299871</guid></item><item><title><![CDATA[New comment by gritzko in "Beagle, a source code management system that stores AST trees"]]></title><description><![CDATA[
<p>For one merge, yes. The fun starts when you have a sequence of merges.
CRDTs put ids on tokens, so things are a bit more deterministic.
Imagine a variable rename or a whitespace change; it messes text diffing completely.</p>
]]></description><pubDate>Sun, 08 Mar 2026 18:36:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47299781</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47299781</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47299781</guid></item><item><title><![CDATA[New comment by gritzko in "Sem – Semantic version control. Entity-level diffs on top of Git"]]></title><description><![CDATA[
<p>Was "sem" named "graft" last week and "got" a week before that? Everyone is vibing so hard it is difficult to keep track of things. Also, idea theft gets to entirely new levels. Bot swarms promote 100% vibed stolen projects... what a moment in time we all enjoy.<p>Still, my two cents: Beagle the AST-level version control system, experimental<p><a href="https://github.com/gritzko/librdx/tree/master/be#readme" rel="nofollow">https://github.com/gritzko/librdx/tree/master/be#readme</a><p>It genuinely stores AST trees in (virtually any) key-value database (RocksDB at the moment). In fact, it is a versioned database for the code with very open format and complete freedom to build on top of it.<p><i>be</i> is in fact, more of a format/protocol, like in the good old days (HTTP, SMTP, XML, JSON - remember those?)</p>
]]></description><pubDate>Sun, 08 Mar 2026 11:37:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47296533</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47296533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47296533</guid></item><item><title><![CDATA[New comment by gritzko in "Ki Editor - an editor that operates on the AST"]]></title><description><![CDATA[
<p>I work on AST based revision control. I have a stack of ideas on how to achieve the same Ctrl+W effect with commits/diffs/cherry-picks. All still in flux. If you have some thoughts to share, please do.<p>[1]: <a href="https://github.com/gritzko/librdx/tree/master/be#readme" rel="nofollow">https://github.com/gritzko/librdx/tree/master/be#readme</a></p>
]]></description><pubDate>Sat, 07 Mar 2026 18:00:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47289907</link><dc:creator>gritzko</dc:creator><comments>https://news.ycombinator.com/item?id=47289907</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47289907</guid></item></channel></rss>