{
  "schema_version": "burr.repair-report.v1",
  "id": "actuator-housing-edge-distance",
  "report_id": "actuator-housing-edge-distance",
  "title": "Actuator Housing Edge-Distance Repair",
  "status": "pass",
  "burr_version": "0.29.0",
  "generated_at": "2026-06-29T09:29:04.900Z",
  "focus_rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
  "loop": "bad CAD -> Burr check -> explain fix order -> fixed CAD passes",
  "first_fix": "Move the loaded M3 holes inward or increase the surrounding housing size.",
  "summary": {
    "repair_status": "repaired",
    "status_transition": "fail_to_pass",
    "repaired_features": 4,
    "before_failures": 4,
    "after_failures": 0,
    "failure_delta": -4,
    "min_before_margin_mm": -2.2,
    "min_after_margin_mm": 1.8,
    "min_margin_delta_mm": 4
  },
  "before": {
    "slug": "bad-actuator-housing-edge-distance",
    "example_slug": "bad-actuator-housing-edge-distance",
    "title": "Bad Actuator Housing Edge Distance",
    "status": "fail",
    "receipt": "bad-actuator-housing-edge-distance/bad-actuator-housing-edge-distance.receipt.json",
    "design_data": "bad-actuator-housing-edge-distance/bad-actuator-housing-edge-distance.design-data.json",
    "artifact_id": "build123d-actuator-housing-repair-bad",
    "artifact_type": "actuator_mount",
    "rulepack_id": "actuator_mount",
    "rulepack_version": "0.14.0",
    "checked_features": [
      "m3_front_left",
      "m3_front_right",
      "m3_rear_left",
      "m3_rear_right"
    ],
    "focus_failures": [
      {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      }
    ]
  },
  "after": {
    "slug": "fixed-actuator-housing",
    "example_slug": "fixed-actuator-housing",
    "title": "Fixed Actuator Housing",
    "status": "pass",
    "receipt": "fixed-actuator-housing/fixed-actuator-housing.receipt.json",
    "design_data": "fixed-actuator-housing/fixed-actuator-housing.design-data.json",
    "artifact_id": "build123d-actuator-housing-repair-fixed",
    "artifact_type": "actuator_mount",
    "rulepack_id": "actuator_mount",
    "rulepack_version": "0.14.0",
    "checked_features": [
      "m3_front_left",
      "m3_front_right",
      "m3_rear_left",
      "m3_rear_right"
    ],
    "focus_failures": [],
    "proof_checks": [
      {
        "feature_id": "m3_front_left",
        "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      },
      {
        "feature_id": "m3_front_right",
        "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      },
      {
        "feature_id": "m3_rear_left",
        "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      },
      {
        "feature_id": "m3_rear_right",
        "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      }
    ]
  },
  "failures": [
    {
      "feature_id": "m3_front_left",
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "reason": "insufficient_edge_distance",
      "message": "Hole edge distance is short by 2.2 mm.",
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "first_fix": "Move the loaded M3 holes inward or increase the surrounding housing size."
    },
    {
      "feature_id": "m3_front_right",
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "reason": "insufficient_edge_distance",
      "message": "Hole edge distance is short by 2.2 mm.",
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "first_fix": "Move the loaded M3 holes inward or increase the surrounding housing size."
    },
    {
      "feature_id": "m3_rear_left",
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "reason": "insufficient_edge_distance",
      "message": "Hole edge distance is short by 2.2 mm.",
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "first_fix": "Move the loaded M3 holes inward or increase the surrounding housing size."
    },
    {
      "feature_id": "m3_rear_right",
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "reason": "insufficient_edge_distance",
      "message": "Hole edge distance is short by 2.2 mm.",
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "first_fix": "Move the loaded M3 holes inward or increase the surrounding housing size."
    }
  ],
  "repair_actions": [
    {
      "feature_id": "m3_front_left",
      "action": "move_feature",
      "parameter": "center_mm",
      "before_value_mm": [
        -28,
        -8,
        9
      ],
      "after_value_mm": [
        -22,
        -12,
        9
      ],
      "suggested_delta_mm": [
        6,
        -4,
        0
      ],
      "source_hint": {
        "source_file_path": "examples/build123d-actuator-housing-repair/bad/design.py",
        "edit_kind": "replace_python_dict_entry",
        "selector": "mount_holes[\"m3_front_left\"]",
        "before_text": "    \"m3_front_left\": (-28.0, -8.0, hole_z),",
        "after_text": "    \"m3_front_left\": (-22.0, -12.0, hole_z),",
        "feature_id": "m3_front_left",
        "parameter": "center_mm",
        "value_path": "features[id=m3_front_left].center_mm",
        "before_value_mm": [
          -28,
          -8,
          9
        ],
        "after_value_mm": [
          -22,
          -12,
          9
        ],
        "confidence": "exact_from_design_data",
        "rationale": "The before and after design data declare features[id=m3_front_left].center_mm; updating that editable value moves the failed clearance-hole center used by this edge-distance check."
      },
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "failure_reason": "insufficient_edge_distance",
      "reason": "Move m3_front_left from [-28, -8, 9] mm to [-22, -12, 9] mm so center-to-edge increases from 8 mm to at least 10.2 mm.",
      "measured_delta_mm": 4,
      "margin_delta_mm": 4,
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "verifies_against_after_feature": {
        "feature_id": "m3_front_left",
        "status": "pass",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      }
    },
    {
      "feature_id": "m3_front_right",
      "action": "move_feature",
      "parameter": "center_mm",
      "before_value_mm": [
        28,
        -8,
        9
      ],
      "after_value_mm": [
        22,
        -12,
        9
      ],
      "suggested_delta_mm": [
        -6,
        -4,
        0
      ],
      "source_hint": {
        "source_file_path": "examples/build123d-actuator-housing-repair/bad/design.py",
        "edit_kind": "replace_python_dict_entry",
        "selector": "mount_holes[\"m3_front_right\"]",
        "before_text": "    \"m3_front_right\": (28.0, -8.0, hole_z),",
        "after_text": "    \"m3_front_right\": (22.0, -12.0, hole_z),",
        "feature_id": "m3_front_right",
        "parameter": "center_mm",
        "value_path": "features[id=m3_front_right].center_mm",
        "before_value_mm": [
          28,
          -8,
          9
        ],
        "after_value_mm": [
          22,
          -12,
          9
        ],
        "confidence": "exact_from_design_data",
        "rationale": "The before and after design data declare features[id=m3_front_right].center_mm; updating that editable value moves the failed clearance-hole center used by this edge-distance check."
      },
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "failure_reason": "insufficient_edge_distance",
      "reason": "Move m3_front_right from [28, -8, 9] mm to [22, -12, 9] mm so center-to-edge increases from 8 mm to at least 10.2 mm.",
      "measured_delta_mm": 4,
      "margin_delta_mm": 4,
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "verifies_against_after_feature": {
        "feature_id": "m3_front_right",
        "status": "pass",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      }
    },
    {
      "feature_id": "m3_rear_left",
      "action": "move_feature",
      "parameter": "center_mm",
      "before_value_mm": [
        -28,
        8,
        9
      ],
      "after_value_mm": [
        -22,
        12,
        9
      ],
      "suggested_delta_mm": [
        6,
        4,
        0
      ],
      "source_hint": {
        "source_file_path": "examples/build123d-actuator-housing-repair/bad/design.py",
        "edit_kind": "replace_python_dict_entry",
        "selector": "mount_holes[\"m3_rear_left\"]",
        "before_text": "    \"m3_rear_left\": (-28.0, 8.0, hole_z),",
        "after_text": "    \"m3_rear_left\": (-22.0, 12.0, hole_z),",
        "feature_id": "m3_rear_left",
        "parameter": "center_mm",
        "value_path": "features[id=m3_rear_left].center_mm",
        "before_value_mm": [
          -28,
          8,
          9
        ],
        "after_value_mm": [
          -22,
          12,
          9
        ],
        "confidence": "exact_from_design_data",
        "rationale": "The before and after design data declare features[id=m3_rear_left].center_mm; updating that editable value moves the failed clearance-hole center used by this edge-distance check."
      },
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "failure_reason": "insufficient_edge_distance",
      "reason": "Move m3_rear_left from [-28, 8, 9] mm to [-22, 12, 9] mm so center-to-edge increases from 8 mm to at least 10.2 mm.",
      "measured_delta_mm": 4,
      "margin_delta_mm": 4,
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "verifies_against_after_feature": {
        "feature_id": "m3_rear_left",
        "status": "pass",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      }
    },
    {
      "feature_id": "m3_rear_right",
      "action": "move_feature",
      "parameter": "center_mm",
      "before_value_mm": [
        28,
        8,
        9
      ],
      "after_value_mm": [
        22,
        12,
        9
      ],
      "suggested_delta_mm": [
        -6,
        4,
        0
      ],
      "source_hint": {
        "source_file_path": "examples/build123d-actuator-housing-repair/bad/design.py",
        "edit_kind": "replace_python_dict_entry",
        "selector": "mount_holes[\"m3_rear_right\"]",
        "before_text": "    \"m3_rear_right\": (28.0, 8.0, hole_z),",
        "after_text": "    \"m3_rear_right\": (22.0, 12.0, hole_z),",
        "feature_id": "m3_rear_right",
        "parameter": "center_mm",
        "value_path": "features[id=m3_rear_right].center_mm",
        "before_value_mm": [
          28,
          8,
          9
        ],
        "after_value_mm": [
          22,
          12,
          9
        ],
        "confidence": "exact_from_design_data",
        "rationale": "The before and after design data declare features[id=m3_rear_right].center_mm; updating that editable value moves the failed clearance-hole center used by this edge-distance check."
      },
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "failure_reason": "insufficient_edge_distance",
      "reason": "Move m3_rear_right from [28, 8, 9] mm to [22, 12, 9] mm so center-to-edge increases from 8 mm to at least 10.2 mm.",
      "measured_delta_mm": 4,
      "margin_delta_mm": 4,
      "measured": {
        "center_to_edge_mm": 8,
        "hole_diameter_mm": 3.4,
        "source": "parts[feature.part].bbox_mm nearest free edge",
        "wall_to_edge_mm": 6.3
      },
      "required": {
        "center_to_edge_diameter_multiple": 3,
        "center_to_edge_mm": 10.2,
        "wall_to_edge_mm": 8.5
      },
      "margin_mm": -2.2,
      "verifies_against_after_feature": {
        "feature_id": "m3_rear_right",
        "status": "pass",
        "reason": "ok",
        "measured": {
          "center_to_edge_mm": 12,
          "hole_diameter_mm": 3.4,
          "source": "parts[feature.part].bbox_mm nearest free edge",
          "wall_to_edge_mm": 10.3
        },
        "required": {
          "center_to_edge_diameter_multiple": 3,
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5
        },
        "margin_mm": 1.8
      }
    },
    {
      "feature_id": "housing",
      "action": "resize_part_envelope",
      "parameter": "bbox_mm.size[1]",
      "before_value_mm": 34,
      "after_value_mm": 48,
      "suggested_delta_mm": 14,
      "source_hint": {
        "source_file_path": "examples/build123d-actuator-housing-repair/bad/design.py",
        "edit_kind": "replace_python_assignment",
        "selector": "housing_width",
        "feature_id": "housing",
        "parameter": "bbox_mm.size[1]",
        "value_path": "parts[id=housing].bbox_mm.size[1]",
        "before_value_mm": 34,
        "after_value_mm": 48,
        "before_text": "housing_width = 34.0",
        "after_text": "housing_width = 48.0",
        "confidence": "exact_from_design_data",
        "rationale": "The before and after design data declare parts[id=housing].bbox_mm; updating housing_width changes the housing envelope needed by the moved mounting holes."
      },
      "rule_id": "actuator_mount:m3_loaded_hole_edge_distance",
      "failure_reason": "supporting_envelope_change",
      "reason": "Resize housing housing_width from 34 mm to 48 mm so the repaired hole centers keep positive edge-distance margin.",
      "verifies_against_after_part": {
        "part_id": "housing",
        "bbox_size_mm": [
          72,
          48,
          18
        ]
      }
    }
  ],
  "feature_results": [
    {
      "feature_id": "m3_front_left",
      "before": {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      "after": {
        "status": "pass",
        "reason": "ok",
        "message": "Hole edge distance passes rule.",
        "measured": {
          "center_to_edge_mm": 12,
          "wall_to_edge_mm": 10.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": 1.8
      },
      "margin_delta_mm": 4,
      "measured_delta_mm": 4,
      "repaired": true
    },
    {
      "feature_id": "m3_front_right",
      "before": {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      "after": {
        "status": "pass",
        "reason": "ok",
        "message": "Hole edge distance passes rule.",
        "measured": {
          "center_to_edge_mm": 12,
          "wall_to_edge_mm": 10.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": 1.8
      },
      "margin_delta_mm": 4,
      "measured_delta_mm": 4,
      "repaired": true
    },
    {
      "feature_id": "m3_rear_left",
      "before": {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      "after": {
        "status": "pass",
        "reason": "ok",
        "message": "Hole edge distance passes rule.",
        "measured": {
          "center_to_edge_mm": 12,
          "wall_to_edge_mm": 10.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": 1.8
      },
      "margin_delta_mm": 4,
      "measured_delta_mm": 4,
      "repaired": true
    },
    {
      "feature_id": "m3_rear_right",
      "before": {
        "status": "fail",
        "reason": "insufficient_edge_distance",
        "message": "Hole edge distance is short by 2.2 mm.",
        "measured": {
          "center_to_edge_mm": 8,
          "wall_to_edge_mm": 6.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": -2.2
      },
      "after": {
        "status": "pass",
        "reason": "ok",
        "message": "Hole edge distance passes rule.",
        "measured": {
          "center_to_edge_mm": 12,
          "wall_to_edge_mm": 10.3,
          "hole_diameter_mm": 3.4
        },
        "required": {
          "center_to_edge_mm": 10.2,
          "wall_to_edge_mm": 8.5,
          "center_to_edge_diameter_multiple": 3
        },
        "margin_mm": 1.8
      },
      "margin_delta_mm": 4,
      "measured_delta_mm": 4,
      "repaired": true
    }
  ]
}
