Abstract Project overview
Open-source parsers for BioLogic EC-Lab files stop reading a file when the instrument software adds a column they do not know. Rosetta reads the file anyway. It solves each unknown column's byte width from the record size, then identifies the physical quantity by testing candidate definitions against the other columns: charge as current times time, power as potential times current, impedance relations, clocks, counters and set points. It answers with a name and its evidence, reports exact duplicates, or abstains. On five hold-outs of public files, each frozen before the version that ran on it, Rosetta named 350 of 373 real columns correctly with 5 wrong names. Claude Opus 5.5 named 359 with 10 wrong names.
Keywords Binary file formats · Electrochemistry · Abstention · Benchmark design
One new column makes the whole file unreadable
Many battery and electrochemistry labs record their measurements with BioLogic potentiostats, which save binary .mpr files. The format is not documented, so open-source parsers such as galvani and yadg rely on tables of known column IDs. When the vendor adds an ID, the parser stops with "Column ID … is unknown" until someone works out what the column is and how many bytes it takes.
Reports of unknown columns have reached galvani's issue tracker more than a dozen times since 2019.
Measure first, then decide what should be code
A language model on raw bytes failed. An agent built on NVIDIA Nemotron solved 0 of 12 cases. Plain code recovered the byte layout in 6 of 6. Structure is code's job.
A pre-registered benchmark for meaning. 126 tasks hide one real column at a time. Decoys made of noise and out-of-vocabulary columns test whether a system knows when not to answer. The pass rule was fixed before any run. Nemotron did not pass (0.41 against a code baseline of 0.63). Claude Opus 5.5 scored 0.97, so the task could be done.
Then write the physics down. Most of what a model knows here is physics, and physics can be written as code. The aim became a tool that needs no model and no API key.
Relations, units and the right to abstain
Read the file. Known columns are typed from the reference parser's map. For unknown IDs, the byte width is solved from the record size.
Test the physics. Each candidate quantity is checked against the other columns. A test reports its fit and the fitted scale, and the scale must match the expected unit conversion, so a potential cannot pass as a current.
Fall back carefully. A statistics vote over public files is used only for columns that are not noise, and it is vetoed when a defining relation of its guess fails.
Abstain. When nothing supports a name, Rosetta says so. That answer is part of the score.
Fewer answers, far fewer wrong ones
Rosetta was developed in rounds. Before each round, a new hold-out of public files nobody had looked at was frozen, and that version and Claude Opus 5.5 were run on it once.
Rosetta, no model
350 of 373 real columns named correctly. 5 wrong names. Named 11 of 95 decoys.
Claude Opus 5.5
359 of 373 named correctly. 10 wrong names. Named 16 of 95 decoys.
Code-only baselines
77–100 % per hold-out on standard files, but they name every decoy and cannot name a genuinely new column.
On the last hold-out Rosetta named all 70 columns with no wrong names. One idea raised accuracy and was still rejected: naming the column that similar files always record. It named up to 10 of 19 decoys.
Running it on real bug reports
I ran Rosetta on files attached to parser issues on GitHub. It exposed two weaknesses, both now fixed with regression tests. It also showed that several "unknown" columns were not new at all: in newer EC-Lab files galvani reads only one byte of each column ID, so known IDs above 255 lose their high byte.
Of 109 newer files I tested, 13 fail this way, and reading the full ID fixes 11 of them. On one public file, a maintained mirror of galvani reads without an error but puts values under the wrong column names. I reported it with a tested fix.
What the data cannot tell
Values the instrument software computes after the fact, such as a capacitance held per segment, cannot be reconstructed reliably. Noise-like currents in impedance records and external analog inputs usually get no name. Two quantities with the same definition in a file cannot be told apart, so a prior over how common each name is decides, and the alternative is shown.