FAILURE MAP
← Case archive

FA-97121 / Recipe scaling and nutrition / Open access

Home canning altitude table: pressure time adjustment · case 01

Dial gauge processing times grow with altitude although pressure already compensates.

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

ROOT CAUSE

The water-bath time addition is also applied to dial-gauge processing.

VERIFIED REPAIR

Keep base minutes for dial gauge processing.

Unsuccessful approach: Adding half the adjustment still changes pressure-canner times.

Case contract

Above 10000 ft -> "error: altitude out of range". Water bath adds 0 (<=1000 ft), 5 (<=3000), 10 (<=6000), 15 (<=8000), 20 (<=10000) minutes to base, psi None. Dial gauge keeps base minutes, psi 11 (<=2000), 12 (<=4000), 13 (<=6000), 14 (<=8000), above 8000 error. Weighted gauge keeps base minutes, psi 10 at <=1000 ft else 15. Other methods -> "error: method".

Why this case matters

Preserving recipes must lengthen time or raise pressure at altitude to stay safe (toy table).

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(method, altitude_ft, base_minutes):
    if altitude_ft > 10000:
        return 'error: altitude out of range'
    add = 0 if altitude_ft <= 1000 else 5 if altitude_ft <= 3000 else 10 if altitude_ft <= 6000 else 15 if altitude_ft <= 8000 else 20
    if method == 'water bath':
        return {'minutes': base_minutes + add, 'psi': None}
    if method == 'dial':
        if altitude_ft > 8000:
            return 'error: altitude out of range'
        psi = 11 if altitude_ft <= 2000 else 12 if altitude_ft <= 4000 else 13 if altitude_ft <= 6000 else 14
        return {'minutes': base_minutes + add, 'psi': psi}
    if method == 'weighted':
        return {'minutes': base_minutes, 'psi': 10 if altitude_ft <= 1000 else 15}
    return 'error: method' 
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['regression: pressure time adjustment', ['dial', 4000, 15], {'minutes': 15, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 4500, 15], {'minutes': 15, 'psi': 13}],
  ['generated control 1', ['water bath', 10500, 40], 'error: altitude out of range'],
  ['generated control 2', ['dial', 0, 10], {'minutes': 10, 'psi': 11}],
  ['generated control 3', ['weighted', 4500, 10], {'minutes': 10, 'psi': 15}]],
 [['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['regression: pressure time adjustment', ['dial', 2001, 20], {'minutes': 20, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 2000, 10], {'minutes': 10, 'psi': 11}],
  ['generated control 1', ['water bath', 500, 85], {'minutes': 85, 'psi': None}],
  ['generated control 2', ['steam', 1000, 25], 'error: method'],
  ['generated control 3', ['weighted', 6000, 25], {'minutes': 25, 'psi': 15}]],
 [['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['unknown method', ['steam', 500, 10], 'error: method'],
  ['regression: pressure time adjustment', ['dial', 4500, 15], {'minutes': 15, 'psi': 13}],
  ['repair check: pressure time adjustment', ['dial', 6000, 40], {'minutes': 40, 'psi': 13}],
  ['generated control 1', ['water bath', 8500, 85], {'minutes': 105, 'psi': None}],
  ['generated control 2', ['weighted', 8000, 15], {'minutes': 15, 'psi': 15}],
  ['generated control 3', ['water bath', 1000, 40], {'minutes': 40, 'psi': None}]],
 [['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['unknown method', ['steam', 500, 10], 'error: method'],
  ['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['regression: pressure time adjustment', ['dial', 3000, 40], {'minutes': 40, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 4500, 20], {'minutes': 20, 'psi': 13}],
  ['generated control 1', ['water bath', 4000, 10], {'minutes': 20, 'psi': None}],
  ['generated control 2', ['weighted', 0, 25], {'minutes': 25, 'psi': 10}],
  ['generated control 3', ['steam', 2000, 25], 'error: method']],
 [['unknown method', ['steam', 500, 10], 'error: method'],
  ['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['regression: pressure time adjustment', ['dial', 7000, 20], {'minutes': 20, 'psi': 14}],
  ['repair check: pressure time adjustment', ['dial', 2001, 10], {'minutes': 10, 'psi': 12}],
  ['generated control 1', ['water bath', 4000, 40], {'minutes': 50, 'psi': None}],
  ['generated control 2', ['weighted', 1000, 25], {'minutes': 25, 'psi': 10}],
  ['generated control 3', ['water bath', 2001, 20], {'minutes': 25, 'psi': None}]]]
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
sea level bath{'minutes': 10, 'psi': None}{'minutes': 10, 'psi': None}Passed
band edge 1000{'minutes': 10, 'psi': None}{'minutes': 10, 'psi': None}Passed
dial mid{'minutes': 30, 'psi': 12}{'minutes': 25, 'psi': 12}Failed
regression: pressure time adjustment{'minutes': 25, 'psi': 12}{'minutes': 15, 'psi': 12}Failed
repair check: pressure time adjustment{'minutes': 25, 'psi': 13}{'minutes': 15, 'psi': 13}Failed
generated control 1error: altitude out of rangeerror: altitude out of rangePassed
generated control 2{'minutes': 10, 'psi': 11}{'minutes': 10, 'psi': 11}Passed
generated control 3{'minutes': 10, 'psi': 15}{'minutes': 10, 'psi': 15}Passed

SHA-256 / f291578e4fbd52d67b55c546a0f4cab4985ad6a85b1796d0ee34f8eae1d1512b

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(method, altitude_ft, base_minutes):
    if altitude_ft > 10000:
        return 'error: altitude out of range'
    add = 0 if altitude_ft <= 1000 else 5 if altitude_ft <= 3000 else 10 if altitude_ft <= 6000 else 15 if altitude_ft <= 8000 else 20
    if method == 'water bath':
        return {'minutes': base_minutes + add, 'psi': None}
    if method == 'dial':
        if altitude_ft > 8000:
            return 'error: altitude out of range'
        psi = 11 if altitude_ft <= 2000 else 12 if altitude_ft <= 4000 else 13 if altitude_ft <= 6000 else 14
        return {'minutes': base_minutes + add // 2, 'psi': psi}
    if method == 'weighted':
        return {'minutes': base_minutes, 'psi': 10 if altitude_ft <= 1000 else 15}
    return 'error: method' 
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['regression: pressure time adjustment', ['dial', 4000, 15], {'minutes': 15, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 4500, 15], {'minutes': 15, 'psi': 13}],
  ['generated control 1', ['water bath', 10500, 40], 'error: altitude out of range'],
  ['generated control 2', ['dial', 0, 10], {'minutes': 10, 'psi': 11}],
  ['generated control 3', ['weighted', 4500, 10], {'minutes': 10, 'psi': 15}]],
 [['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['regression: pressure time adjustment', ['dial', 2001, 20], {'minutes': 20, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 2000, 10], {'minutes': 10, 'psi': 11}],
  ['generated control 1', ['water bath', 500, 85], {'minutes': 85, 'psi': None}],
  ['generated control 2', ['steam', 1000, 25], 'error: method'],
  ['generated control 3', ['weighted', 6000, 25], {'minutes': 25, 'psi': 15}]],
 [['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['unknown method', ['steam', 500, 10], 'error: method'],
  ['regression: pressure time adjustment', ['dial', 4500, 15], {'minutes': 15, 'psi': 13}],
  ['repair check: pressure time adjustment', ['dial', 6000, 40], {'minutes': 40, 'psi': 13}],
  ['generated control 1', ['water bath', 8500, 85], {'minutes': 105, 'psi': None}],
  ['generated control 2', ['weighted', 8000, 15], {'minutes': 15, 'psi': 15}],
  ['generated control 3', ['water bath', 1000, 40], {'minutes': 40, 'psi': None}]],
 [['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['unknown method', ['steam', 500, 10], 'error: method'],
  ['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['regression: pressure time adjustment', ['dial', 3000, 40], {'minutes': 40, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 4500, 20], {'minutes': 20, 'psi': 13}],
  ['generated control 1', ['water bath', 4000, 10], {'minutes': 20, 'psi': None}],
  ['generated control 2', ['weighted', 0, 25], {'minutes': 25, 'psi': 10}],
  ['generated control 3', ['steam', 2000, 25], 'error: method']],
 [['unknown method', ['steam', 500, 10], 'error: method'],
  ['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['regression: pressure time adjustment', ['dial', 7000, 20], {'minutes': 20, 'psi': 14}],
  ['repair check: pressure time adjustment', ['dial', 2001, 10], {'minutes': 10, 'psi': 12}],
  ['generated control 1', ['water bath', 4000, 40], {'minutes': 50, 'psi': None}],
  ['generated control 2', ['weighted', 1000, 25], {'minutes': 25, 'psi': 10}],
  ['generated control 3', ['water bath', 2001, 20], {'minutes': 25, 'psi': None}]]]
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
sea level bath{'minutes': 10, 'psi': None}{'minutes': 10, 'psi': None}Passed
band edge 1000{'minutes': 10, 'psi': None}{'minutes': 10, 'psi': None}Passed
dial mid{'minutes': 27, 'psi': 12}{'minutes': 25, 'psi': 12}Failed
regression: pressure time adjustment{'minutes': 20, 'psi': 12}{'minutes': 15, 'psi': 12}Failed
repair check: pressure time adjustment{'minutes': 20, 'psi': 13}{'minutes': 15, 'psi': 13}Failed
generated control 1error: altitude out of rangeerror: altitude out of rangePassed
generated control 2{'minutes': 10, 'psi': 11}{'minutes': 10, 'psi': 11}Passed
generated control 3{'minutes': 10, 'psi': 15}{'minutes': 10, 'psi': 15}Passed

SHA-256 / 9b2028951b30206875556499c9632ef4a80ea77fb79e4f102058f6a379515e0d

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(method, altitude_ft, base_minutes):
    if altitude_ft > 10000:
        return 'error: altitude out of range'
    add = 0 if altitude_ft <= 1000 else 5 if altitude_ft <= 3000 else 10 if altitude_ft <= 6000 else 15 if altitude_ft <= 8000 else 20
    if method == 'water bath':
        return {'minutes': base_minutes + add, 'psi': None}
    if method == 'dial':
        if altitude_ft > 8000:
            return 'error: altitude out of range'
        psi = 11 if altitude_ft <= 2000 else 12 if altitude_ft <= 4000 else 13 if altitude_ft <= 6000 else 14
        return {'minutes': base_minutes, 'psi': psi}
    if method == 'weighted':
        return {'minutes': base_minutes, 'psi': 10 if altitude_ft <= 1000 else 15}
    return 'error: method' 
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['regression: pressure time adjustment', ['dial', 4000, 15], {'minutes': 15, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 4500, 15], {'minutes': 15, 'psi': 13}],
  ['generated control 1', ['water bath', 10500, 40], 'error: altitude out of range'],
  ['generated control 2', ['dial', 0, 10], {'minutes': 10, 'psi': 11}],
  ['generated control 3', ['weighted', 4500, 10], {'minutes': 10, 'psi': 15}]],
 [['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['regression: pressure time adjustment', ['dial', 2001, 20], {'minutes': 20, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 2000, 10], {'minutes': 10, 'psi': 11}],
  ['generated control 1', ['water bath', 500, 85], {'minutes': 85, 'psi': None}],
  ['generated control 2', ['steam', 1000, 25], 'error: method'],
  ['generated control 3', ['weighted', 6000, 25], {'minutes': 25, 'psi': 15}]],
 [['dial mid', ['dial', 3000, 25], {'minutes': 25, 'psi': 12}],
  ['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['unknown method', ['steam', 500, 10], 'error: method'],
  ['regression: pressure time adjustment', ['dial', 4500, 15], {'minutes': 15, 'psi': 13}],
  ['repair check: pressure time adjustment', ['dial', 6000, 40], {'minutes': 40, 'psi': 13}],
  ['generated control 1', ['water bath', 8500, 85], {'minutes': 105, 'psi': None}],
  ['generated control 2', ['weighted', 8000, 15], {'minutes': 15, 'psi': 15}],
  ['generated control 3', ['water bath', 1000, 40], {'minutes': 40, 'psi': None}]],
 [['too high', ['water bath', 10500, 10], 'error: altitude out of range'],
  ['unknown method', ['steam', 500, 10], 'error: method'],
  ['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['regression: pressure time adjustment', ['dial', 3000, 40], {'minutes': 40, 'psi': 12}],
  ['repair check: pressure time adjustment', ['dial', 4500, 20], {'minutes': 20, 'psi': 13}],
  ['generated control 1', ['water bath', 4000, 10], {'minutes': 20, 'psi': None}],
  ['generated control 2', ['weighted', 0, 25], {'minutes': 25, 'psi': 10}],
  ['generated control 3', ['steam', 2000, 25], 'error: method']],
 [['unknown method', ['steam', 500, 10], 'error: method'],
  ['sea level bath', ['water bath', 0, 10], {'minutes': 10, 'psi': None}],
  ['band edge 1000', ['water bath', 1000, 10], {'minutes': 10, 'psi': None}],
  ['regression: pressure time adjustment', ['dial', 7000, 20], {'minutes': 20, 'psi': 14}],
  ['repair check: pressure time adjustment', ['dial', 2001, 10], {'minutes': 10, 'psi': 12}],
  ['generated control 1', ['water bath', 4000, 40], {'minutes': 50, 'psi': None}],
  ['generated control 2', ['weighted', 1000, 25], {'minutes': 25, 'psi': 10}],
  ['generated control 3', ['water bath', 2001, 20], {'minutes': 25, 'psi': None}]]]
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
sea level bath{'minutes': 10, 'psi': None}{'minutes': 10, 'psi': None}Passed
band edge 1000{'minutes': 10, 'psi': None}{'minutes': 10, 'psi': None}Passed
dial mid{'minutes': 25, 'psi': 12}{'minutes': 25, 'psi': 12}Passed
regression: pressure time adjustment{'minutes': 15, 'psi': 12}{'minutes': 15, 'psi': 12}Passed
repair check: pressure time adjustment{'minutes': 15, 'psi': 13}{'minutes': 15, 'psi': 13}Passed
generated control 1error: altitude out of rangeerror: altitude out of rangePassed
generated control 2{'minutes': 10, 'psi': 11}{'minutes': 10, 'psi': 11}Passed
generated control 3{'minutes': 10, 'psi': 15}{'minutes': 10, 'psi': 15}Passed

SHA-256 / ab16ae1a2f4f60081260f28ab5be327b468c8e20fdff53483c88b038d6c0c9cd

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:29.045011+00:00.

Case digest / af878f9cd2df9f9b9d320f20deac2b0692dd6ec14c9929abb0c0b57f49358889