{
  "schemaVersion": 1,
  "slug": "steak-cook-time-calculator",
  "category": "cooking",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "15d25747d8293bf4074a286aebb67d5ca463543867ce7b4dfdcd6657881bd7b0",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/steak-cook-time-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "t_side = 4d × d_n × m_m; total = 2 × t_side; rest = max(5d, 5)",
    "vars": [
      [
        "d",
        "Thickness (in)"
      ],
      [
        "d_n",
        "Doneness factor"
      ],
      [
        "m_m",
        "Cooking method factor"
      ]
    ],
    "note": "Cooking time is a rough thickness × preference × method heuristic. The temperature field shows selected preference only; it does not predict internal temperature. USDA whole-steak safety guidance is 145°F plus a 3-minute rest."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const base = thickness*4; const D = { rare:0.85, mediumrare:1, medium:1.15, mediumwell:1.3, well:1.45 }; const M = { pan:1.1, grill:1, broiler:0.85 }; const perSide = base*(D[doneness]||1)*(M[method]||1); const T = { rare:120, mediumrare:130, medium:140, mediumwell:150, well:160 }; return { minutesPerSide:perSide, totalMinutes:perSide*2, targetTemp:T[doneness]||130 };",
    "inputs": [
      {
        "name": "thickness",
        "type": "number",
        "default": 1,
        "min": 0.25,
        "max": 3,
        "step": 0.25,
        "slider": true
      },
      {
        "name": "doneness",
        "type": "select",
        "default": "mediumrare",
        "options": [
          {
            "value": "rare"
          },
          {
            "value": "mediumrare"
          },
          {
            "value": "medium"
          },
          {
            "value": "mediumwell"
          },
          {
            "value": "well"
          }
        ]
      },
      {
        "name": "method",
        "type": "select",
        "default": "pan",
        "options": [
          {
            "value": "pan"
          },
          {
            "value": "grill"
          },
          {
            "value": "broiler"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "minutesPerSide",
        "precision": 1,
        "unit": "min"
      },
      {
        "name": "totalMinutes",
        "precision": 1,
        "unit": "min"
      },
      {
        "name": "targetTemp",
        "precision": 0,
        "unit": "°F"
      }
    ],
    "interpret": null
  }
}
