the day i gave up on a fix library
summary: a notebook entry from work i cannot share publicly. why grammars-as-values landed for me on this protocol first.
Core idea: the FIX-library failure made the grammars-as-values design concrete: protocol variation needed to live next to the consumer, not inside a third-party interpretation layer.
A notebook entry. The work itself is internal at Lynx; the moment is not.
I had been using a FIX library that could not parse the venue I cared about without a fork. The venue had a couple of extra repeating-group fields and a tag the spec said was a string but they treated as binary. Library opinions about what your message looks like are non-negotiable, and the venue's opinions are also non-negotiable, and they disagreed.
I gave up the moment I realised I was reading the library's README to figure out how to express what the venue had described in a paragraph.
That sentence is the post. The library's README was an interpretation layer between me and the spec, and the layer was costing me more than the spec was. Once I noticed, the rewrite into something where the grammar was a value next to the consumer was the only sensible move. The grammar changed when a tag changed; it compiled and deployed in the same file as the reaction.
I keep this entry because it is the moment the grammars-as-values argument stopped being abstract for me. Other posts spell out the design. This one is just the day I noticed.