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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 1 | error: altitude out of range | error: altitude out of range | Passed |
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 1 | error: altitude out of range | error: altitude out of range | Passed |
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 1 | error: altitude out of range | error: altitude out of range | Passed |
| 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