Back to Blog

Saucier

A series in 7 parts, published from to .

  1. Part 1 of 7
    explanation

    13 min read

    There is no model in this parser. It still told me ice cream was a sauce.

    Post one of the saucier series reads a century-old cookbook with a regular expression — 124 sauces, 29 lineages, 95 that name no base. The first version of that census said 166 and 64, and forty of those were soups, jam, and a vanilla ice cream. Determinism did not catch that. Line numbers did.

  2. Part 2 of 7
    explanation

    13 min read

    Marrow Sauce finally has a parent. The parser gave up three answers to earn it.

    Post two of the saucier series lets a parent be any catalogued preparation, not only one of the five mothers. Derived rises from 29 to 50 and every new derivation quotes a name the source wrote. The same rule dissolves three derivations the old parser recorded, one of them caught by peer review — and Bordelaise stays unresolved on purpose, because a term that encodes a derivation is not a statement of one.

  3. Part 3 of 7
    explanation

    14 min read

    I added a second copy of the same book. It told me nothing about the book.

    Post three of the saucier series puts a second witness of Escoffier into the corpus — the 1907 first printing, as a scan — and gets back no facts about cookery and four classes of fact about its own instruments. The number of sauces the revision supposedly added went twenty, then eight, then none. Along the way the project discovered it had been citing the wrong edition since its first commit.

  4. Part 4 of 7
    explanation

    16 min read

    The book spells it out at line 1437. Two of my posts said it never did.

    Two earlier posts said Escoffier never spells out that half glaze is a reduction of Espagnole. Entry 23 does, in its first sentence. This is the clause of my own that hid it, the 27 entries that enter when it goes, and the ten derivations the release gives back on purpose.

  5. Part 5 of 7
    explanation

    10 min read

    I cut the last sauce off the file. Every line still parsed.

    saucier now writes both copies of Escoffier as one stream, one record per line, so a shell can read the catalogue without importing my package. The first reader I wrote for it accepted an empty file, then a file missing its last sauce, with every remaining line valid JSON. Then a jq one-liner over the stream found a Périgueux the scan resolved and the text refused.

  6. Part 6 of 7
    explanation

    12 min read

    The parent finally has a verb. The book still will not say how many minutes.

    At v0.5.0 the saucier record for Mornay said it derives from Béchamel and stopped there, two lines above the sentence that says how. v0.6.0 records that sentence for one preparation, by hand, as six operations in the book's own words, with every number the text gives and every one it withholds left empty. The check that refuses a misquote also turned up the first confirmed difference between the 1907 and 1909 printings.

  7. Part 7 of 7
    explanation

    14 min read

    The scan lost one letter, and a derivative was crowned the mother sauce

    The 1907 scan reads entry 22 as BROWN SAUCE OR ESPAQNOLE, so no name in that witness held the word Espagnole except a derivative's, and saucier crowned LENTEN ESPAGNOLE as a mother with twelve preparations beneath it. The ticket blamed ranking. Measuring that fix is what found the real defect: the lookup checked that a base comes before its derivatives without ever checking that the base was there.

© 2026 Alberto Nieto. All rights reserved.