FAILURE MAP
← Case archive

FA-97316 / Recipe scaling and nutrition / Open access

Equilibrium brine calculator: dry brine mass basis · case 01

A dry brine with leftover water data doubles the salt.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Water weight is included even for dry brining.

THE FAILURE

Water weight is included even for dry brining.

Unsuccessful approach: Using water alone for wet brines is the classic brine-percentage confusion and under-salts the meat.

Case contract

Salt grams = total*pct/100 where total = meat+water for "wet" and meat only for "dry". Salt densities per tsp: table 6 g, morton kosher 4.8 g, diamond kosher 2.8 g. Return salt_g half-up to 0.1 (float), tsp half-up to 0.25 (float), and sodium_mg_per_100g = half-up of salt_g*393 per 100 g of total at equilibrium.

Why this case matters

Equilibrium brining sets salt as a percentage of meat plus water and converts between salt brands.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(meat_g, water_g, pct, salt_type, method):
    DENS = {'table': Fraction(6), 'morton kosher': Fraction(24, 5), 'diamond kosher': Fraction(14, 5)}
    total = meat_g + water_g
    salt = Fraction(total) * Fraction(pct) / 100
    tsp = salt / DENS[salt_type]
    sodium = salt * 393 * 100 / total
    return {'salt_g': math.floor(salt * 10 + Fraction(1, 2)) / 10, 'tsp': math.floor(tsp * 4 + Fraction(1, 2)) / 4,
            'sodium_mg_per_100g': math.floor(sodium + Fraction(1, 2))}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['regression: dry brine mass basis', [1000, 2000, '0.5', 'diamond kosher', 'dry'],
   {'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 1.75}],
  ['repair check: dry brine mass basis', [1000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 150.0, 'sodium_mg_per_100g': 1965, 'tsp': 31.25}],
  ['generated control 1', [2000, 500, '5', 'table', 'dry'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}],
  ['generated control 2', [1000, 1000, '1.5', 'table', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 590, 'tsp': 2.5}],
  ['generated control 3', [2500, 500, '1.5', 'diamond kosher', 'dry'],
   {'salt_g': 37.5, 'sodium_mg_per_100g': 590, 'tsp': 13.5}]],
 [['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['regression: dry brine mass basis', [1500, 2000, '5', 'diamond kosher', 'dry'],
   {'salt_g': 75.0, 'sodium_mg_per_100g': 1965, 'tsp': 26.75}],
  ['repair check: dry brine mass basis', [500, 1000, '5', 'morton kosher', 'wet'],
   {'salt_g': 75.0, 'sodium_mg_per_100g': 1965, 'tsp': 15.75}],
  ['generated control 1', [500, 0, '1', 'table', 'dry'],
   {'salt_g': 5.0, 'sodium_mg_per_100g': 393, 'tsp': 0.75}],
  ['generated control 2', [1000, 0, '0.5', 'table', 'dry'],
   {'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 0.75}],
  ['generated control 3', [2000, 0, '5', 'morton kosher', 'dry'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}]],
 [['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['regression: dry brine mass basis', [1500, 2000, '3', 'table', 'dry'],
   {'salt_g': 45.0, 'sodium_mg_per_100g': 1179, 'tsp': 7.5}],
  ['repair check: dry brine mass basis', [1500, 1000, '1', 'morton kosher', 'wet'],
   {'salt_g': 25.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['generated control 1', [500, 0, '0.5', 'morton kosher', 'dry'],
   {'salt_g': 2.5, 'sodium_mg_per_100g': 197, 'tsp': 0.5}],
  ['generated control 2', [1000, 1000, '1', 'morton kosher', 'wet'],
   {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 4.25}],
  ['generated control 3', [1000, 2000, '2', 'diamond kosher', 'dry'],
   {'salt_g': 20.0, 'sodium_mg_per_100g': 786, 'tsp': 7.25}]],
 [['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['regression: dry brine mass basis', [500, 1000, '3', 'morton kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 1179, 'tsp': 3.25}],
  ['repair check: dry brine mass basis', [2500, 500, '2', 'diamond kosher', 'wet'],
   {'salt_g': 60.0, 'sodium_mg_per_100g': 786, 'tsp': 21.5}],
  ['generated control 1', [1500, 500, '1', 'table', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 2.5}],
  ['generated control 2', [1000, 1000, '5', 'morton kosher', 'wet'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}],
  ['generated control 3', [500, 2000, '3', 'table', 'wet'],
   {'salt_g': 75.0, 'sodium_mg_per_100g': 1179, 'tsp': 12.5}]],
 [['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['regression: dry brine mass basis', [2500, 500, '5', 'morton kosher', 'dry'],
   {'salt_g': 125.0, 'sodium_mg_per_100g': 1965, 'tsp': 26.0}],
  ['repair check: dry brine mass basis', [1000, 2000, '1.5', 'table', 'wet'],
   {'salt_g': 45.0, 'sodium_mg_per_100g': 590, 'tsp': 7.5}],
  ['generated control 1', [1500, 500, '2', 'diamond kosher', 'dry'],
   {'salt_g': 30.0, 'sodium_mg_per_100g': 786, 'tsp': 10.75}],
  ['generated control 2', [2500, 0, '2', 'diamond kosher', 'dry'],
   {'salt_g': 50.0, 'sodium_mg_per_100g': 786, 'tsp': 17.75}],
  ['generated control 3', [2000, 500, '5', 'table', 'dry'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}]]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
wet brine{'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}{'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}Passed
dry brine ignores water{'salt_g': 25.0, 'sodium_mg_per_100g': 393, 'tsp': 9.0}{'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}Failed
strong morton brine{'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}{'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}Passed
regression: dry brine mass basis{'salt_g': 15.0, 'sodium_mg_per_100g': 197, 'tsp': 5.25}{'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 1.75}Failed
repair check: dry brine mass basis{'salt_g': 150.0, 'sodium_mg_per_100g': 1965, 'tsp': 31.25}{'salt_g': 150.0, 'sodium_mg_per_100g': 1965, 'tsp': 31.25}Passed
generated control 1{'salt_g': 125.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}{'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}Failed
generated control 2{'salt_g': 30.0, 'sodium_mg_per_100g': 590, 'tsp': 5.0}{'salt_g': 15.0, 'sodium_mg_per_100g': 590, 'tsp': 2.5}Failed
generated control 3{'salt_g': 45.0, 'sodium_mg_per_100g': 590, 'tsp': 16.0}{'salt_g': 37.5, 'sodium_mg_per_100g': 590, 'tsp': 13.5}Failed

SHA-256 / 1c7933357446c16210c485ed35b60f294a90392903ccfcba1cd58a4a7fd211b4

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(meat_g, water_g, pct, salt_type, method):
    DENS = {'table': Fraction(6), 'morton kosher': Fraction(24, 5), 'diamond kosher': Fraction(14, 5)}
    total = meat_g if method == 'dry' else water_g
    salt = Fraction(total) * Fraction(pct) / 100
    tsp = salt / DENS[salt_type]
    sodium = salt * 393 * 100 / total
    return {'salt_g': math.floor(salt * 10 + Fraction(1, 2)) / 10, 'tsp': math.floor(tsp * 4 + Fraction(1, 2)) / 4,
            'sodium_mg_per_100g': math.floor(sodium + Fraction(1, 2))}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['regression: dry brine mass basis', [1000, 2000, '0.5', 'diamond kosher', 'dry'],
   {'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 1.75}],
  ['repair check: dry brine mass basis', [1000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 150.0, 'sodium_mg_per_100g': 1965, 'tsp': 31.25}],
  ['generated control 1', [2000, 500, '5', 'table', 'dry'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}],
  ['generated control 2', [1000, 1000, '1.5', 'table', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 590, 'tsp': 2.5}],
  ['generated control 3', [2500, 500, '1.5', 'diamond kosher', 'dry'],
   {'salt_g': 37.5, 'sodium_mg_per_100g': 590, 'tsp': 13.5}]],
 [['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['regression: dry brine mass basis', [1500, 2000, '5', 'diamond kosher', 'dry'],
   {'salt_g': 75.0, 'sodium_mg_per_100g': 1965, 'tsp': 26.75}],
  ['repair check: dry brine mass basis', [500, 1000, '5', 'morton kosher', 'wet'],
   {'salt_g': 75.0, 'sodium_mg_per_100g': 1965, 'tsp': 15.75}],
  ['generated control 1', [500, 0, '1', 'table', 'dry'],
   {'salt_g': 5.0, 'sodium_mg_per_100g': 393, 'tsp': 0.75}],
  ['generated control 2', [1000, 0, '0.5', 'table', 'dry'],
   {'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 0.75}],
  ['generated control 3', [2000, 0, '5', 'morton kosher', 'dry'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}]],
 [['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['regression: dry brine mass basis', [1500, 2000, '3', 'table', 'dry'],
   {'salt_g': 45.0, 'sodium_mg_per_100g': 1179, 'tsp': 7.5}],
  ['repair check: dry brine mass basis', [1500, 1000, '1', 'morton kosher', 'wet'],
   {'salt_g': 25.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['generated control 1', [500, 0, '0.5', 'morton kosher', 'dry'],
   {'salt_g': 2.5, 'sodium_mg_per_100g': 197, 'tsp': 0.5}],
  ['generated control 2', [1000, 1000, '1', 'morton kosher', 'wet'],
   {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 4.25}],
  ['generated control 3', [1000, 2000, '2', 'diamond kosher', 'dry'],
   {'salt_g': 20.0, 'sodium_mg_per_100g': 786, 'tsp': 7.25}]],
 [['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['regression: dry brine mass basis', [500, 1000, '3', 'morton kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 1179, 'tsp': 3.25}],
  ['repair check: dry brine mass basis', [2500, 500, '2', 'diamond kosher', 'wet'],
   {'salt_g': 60.0, 'sodium_mg_per_100g': 786, 'tsp': 21.5}],
  ['generated control 1', [1500, 500, '1', 'table', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 2.5}],
  ['generated control 2', [1000, 1000, '5', 'morton kosher', 'wet'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}],
  ['generated control 3', [500, 2000, '3', 'table', 'wet'],
   {'salt_g': 75.0, 'sodium_mg_per_100g': 1179, 'tsp': 12.5}]],
 [['dry brine ignores water', [1500, 1000, '1', 'diamond kosher', 'dry'],
   {'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}],
  ['strong morton brine', [2000, 2000, '5', 'morton kosher', 'wet'],
   {'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}],
  ['wet brine', [1000, 1000, '1', 'table', 'wet'], {'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}],
  ['regression: dry brine mass basis', [2500, 500, '5', 'morton kosher', 'dry'],
   {'salt_g': 125.0, 'sodium_mg_per_100g': 1965, 'tsp': 26.0}],
  ['repair check: dry brine mass basis', [1000, 2000, '1.5', 'table', 'wet'],
   {'salt_g': 45.0, 'sodium_mg_per_100g': 590, 'tsp': 7.5}],
  ['generated control 1', [1500, 500, '2', 'diamond kosher', 'dry'],
   {'salt_g': 30.0, 'sodium_mg_per_100g': 786, 'tsp': 10.75}],
  ['generated control 2', [2500, 0, '2', 'diamond kosher', 'dry'],
   {'salt_g': 50.0, 'sodium_mg_per_100g': 786, 'tsp': 17.75}],
  ['generated control 3', [2000, 500, '5', 'table', 'dry'],
   {'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}]]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
wet brine{'salt_g': 10.0, 'sodium_mg_per_100g': 393, 'tsp': 1.75}{'salt_g': 20.0, 'sodium_mg_per_100g': 393, 'tsp': 3.25}Failed
dry brine ignores water{'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}{'salt_g': 15.0, 'sodium_mg_per_100g': 393, 'tsp': 5.25}Passed
strong morton brine{'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}{'salt_g': 200.0, 'sodium_mg_per_100g': 1965, 'tsp': 41.75}Failed
regression: dry brine mass basis{'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 1.75}{'salt_g': 5.0, 'sodium_mg_per_100g': 197, 'tsp': 1.75}Passed
repair check: dry brine mass basis{'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 20.75}{'salt_g': 150.0, 'sodium_mg_per_100g': 1965, 'tsp': 31.25}Failed
generated control 1{'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}{'salt_g': 100.0, 'sodium_mg_per_100g': 1965, 'tsp': 16.75}Passed
generated control 2{'salt_g': 15.0, 'sodium_mg_per_100g': 590, 'tsp': 2.5}{'salt_g': 15.0, 'sodium_mg_per_100g': 590, 'tsp': 2.5}Passed
generated control 3{'salt_g': 37.5, 'sodium_mg_per_100g': 590, 'tsp': 13.5}{'salt_g': 37.5, 'sodium_mg_per_100g': 590, 'tsp': 13.5}Passed

SHA-256 / ec8e0f4fb1fca7caf054991b7065cb5255faa5c45676c3d335717905980f1156

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 8 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:52:31.001172+00:00.

Case digest / 7a72d3f9e164a7a81e1ee3e0bd78380771e75334415cf2c41424b2859b7e0f83