Stop seeing specific recipes. Start seeing technique patterns that absorb any ingredient.

The abstraction: “Chicken Parmesan” becomes “Protein + Red Sauce + Cheese + Starch.”

The power: Once you see the pattern, you can plug any sale item into the template. Pork on sale? Make “Pork Parmesan” using the exact same technique.

The Four Universal Templates

Expanded from three to four 2026-05-31 (Cycle 23 M2.3 Kai-approved ruling Q-D1): soups are a universal weeknight pattern confirmed by journey-map lived experience. The vault’s original three-template enumeration captured roast / grain / stir-fry patterns but did not include soups. SOUP is a 4th technique-led template, not a cuisine — the Template/Flavour-Bridge separation is preserved. See Kitchen Systems Architecture - How Inventory and Cooking Connect § “The Four Universal Templates”.

Roast Sheet Pan Cooking Template

  • Technique: Toss protein + hard veg in oil/salt. Roast 400°F for 25 min. Add soft veg. Roast 10 min. Sauce.
  • Variables: Any protein, any vegetables, any sauce
  • Example variations: Chicken/Potato/Green Beans/Lemon OR Sausage/Peppers/Onions/Marinara

Grain Bowl Cooking Template

  • Technique: Cook grain. Sauté protein. Steam/roast veg. Assemble. Top with sauce.
  • Variables: Any grain, any protein, any vegetables, any sauce
  • Example variations: Rice/Beef/Corn/Salsa OR Quinoa/Chickpeas/Cucumber/Hummus

Stir Fry Cooking Template

  • Technique: Heat pan. Sauté protein. Remove. Sauté veg. Return protein. Add sauce.
  • Variables: Any protein, any vegetables, any sauce
  • Example variations: Pork/Bok Choy/Soy-Ginger OR Shrimp/Snap Peas/Garlic Sauce

Soup Cooking Template

  • Technique: Sauté aromatics. Add liquid base (broth, stock, water, coconut milk, or tomato). Add protein OR ≥2 vegetables. Simmer ≥20 min. Season and ladle.
  • Variables: Any liquid base, any protein or vegetable combination, any aromatics
  • Inclusion criteria: liquid base + protein OR ≥2 vegetables + aromatics + simmer ≥20min
  • Example variations: Chicken noodle / Lentil soup / Tomato bisque / Pho-style noodle soup
  • When to use: Comforting weeknight meal; flexible ingredient absorber for vegetables-near-expiration (intersects with Eat Me First Bin)

Recipe File Headers: # template: and # diet:

Recipe files can declare their template and dietary categories via header lines. These operator-declared headers are authoritative — the system’s classification heuristics are a fallback, not an override.

# template: header

Purpose: Operator declares the recipe’s Template Cooking category.

Valid values: sheet_pan / grain_bowl / stir_fry / soup / unknown

Syntax example:

# template: sheet_pan

Operator authority (hard pin): The # template: header wins over the heuristic classifier. If the classifier’s reading disagrees, it emits a WARN-level audit-log entry but does not silently override the operator’s declaration. This mirrors the # diet: precedent below.

Why hard pin: Operators know their own recipes. Silently overriding a declared template creates “doctrine-drift” — the same failure mode that the Cycle 21 audit (Imagination I001) identified when automatic inference overwrote manual declarations without trace. The audit-log WARN preserves visibility without removing operator authority.

When unknown is appropriate: Use # template: unknown for recipes that intentionally don’t fit any template (braises, baked goods, ferments, deep-fry). This makes the non-classification deliberate rather than accidental.

# diet: header

Purpose: Operator declares the recipe’s dietary category (e.g., vegan, gluten_free, keto, paleo).

Valid values: Any dietary_taxonomy tag (e.g., vegan, vegetarian, gluten_free, dairy_free, keto, paleo).

Syntax example:

# diet: vegan

Operator authority (hard pin): The # diet: header is the truth source for preference-tier filtering. Operator declaration wins over heuristic dietary inference.

Critical distinction — medical-tier eaters: For eaters with medical-tier dietary tags (e.g., celiac, anaphylactic allergy), the system does NOT rely on the operator-declared # diet: claim. It runs derived-allergen analysis against the ingredient list instead. A recipe declared # diet: gluten_free whose ingredient list contains soy sauce (gluten-bearing per ingredient registry) will still be dropped for a celiac eater. The # diet: header is authoritative for preference-tier; derived allergens are authoritative for medical-tier. See Two-Bin SystemTemplate Cooking allergen flow.

Why two tiers: Operators can misdeclare dietary tags (or tags can drift as recipes are modified). Preference-tier eaters can self-correct if they notice a mismatch. Medical-tier eaters cannot — a single misdeclared tag can cause an anaphylactic reaction. The derived-allergen filter is the non-negotiable safety layer underneath the declared-tag convenience layer.

The Mental Shift

From: “I need flank steak, bok choy, oyster sauce, fresh ginger” (rigid, one recipe) To: “I need 1 protein, 1 green veg, 1 starch” (flexible, adapts to sales)

You walk into store. Flank steak is 3? Swap. Bok choy wilted? Spinach fresh? Swap. Make same Stir Fry Template with Pork/Spinach.


North: Where this comes from

East: What opposes this?

South: Where this leads

West: What’s similar?