storage@1
Storage
Resources
Documentation
#storage@1
Purpose
The storage@1 stack enables recipes to declare storage conditions and duration for prepared dishes, with optional leftovers and reheating guidance.
This stack is adoption-first: storage can be declared with minimal information, or extended with detailed leftovers and reheating instructions.
Requirements
A document that declares storage@1:
• MUST satisfy all structural rules enabled by this stack. • MUST satisfy the semantic rules described below.
Data Model
When storage@1 is declared, the document MUST include a top-level storage object.
Storage Object
The storage object MUST include exactly one of:
• roomTemp: storage at room temperature
• refrigerated: storage in refrigeration
• frozen: storage in freezing conditions
Each storage method is a storageMethod object with:
• duration (required): ISO 8601 duration string (pattern ^P)
• notes (optional): string
• metadata (optional): object
Leftovers and Reheating
The storage object MAY include an optional leftovers field for leftovers and reheating guidance.
Leftovers and Reheating
The leftovers object supports:
• notes (optional): string with general guidance
• reheat (optional): array of reheating instructions (see below)
• portioning (optional): portion guidance object
Reheat Field
The reheat field supports two formats:
Simple (Array of Strings)
An array of freeform string instructions:
{
"storage": {
"refrigerated": {
"duration": { "iso8601": "P4D" }
},
"leftovers": {
"notes": "Store in an airtight container.",
"reheat": [
"Microwave 2–3 minutes, stirring halfway.",
"Or warm in a skillet over medium heat with a splash of water."
]
}
}
}
Structured (Array of Objects)
An array of structured reheating instruction objects:
{
"storage": {
"frozen": {
"duration": { "iso8601": "P2M" }
},
"leftovers": {
"portioning": { "notes": "Cool completely, then portion into containers." },
"reheat": [
{
"method": "microwave",
"duration": { "minMinutes": 2, "maxMinutes": 3 },
"notes": "Stir halfway."
},
{
"method": "oven",
"temp": { "value": 350, "unit": "F" },
"notes": "Cover and heat until hot throughout."
}
]
}
}
}
Reheat Instruction Object
Each structured reheating instruction includes:
• method (required): string describing the reheating method (freeform in v1)
• temp (optional): object with value (number) and unit ("F" or "C")
• duration (optional): object with minMinutes and/or maxMinutes (integers >= 0)
• notes (optional): string
Reheat Duration
The duration object supports:
• minMinutes (optional): integer >= 0
• maxMinutes (optional): integer >= 0
• At least one of minMinutes or maxMinutes must be present
If both are present, minMinutes should be <= maxMinutes (semantic validation may enforce this in tooling).
Portioning
The portioning object includes:
• notes (required): string with portioning guidance
• recommendedPortion (optional): object with quantity (number) and unit (string)
Semantics
Storage Methods
Storage methods (roomTemp, refrigerated, frozen) are mutually exclusive. Exactly one must be present.
Reheat Method
The method field in structured reheating instructions is freeform in v1. Consumers may map common values (e.g., "microwave", "oven", "stovetop") to display or planning features, but validation does not enforce specific values.
Scaling
If no scaling factor exists in the document, leftovers guidance does not change. Leftovers guidance is not scaled by recipe scale factors.
Composition
The storage stack is composable with other stacks:
• No hard dependency on other stacks
• Remains monotonic: does not close objects needed by other stacks
• leftovers is optional even when the stack is present
Semantic Validation Rules (Normative)
Validators MUST enforce the following rules:
Storage method requirement The
storageobject MUST include exactly one ofroomTemp,refrigerated, orfrozen.Duration requirement Each storage method object MUST include a
durationfield.Reheat instruction method requirement If
leftovers.reheatincludes structured instruction objects, each object MUST include amethodfield.Reheat duration validation If a
reheatInstruction.durationincludes bothminMinutesandmaxMinutes,minMinutesSHOULD be <=maxMinutes(tooling may warn but not fail validation).
Examples
Minimal storage
{
"storage": {
"refrigerated": {
"duration": { "iso8601": "P3D" }
}
}
}
Storage with simple leftovers
{
"storage": {
"refrigerated": {
"duration": { "iso8601": "P4D" }
},
"leftovers": {
"notes": "Store in an airtight container.",
"reheat": [
"Microwave 2–3 minutes, stirring halfway.",
"Or warm in a skillet over medium heat with a splash of water."
]
}
}
}
Storage with structured reheating
{
"storage": {
"frozen": {
"duration": { "iso8601": "P2M" }
},
"leftovers": {
"portioning": { "notes": "Cool completely, then portion into containers." },
"reheat": [
{
"method": "microwave",
"duration": { "minMinutes": 2, "maxMinutes": 3 },
"notes": "Stir halfway."
},
{
"method": "oven",
"temp": { "value": 350, "unit": "F" },
"notes": "Cover and heat until hot throughout."
}
]
}
}
}
Storage with portioning
{
"storage": {
"refrigerated": {
"duration": { "iso8601": "P5D" }
},
"leftovers": {
"portioning": {
"notes": "Portion into individual servings before storing.",
"recommendedPortion": {
"quantity": 1,
"unit": "cup"
}
}
}
}
}