{
  "date": "2026-09-07",
  "scope": "Fresh isolated execution of the unchanged Python source; no Web upload/session, printer qualification or coupled FEM test.",
  "webCommit": "1cd12e8b173ba72aa5c95c98a14772b7ee537997",
  "sourceSha256": "c0b4c4e62ce9c2b7d83488f76394ccce2c688febbf948f85279e01acd815358f",
  "python": "3.12.6",
  "dependencies": {
    "numpy": "2.5.3",
    "trimesh": "5.1.0",
    "shapely": "2.1.2",
    "PythonSLM": "0.6.1",
    "matplotlib": "3.11.1",
    "scipy": "1.18.1",
    "pyclipr": "0.1.8",
    "rtree": "1.4.1"
  },
  "fixture": {
    "file": "teaching-block-20x12x4.stl",
    "sha256": "e0c6d20ced238b39609054f6d7c746a4d5c9eb288193f1e0e793cf754027897b",
    "boundsMm": [
      [
        0.0,
        0.0,
        0.0
      ],
      [
        20.0,
        12.0,
        4.0
      ]
    ],
    "origin": "Purpose-created 20×12×4 mm box; no customer geometry."
  },
  "cases": [
    {
      "id": "base",
      "inputs": {
        "1": 3,
        "2": 2,
        "3": 0,
        "4": 0.5,
        "5": 1000,
        "6": 200,
        "7": 800,
        "8": 150,
        "9": 40,
        "10": 1,
        "11": 0.08,
        "16": 0,
        "17": 0
      },
      "success": true,
      "results": {
        "12": {
          "value": 38,
          "bek": -1
        },
        "13": {
          "value": 433.2,
          "bek": -1
        },
        "14": {
          "value": 0.4332,
          "bek": -1
        },
        "15": {
          "value": 240.0,
          "bek": -1
        }
      },
      "messages": [
        {
          "level": 0,
          "code": "MESH_LOADED",
          "text": "Using mesh: teaching-block-20x12x4.stl (Z range: 0.0 to 4.0 mm)"
        },
        {
          "level": 0,
          "code": "SIGMA",
          "text": "Physical sigma: 0.0226 mm (α=3.1999 mm²/s)"
        },
        {
          "level": 0,
          "code": "CALC_OK",
          "text": "Slice at Z=2.0mm: 38 hatch lines, total path 433.2mm, scan time 0.433s"
        }
      ]
    },
    {
      "id": "half-speed",
      "inputs": {
        "1": 3,
        "2": 2,
        "3": 0,
        "4": 0.5,
        "5": 500,
        "6": 200,
        "7": 800,
        "8": 150,
        "9": 40,
        "10": 1,
        "11": 0.08,
        "16": 0,
        "17": 0
      },
      "success": true,
      "results": {
        "12": {
          "value": 38,
          "bek": -1
        },
        "13": {
          "value": 433.2,
          "bek": -1
        },
        "14": {
          "value": 0.8664,
          "bek": -1
        },
        "15": {
          "value": 240.0,
          "bek": -1
        }
      },
      "messages": [
        {
          "level": 0,
          "code": "MESH_LOADED",
          "text": "Using mesh: teaching-block-20x12x4.stl (Z range: 0.0 to 4.0 mm)"
        },
        {
          "level": 0,
          "code": "SIGMA",
          "text": "Physical sigma: 0.0320 mm (α=3.1999 mm²/s)"
        },
        {
          "level": 0,
          "code": "CALC_OK",
          "text": "Slice at Z=2.0mm: 38 hatch lines, total path 433.2mm, scan time 0.866s"
        }
      ]
    },
    {
      "id": "wider-spacing",
      "inputs": {
        "1": 3,
        "2": 2,
        "3": 0,
        "4": 1,
        "5": 1000,
        "6": 200,
        "7": 800,
        "8": 150,
        "9": 40,
        "10": 1,
        "11": 0.08,
        "16": 0,
        "17": 0
      },
      "success": true,
      "results": {
        "12": {
          "value": 19,
          "bek": -1
        },
        "13": {
          "value": 216.6,
          "bek": -1
        },
        "14": {
          "value": 0.2166,
          "bek": -1
        },
        "15": {
          "value": 240.0,
          "bek": -1
        }
      },
      "messages": [
        {
          "level": 0,
          "code": "MESH_LOADED",
          "text": "Using mesh: teaching-block-20x12x4.stl (Z range: 0.0 to 4.0 mm)"
        },
        {
          "level": 0,
          "code": "SIGMA",
          "text": "Physical sigma: 0.0226 mm (α=3.1999 mm²/s)"
        },
        {
          "level": 0,
          "code": "CALC_OK",
          "text": "Slice at Z=2.0mm: 19 hatch lines, total path 216.6mm, scan time 0.217s"
        }
      ]
    },
    {
      "id": "rotated",
      "inputs": {
        "1": 3,
        "2": 2,
        "3": 45,
        "4": 0.5,
        "5": 1000,
        "6": 200,
        "7": 800,
        "8": 150,
        "9": 40,
        "10": 1,
        "11": 0.08,
        "16": 0,
        "17": 0
      },
      "success": true,
      "results": {
        "12": {
          "value": 44,
          "bek": -1
        },
        "13": {
          "value": 442.39,
          "bek": -1
        },
        "14": {
          "value": 0.4424,
          "bek": -1
        },
        "15": {
          "value": 240.0,
          "bek": -1
        }
      },
      "messages": [
        {
          "level": 0,
          "code": "MESH_LOADED",
          "text": "Using mesh: teaching-block-20x12x4.stl (Z range: 0.0 to 4.0 mm)"
        },
        {
          "level": 0,
          "code": "SIGMA",
          "text": "Physical sigma: 0.0226 mm (α=3.1999 mm²/s)"
        },
        {
          "level": 0,
          "code": "CALC_OK",
          "text": "Slice at Z=2.0mm: 44 hatch lines, total path 442.4mm, scan time 0.442s"
        }
      ]
    },
    {
      "id": "empty-slice",
      "inputs": {
        "1": 3,
        "2": 5,
        "3": 0,
        "4": 0.5,
        "5": 1000,
        "6": 200,
        "7": 800,
        "8": 150,
        "9": 40,
        "10": 1,
        "11": 0.08,
        "16": 0,
        "17": 0
      },
      "success": false,
      "results": {},
      "messages": [
        {
          "level": 3,
          "code": "CALC_ERROR",
          "text": "Slice position 5.0mm is outside mesh Z range (0.0 to 4.0 mm)"
        }
      ]
    },
    {
      "id": "missing-mesh",
      "inputs": {
        "1": 3,
        "2": 2,
        "3": 0,
        "4": 0.5,
        "5": 1000,
        "6": 200,
        "7": 800,
        "8": 150,
        "9": 40,
        "10": 1,
        "11": 0.08,
        "16": 0,
        "17": 0
      },
      "success": false,
      "results": {},
      "messages": [
        {
          "level": 3,
          "code": "CALC_ERROR",
          "text": "No mesh file uploaded. Please upload an STL or OBJ file first."
        }
      ]
    }
  ],
  "checks": [
    "240 mm² slice area for every valid case",
    "Halving speed preserves path length and doubles the reported hatch-only time",
    "Wider spacing produces fewer hatch segments",
    "Changing angle preserves slice area",
    "Outside slice and missing mesh are rejected"
  ]
}
