The boil won't fit in the kettle.
The mash won't fit in the tun.
The fermenter has too little room over the beer. headspaceL is negative
if the batch doesn't fit at all, which is the warning case.
ReadonlyfermenterVolumeL: LitresThe fermenter's capacity, in liters.
ReadonlyheadspaceL: LitresRoom left over the wort, in liters. Negative when the batch doesn't fit.
Readonlyid: "fermenter-headspace"Which check this is.
ReadonlyvolumeIntoFermenterL: LitresWort going into the fermenter, in liters.
ReadonlywantedHeadspaceL: LitresRoom the check wants left over the wort, in liters (see FERMENTER_HEADSPACE_FRACTION).
The predicted mash pH is outside the band. acidAdded says whether
anything is already acidifying the mash, so callers can tell "you haven't
adjusted this" from "you've adjusted it and it's still out".
ReadonlyacidAdded: booleanTrue when an acid addition or acidulated malt is already in the recipe.
Readonlyband: BandThe pH band it was checked against, MASH_PH_BAND.
Readonlydirection: "below" | "above"Which side of the band the pH falls on.
Readonlyid: "mash-ph-out-of-band"Which check this is.
Readonlyph: numberThe predicted mash pH.
An acid addition for sparge water on equipment that doesn't sparge.
The acid list isn't updated when the equipment changes, so a recipe moved
to a no-sparge or BIAB profile keeps its sparge acid addition. This is
always a note. predictMashPh already ignores a sparge acid, so the
calculated figures are right. The problem is that every acid addition is
a brew-day instruction, and this one tells the brewer to treat water they
won't use.
Readonlyadditions: numberHow many sparge acid additions the recipe has.
Readonlyid: "sparge-acid-without-sparge"Which check this is.
The yeast pitch is short of the style-appropriate rate. remedy says
which fix starter.ts thinks will reach the target.
starter-planned means the recipe already has a starter, pitchPlan has
grown it, and the pitch is still short by shortfallBillion. This is why
a saved starter is stored as its inputs and not as a boolean. A flag
saying "a starter is planned" would have hidden this finding.
ReadonlyachievedPitchRate: numberPitch rate the recipe's yeast reaches, in million cells per mL per °Plato.
Readonlyid: "pitch-short"Which check this is.
ReadonlypacksRequired: numberPacks needed to reach the target with no starter, rounded up.
Readonlyremedy: "starter" | "starter-planned" | "more-packs"The fix most likely to reach the target.
ReadonlyshortfallBillion: numberCells still needed to reach the target, in billions.
ReadonlytargetPitchRate: numberPitch rate aimed for, in million cells per mL per °Plato.
A dry yeast pitch short of the maker's dosage.
This is separate from pitch-short because dry yeast is specified by
mass. It compares grams against a published g/hL band and never converts
to cells. See DRY_DOSAGE_G_PER_HL for why a cell-count target overstates
a dry pitch.
Readonlyband: BandThe maker's dosage band, in grams per hectoliter.
ReadonlygramsPitched: numberDry yeast in the recipe, in grams.
ReadonlygramsWanted: numberDry yeast the maker's lowest dosage asks for at this volume, in grams.
Readonlyid: "pitch-short-dry"Which check this is.
ReadonlypacksRequired: numberSachets needed to reach gramsWanted, rounded up.
More dry yeast than the maker asks for, by more than rounding up to whole sachets explains.
This is never a warning. Over-pitching dry yeast costs money and a little
ester character, but it won't ruin the beer. See dryPitchPlan for why
this isn't just "over the ceiling". At homebrew volumes a whole number of
sachets usually can't land inside the band, and flagging that would
contradict the shortfall check.
Readonlyband: BandThe maker's dosage band, in grams per hectoliter.
ReadonlygramsEnough: numberDry yeast the maker's lowest dosage asks for at this volume, in grams.
ReadonlygramsPitched: numberDry yeast in the recipe, in grams.
Readonlyid: "pitch-heavy-dry"Which check this is.
ReadonlypacksSuggested: numberSachets that cover gramsEnough, rounded up.
A primary fermentation step sits outside a yeast's published range.
There's one per yeast, for the primary step furthest outside its range, so
a schedule with two warm primaries gives one finding. It's always a
note, because a Kölsch strain run cool or a saison yeast pushed hot can
be intentional. It's meant to catch a schedule nobody updated, like an
ale's 20 °C primary left in place with a lager yeast.
Readonlydirection: "below" | "above"Which side of the range the step falls on.
Readonlyid: "ferment-temp-outside-yeast"Which check this is.
ReadonlyrangeMaxC: numberTop of the yeast's published range, in °C.
ReadonlyrangeMinC: numberBottom of the yeast's published range, in °C.
ReadonlytempC: numberTemperature of the primary step furthest outside the range, in °C.
ReadonlyyeastName: stringName of the yeast, as given in the recipe.
A vital sits outside the chosen style's published band.
Readonlyband: BandThe style's band for that vital.
Readonlydirection: "below" | "above"Which side of the band the value falls on.
Readonlyid: "style-band"Which check this is.
Readonlyvalue: numberThe recipe's value for that vital, in the same unit as the band.
Readonlyvital: StyleBandVitalWhich vital is outside its band.
One thing the pre-brew pass found. Discriminate on
id.