Milk: three clean passes, three wrong answers

Cooper

Milk was the richest spec the project has written, and the first subject outside poultry where measured was reachable. verify failed. Nothing was accepted. Four rows came back. One failed the gate mechanically. Three passed every check and are unusable. That ratio is the finding.

Items asked7
Distinct URLs fetched19, in 211 chunks
Fetch failures the runner reported0
Fetch failures actually suffered1 — a 167-character reCAPTCHA counted as success
qwen2.5-coder:7b1 of 14 calls returned a figure
gemma4-32k5 of 14
Rows returned4
Items returning nothing1, 5 and 7 — the three the spec rated most promotable
Acceptednothing

The empty items were the headline annual yield per cow, the AMS component yield factors, and the tanker/silo pooling question that is the entire reason the project cares about milk.

A 200 with 167 characters is a lie about reachability

Scouted from one machine, every URL was reachable and every claimed quote was present; the run was declared safe to send. One URL then behaved completely differently on the extraction host:

DocumentScoutExtraction run
pmc.ncbi.nlm.nih.gov/articles/PMC10289513/41,579 chars167 chars

Those 167 characters are a reCAPTCHA interstitial. Same fetcher, same user-agent, different address. PMC served the article to the scout and the doorman to the run. The runner logged it as fetched, because 167 characters is a successful HTTP response.

Six of the seven HTML fetches matched across hosts to within five characters. PMC was the sole divergence. Gross 2023 — the spec’s strongest source, and the only one carrying the sentence that declines to define a maximum daily yield — was invisible to both models. Items 2 and 3 were built on it. Item 3’s stated deliverable was “reporting the absence is the deliverable.” That was impossible from the moment the fetch returned.

A URL verified from one host is not verified for another. Bot-walling keys on address and reputation, which are properties of the host, not of the fetcher. The scout’s docstring had asserted the opposite. This run is the measurement that falsifies it.

milk_yield_per_cow_day = 20,501 pounds — wrong three ways at once

The quote is verbatim. The number is in it. It is still not a figure:

  1. It is annual, stored in a per-day field. The same document says the rolling herd average “is an indicator of herd management during the last 365 days.” Out by about 365×.
  2. “Joe Dairyman” is a fictional worked example — a textbook illustration of how to look a herd up in a table, not an observation of anything.
  3. It is one South Carolina herd in the top 25% of its size group, not a national average.

20,501 lb/cow/year is roughly the right order of magnitude for a real US annual per-cow yield, so the row would read as a plausible answer to item 1 to anyone skimming. Wrong item, wrong population, made-up farmer. Every gate check passed it. Only the 1/1 agreement flag fired.

The one 2/2 consensus walked into the spec’s first trap

Guinness does say 123.61 L in 24 hours, by one cow, at a Brazilian dairy tournament in 2019. The extraction is genuinely right. Its target column is product.max_units_per_day, and it must not go there.

That column is what makes a hen’s floor a hard floor — twelve same-day eggs need twelve hens because no hen can lay two. A single competition record supports no such claim about any other cow. Writing 123.61 into that column would make milk’s floor look like eggs’ floor while resting on nothing.

And because PMC was walled, the run returned the record without its counterweight. Half of a two-part item is worse than none of it here: the half that survived is the half that invites the mistake.

The gate caught one row exactly

herd_size came back as '9.3 million'. Rejected: values are not numbers. The underlying Census of Agriculture 2022 fact is fine. The row is still unusable — the quote stops mid-sentence at “at”, and nothing came back on cows per operation, so the spec’s mean-versus-midpoint trap (283 vs 1,300, both correct, 4.6× apart) was never engaged.

A table row with its header amputated, predicted twice, uncaught twice

value_lo: 12
value_mode: 20
unit: percent
quote: "Fluid milk 109 13 12 22 20 35 32"

The numbers are the right ones — 12% retail, 20% consumer, exactly what the spec said the ERS table carries. They are recorded wrongly anyway. They are two sequential stages, stored as one band. As a band this understates the chain; compounded they are 1 − (0.88 × 0.80) = 29.6%. The basis is calories, per a header eleven lines up. The gate cannot see any of that — both numbers are in the quote.

The spec predicted this row. The own-loss-factors batch predicted it too, and named the rule: a figure whose basis cannot be read off its own quote is not usable, however well it verifies. That quote is now a gate fixture. It has cost two batches.

Milk is not thin

NASS Milk Production fetched at 74,500 characters and returned nothing. The AMS Class III worksheet fetched at 2,039 characters — small enough to be a single chunk — and returned nothing. The FDA residue database fetched at 44,323 characters and returned nothing. Call rates of 1/14 and 5/14 match qwen’s known conservatism on maple, honey, and own-loss-factors. The documents contain the answers. The models declined.

The three traps the spec was written around were not disproved. Two were never reached. The third was engaged from the wrong side.

Promote nothing. One clean national-herd sentence in a NASS PDF could be typed in by hand today. It is deliberately not. One figure does not make a subject, and promoting the single easiest row out of a failed run is how a subject ends up in the corpus represented by whatever happened to survive.

Nothing shipped. What the run produced: the scout’s central assumption falsified with a measurement, a second instance of basis-stripping strong enough to make the rule mechanical, and a fully documented walk into the max_units_per_day trap at 2/2 consensus with a perfectly good quote. The pipeline is still getting more trustworthy while shipping nothing. That is the right order.


Adapted from the project's review record batch-05-milk-REVIEW.md (CC BY 4.0).