{
  "measured_on": "2026-09-09",
  "question": "why scale must be checked before repair settings are applied",
  "object": "icosphere at 100.0 mm, exported to STL, with relative coordinate noise 1e-06",
  "fixed_tolerance_mm": 0.1,
  "trimesh_version": "5.1.0",
  "numpy_version": "2.5.2",
  "truth_at_true_size": {
    "vertices": 2562,
    "faces": 5120,
    "boundary_edges": 0,
    "shells": 1,
    "watertight": true,
    "degenerate_faces": 0
  },
  "rows": [
    {
      "vertices": 2562,
      "faces": 5120,
      "boundary_edges": 0,
      "shells": 1,
      "watertight": true,
      "degenerate_faces": 0,
      "case": "true size, 100 mm",
      "cause": "file read with the unit it was authored in",
      "model_longest_edge_mm": 100.000316,
      "tolerance_mm": 0.1,
      "tolerance_as_share_of_model": 0.001,
      "recovers_truth": true
    },
    {
      "vertices": 7,
      "faces": 5120,
      "boundary_edges": 0,
      "shells": 5120,
      "watertight": false,
      "degenerate_faces": 5120,
      "case": "read 1000x too small, 0.1 mm",
      "cause": "metres authored, millimetres assumed",
      "model_longest_edge_mm": 0.1,
      "tolerance_mm": 0.1,
      "tolerance_as_share_of_model": 0.999997,
      "recovers_truth": false
    },
    {
      "vertices": 14581,
      "faces": 5120,
      "boundary_edges": 15358,
      "shells": 5119,
      "watertight": false,
      "degenerate_faces": 0,
      "case": "read 1000x too large, 100 m",
      "cause": "millimetres authored, metres assumed",
      "model_longest_edge_mm": 100000.316495,
      "tolerance_mm": 0.1,
      "tolerance_as_share_of_model": 1e-06,
      "recovers_truth": false
    }
  ],
  "not_measured_here": [
    "what any named repair tool defaults to, which its own documentation states"
  ]
}
