{
  "schema_version": 1,
  "kind": "registration_xy_coarse_grid_proof",
  "proof_type": "registration_xy_coarse_grid_v1",
  "job_id": "lps_20260515_015718_f841c17c4a3b",
  "created_at": "2026-05-15T18:02:33Z",
  "units": "mm",
  "status": "passed",
  "passed": true,
  "page": {
    "preset": "us_letter",
    "width_mm": 215.9,
    "height_mm": 279.4,
    "origin": "top_left"
  },
  "print": {
    "pdf_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-letter-600dpi.pdf",
    "png_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-letter-600dpi.png",
    "png_width_px": 5100,
    "png_height_px": 6600,
    "png_dpi": 600
  },
  "svg": {
    "alignment_svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-alignment.svg",
    "cut_only_svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-cut-only.svg",
    "width": "215.9mm",
    "height": "279.4mm",
    "viewBox": "0 0 215.9 279.4",
    "registration_group_id": "registration_reference_local",
    "registration_check_group_id": "registration_check_local",
    "cut_group_id": "coarse_grid_cut_paths",
    "metrics": {
      "alignment": {
        "width_attr": "215.9mm",
        "height_attr": "279.4mm",
        "viewbox_attr": "0 0 215.9 279.4",
        "path_count": 30,
        "red_candidate_count": 22,
        "red_path_hash": "3d45386b2e758a366c1463e0446128c161674c00339985cf181924a1571eb354",
        "image_count": 0,
        "foreign_object_count": 0,
        "style_count": 0,
        "transform_count": 0,
        "filled_geometry_count": 0
      },
      "cut_only": {
        "width_attr": "215.9mm",
        "height_attr": "279.4mm",
        "viewbox_attr": "0 0 215.9 279.4",
        "path_count": 22,
        "red_candidate_count": 22,
        "red_path_hash": "3d45386b2e758a366c1463e0446128c161674c00339985cf181924a1571eb354",
        "image_count": 0,
        "foreign_object_count": 0,
        "style_count": 0,
        "transform_count": 0,
        "filled_geometry_count": 0
      },
      "x_candidate_count": 11,
      "y_candidate_count": 11,
      "range_profile": "coarse_wide_v1",
      "red_path_bounds_mm": {
        "min_x_mm": 18.0,
        "min_y_mm": 48.5,
        "max_x_mm": 173.0,
        "max_y_mm": 257.0,
        "width_mm": 155.0,
        "height_mm": 208.5
      },
      "expected_red_path_hash": "3d45386b2e758a366c1463e0446128c161674c00339985cf181924a1571eb354"
    }
  },
  "preview": {
    "path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-preview.webp"
  },
  "scale_prerequisite": {
    "required": true,
    "status": "passed",
    "source": "jobs/lps_20260515_015718_f841c17c4a3b/calibration/calibration-measurements.json",
    "override": false
  },
  "v1_preservation": {
    "proof_type": "registration_coupon_v1",
    "pdf_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/registration-coupon-letter-600dpi.pdf",
    "png_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/registration-coupon-letter-600dpi.png",
    "svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/registration-coupon.svg",
    "preview_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/registration-coupon-preview.webp",
    "validation_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/registration-coupon-validation.json",
    "pdf_sha256": "a0e194f8e9090459b56327d153786ad1a983cef046d71e1128d9bd9951ba3dab",
    "png_sha256": "e8ef290871f9e2708308c83b581a4351925427e88131a68f9d01fd6cc849656c",
    "svg_sha256": "c6ce591d5228b88ca5bb36320303938b59fe7ffe59c1795d222ca7b741703a9d",
    "preview_sha256": "8363c1e3c898bc505e20f0e93442a3999e3fa4bb987a238f815b964d9c2fd4f7",
    "validation_sha256": "f07338fd1435831d54a4e97a73411eefc25d84129b8795215134d1f9d36f2418"
  },
  "local_v2_preservation": {
    "proof_type": "registration_coupon_local_v2",
    "pdf_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/local-v2/registration-coupon-local-v2-letter-600dpi.pdf",
    "png_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/local-v2/registration-coupon-local-v2-letter-600dpi.png",
    "svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/local-v2/registration-coupon-local-v2.svg",
    "preview_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/local-v2/registration-coupon-local-v2-preview.webp",
    "validation_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/local-v2/registration-coupon-local-v2-validation.json",
    "pdf_sha256": "498f666b798540f1e84bb57eedb06487825a296d8178b0570f8d311f895e9054",
    "png_sha256": "8ad4de533a66dccf8cdabb84539c3f3db92d8c4eb8adfcbb4674fc97cf49fdac",
    "svg_sha256": "47a321151f2bdfb9ae7062daff6b31da521e44e92267e76eb9e95b7e99aa08a5",
    "preview_sha256": "a6ddcb283bb0f610a6a431544f6654a588c899c196e5a2e4a7d5e4f74ae992e3",
    "validation_sha256": "85c86f6dbc831d7ab9ef592039a96edf9f9ed117847952540dc6f7751d4c2889"
  },
  "xy_ladder_preservation": {
    "proof_type": "registration_xy_ladder_v1",
    "pdf_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-ladder-v1/registration-xy-ladder-v1-letter-600dpi.pdf",
    "png_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-ladder-v1/registration-xy-ladder-v1-letter-600dpi.png",
    "svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-ladder-v1/registration-xy-ladder-v1.svg",
    "preview_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-ladder-v1/registration-xy-ladder-v1-preview.webp",
    "validation_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-ladder-v1/registration-xy-ladder-v1-validation.json",
    "pdf_sha256": "dbe5bc97030d0b8ee1fac39a8233a94a8da35bc8b8aafc3fbc112aeb85513f68",
    "png_sha256": "3d08c2732bc7f4a111132600cb7cea0cd0949de18142a686ad0ec5ea25dd76e7",
    "svg_sha256": "e26a9a61efbb688226ff135c6a5fb04ea77ad84ffa73a4b96283f3baca367427",
    "preview_sha256": "5c391241c42e8919e41d6abe592033e50cf14841024c63ea962b7985f9059aa1",
    "validation_sha256": "6f111a21b98fc0841a95bc4ae9adac6e5e21e4bece0886f57a5e3382ea960dee"
  },
  "registration_marks": {
    "required": [
      {
        "id": "A",
        "center_mm": [
          67.95,
          104.7
        ]
      },
      {
        "id": "B",
        "center_mm": [
          147.95,
          104.7
        ]
      },
      {
        "id": "C",
        "center_mm": [
          67.95,
          184.7
        ]
      }
    ],
    "check_only": [
      {
        "id": "D",
        "center_mm": [
          147.95,
          184.7
        ]
      }
    ],
    "local_frame_width_mm": 80.0,
    "local_frame_height_mm": 80.0
  },
  "coarse_grid": {
    "range_profile": "coarse_wide_v1",
    "x_candidates_mm": [
      -5.0,
      -4.0,
      -3.0,
      -2.0,
      -1.0,
      0.0,
      1.0,
      2.0,
      3.0,
      4.0,
      5.0
    ],
    "y_candidates_mm": [
      -5.0,
      -4.0,
      -3.0,
      -2.0,
      -1.0,
      0.0,
      1.0,
      2.0,
      3.0,
      4.0,
      5.0
    ],
    "x_items": [
      {
        "axis": "x",
        "label": "-5.00",
        "id": "x-minus-5p00",
        "offset_mm": -5.0,
        "cell_center_x_mm": 28.0,
        "cell_center_y_mm": 54.0,
        "reference_x_mm": 28.0,
        "reference_y0_mm": 48.5,
        "reference_y1_mm": 59.5,
        "cut_x_mm": 23.0,
        "cut_y0_mm": 48.5,
        "cut_y1_mm": 59.5
      },
      {
        "axis": "x",
        "label": "-4.00",
        "id": "x-minus-4p00",
        "offset_mm": -4.0,
        "cell_center_x_mm": 73.0,
        "cell_center_y_mm": 54.0,
        "reference_x_mm": 73.0,
        "reference_y0_mm": 48.5,
        "reference_y1_mm": 59.5,
        "cut_x_mm": 69.0,
        "cut_y0_mm": 48.5,
        "cut_y1_mm": 59.5
      },
      {
        "axis": "x",
        "label": "-3.00",
        "id": "x-minus-3p00",
        "offset_mm": -3.0,
        "cell_center_x_mm": 118.0,
        "cell_center_y_mm": 54.0,
        "reference_x_mm": 118.0,
        "reference_y0_mm": 48.5,
        "reference_y1_mm": 59.5,
        "cut_x_mm": 115.0,
        "cut_y0_mm": 48.5,
        "cut_y1_mm": 59.5
      },
      {
        "axis": "x",
        "label": "-2.00",
        "id": "x-minus-2p00",
        "offset_mm": -2.0,
        "cell_center_x_mm": 163.0,
        "cell_center_y_mm": 54.0,
        "reference_x_mm": 163.0,
        "reference_y0_mm": 48.5,
        "reference_y1_mm": 59.5,
        "cut_x_mm": 161.0,
        "cut_y0_mm": 48.5,
        "cut_y1_mm": 59.5
      },
      {
        "axis": "x",
        "label": "-1.00",
        "id": "x-minus-1p00",
        "offset_mm": -1.0,
        "cell_center_x_mm": 28.0,
        "cell_center_y_mm": 71.0,
        "reference_x_mm": 28.0,
        "reference_y0_mm": 65.5,
        "reference_y1_mm": 76.5,
        "cut_x_mm": 27.0,
        "cut_y0_mm": 65.5,
        "cut_y1_mm": 76.5
      },
      {
        "axis": "x",
        "label": "+0.00",
        "id": "x-plus-0p00",
        "offset_mm": 0.0,
        "cell_center_x_mm": 73.0,
        "cell_center_y_mm": 71.0,
        "reference_x_mm": 73.0,
        "reference_y0_mm": 65.5,
        "reference_y1_mm": 76.5,
        "cut_x_mm": 73.0,
        "cut_y0_mm": 65.5,
        "cut_y1_mm": 76.5
      },
      {
        "axis": "x",
        "label": "+1.00",
        "id": "x-plus-1p00",
        "offset_mm": 1.0,
        "cell_center_x_mm": 118.0,
        "cell_center_y_mm": 71.0,
        "reference_x_mm": 118.0,
        "reference_y0_mm": 65.5,
        "reference_y1_mm": 76.5,
        "cut_x_mm": 119.0,
        "cut_y0_mm": 65.5,
        "cut_y1_mm": 76.5
      },
      {
        "axis": "x",
        "label": "+2.00",
        "id": "x-plus-2p00",
        "offset_mm": 2.0,
        "cell_center_x_mm": 163.0,
        "cell_center_y_mm": 71.0,
        "reference_x_mm": 163.0,
        "reference_y0_mm": 65.5,
        "reference_y1_mm": 76.5,
        "cut_x_mm": 165.0,
        "cut_y0_mm": 65.5,
        "cut_y1_mm": 76.5
      },
      {
        "axis": "x",
        "label": "+3.00",
        "id": "x-plus-3p00",
        "offset_mm": 3.0,
        "cell_center_x_mm": 28.0,
        "cell_center_y_mm": 88.0,
        "reference_x_mm": 28.0,
        "reference_y0_mm": 82.5,
        "reference_y1_mm": 93.5,
        "cut_x_mm": 31.0,
        "cut_y0_mm": 82.5,
        "cut_y1_mm": 93.5
      },
      {
        "axis": "x",
        "label": "+4.00",
        "id": "x-plus-4p00",
        "offset_mm": 4.0,
        "cell_center_x_mm": 73.0,
        "cell_center_y_mm": 88.0,
        "reference_x_mm": 73.0,
        "reference_y0_mm": 82.5,
        "reference_y1_mm": 93.5,
        "cut_x_mm": 77.0,
        "cut_y0_mm": 82.5,
        "cut_y1_mm": 93.5
      },
      {
        "axis": "x",
        "label": "+5.00",
        "id": "x-plus-5p00",
        "offset_mm": 5.0,
        "cell_center_x_mm": 118.0,
        "cell_center_y_mm": 88.0,
        "reference_x_mm": 118.0,
        "reference_y0_mm": 82.5,
        "reference_y1_mm": 93.5,
        "cut_x_mm": 123.0,
        "cut_y0_mm": 82.5,
        "cut_y1_mm": 93.5
      }
    ],
    "y_items": [
      {
        "axis": "y",
        "label": "-5.00",
        "id": "y-minus-5p00",
        "offset_mm": -5.0,
        "cell_center_x_mm": 28.0,
        "cell_center_y_mm": 214.0,
        "reference_y_mm": 214.0,
        "reference_x0_mm": 18.0,
        "reference_x1_mm": 38.0,
        "cut_y_mm": 209.0,
        "cut_x0_mm": 18.0,
        "cut_x1_mm": 38.0
      },
      {
        "axis": "y",
        "label": "-4.00",
        "id": "y-minus-4p00",
        "offset_mm": -4.0,
        "cell_center_x_mm": 73.0,
        "cell_center_y_mm": 214.0,
        "reference_y_mm": 214.0,
        "reference_x0_mm": 63.0,
        "reference_x1_mm": 83.0,
        "cut_y_mm": 210.0,
        "cut_x0_mm": 63.0,
        "cut_x1_mm": 83.0
      },
      {
        "axis": "y",
        "label": "-3.00",
        "id": "y-minus-3p00",
        "offset_mm": -3.0,
        "cell_center_x_mm": 118.0,
        "cell_center_y_mm": 214.0,
        "reference_y_mm": 214.0,
        "reference_x0_mm": 108.0,
        "reference_x1_mm": 128.0,
        "cut_y_mm": 211.0,
        "cut_x0_mm": 108.0,
        "cut_x1_mm": 128.0
      },
      {
        "axis": "y",
        "label": "-2.00",
        "id": "y-minus-2p00",
        "offset_mm": -2.0,
        "cell_center_x_mm": 163.0,
        "cell_center_y_mm": 214.0,
        "reference_y_mm": 214.0,
        "reference_x0_mm": 153.0,
        "reference_x1_mm": 173.0,
        "cut_y_mm": 212.0,
        "cut_x0_mm": 153.0,
        "cut_x1_mm": 173.0
      },
      {
        "axis": "y",
        "label": "-1.00",
        "id": "y-minus-1p00",
        "offset_mm": -1.0,
        "cell_center_x_mm": 28.0,
        "cell_center_y_mm": 233.0,
        "reference_y_mm": 233.0,
        "reference_x0_mm": 18.0,
        "reference_x1_mm": 38.0,
        "cut_y_mm": 232.0,
        "cut_x0_mm": 18.0,
        "cut_x1_mm": 38.0
      },
      {
        "axis": "y",
        "label": "+0.00",
        "id": "y-plus-0p00",
        "offset_mm": 0.0,
        "cell_center_x_mm": 73.0,
        "cell_center_y_mm": 233.0,
        "reference_y_mm": 233.0,
        "reference_x0_mm": 63.0,
        "reference_x1_mm": 83.0,
        "cut_y_mm": 233.0,
        "cut_x0_mm": 63.0,
        "cut_x1_mm": 83.0
      },
      {
        "axis": "y",
        "label": "+1.00",
        "id": "y-plus-1p00",
        "offset_mm": 1.0,
        "cell_center_x_mm": 118.0,
        "cell_center_y_mm": 233.0,
        "reference_y_mm": 233.0,
        "reference_x0_mm": 108.0,
        "reference_x1_mm": 128.0,
        "cut_y_mm": 234.0,
        "cut_x0_mm": 108.0,
        "cut_x1_mm": 128.0
      },
      {
        "axis": "y",
        "label": "+2.00",
        "id": "y-plus-2p00",
        "offset_mm": 2.0,
        "cell_center_x_mm": 163.0,
        "cell_center_y_mm": 233.0,
        "reference_y_mm": 233.0,
        "reference_x0_mm": 153.0,
        "reference_x1_mm": 173.0,
        "cut_y_mm": 235.0,
        "cut_x0_mm": 153.0,
        "cut_x1_mm": 173.0
      },
      {
        "axis": "y",
        "label": "+3.00",
        "id": "y-plus-3p00",
        "offset_mm": 3.0,
        "cell_center_x_mm": 28.0,
        "cell_center_y_mm": 252.0,
        "reference_y_mm": 252.0,
        "reference_x0_mm": 18.0,
        "reference_x1_mm": 38.0,
        "cut_y_mm": 255.0,
        "cut_x0_mm": 18.0,
        "cut_x1_mm": 38.0
      },
      {
        "axis": "y",
        "label": "+4.00",
        "id": "y-plus-4p00",
        "offset_mm": 4.0,
        "cell_center_x_mm": 73.0,
        "cell_center_y_mm": 252.0,
        "reference_y_mm": 252.0,
        "reference_x0_mm": 63.0,
        "reference_x1_mm": 83.0,
        "cut_y_mm": 256.0,
        "cut_x0_mm": 63.0,
        "cut_x1_mm": 83.0
      },
      {
        "axis": "y",
        "label": "+5.00",
        "id": "y-plus-5p00",
        "offset_mm": 5.0,
        "cell_center_x_mm": 118.0,
        "cell_center_y_mm": 252.0,
        "reference_y_mm": 252.0,
        "reference_x0_mm": 108.0,
        "reference_x1_mm": 128.0,
        "cut_y_mm": 257.0,
        "cut_x0_mm": 108.0,
        "cut_x1_mm": 128.0
      }
    ],
    "red_path_bounds_mm": {
      "min_x_mm": 18.0,
      "min_y_mm": 48.5,
      "max_x_mm": 173.0,
      "max_y_mm": 257.0,
      "width_mm": 155.0,
      "height_mm": 208.5
    },
    "red_path_hash": "3d45386b2e758a366c1463e0446128c161674c00339985cf181924a1571eb354",
    "selection_rule": "Pick the X and Y labels where the red cut line lands closest to the printed black reference line.",
    "sign_convention": "candidate_offset_mm = -physical_error_mm; positive X compensates for cuts landing left of print."
  },
  "manual_measurement": {
    "required": true,
    "status": "pending_owner_selection",
    "instructions": "Print the coarse grid, align the alignment SVG marks A/B/C in xTool Creative Space, inspect D, verify cut-only SVG origin parity, cut only red candidate paths, and record the X/Y labels whose cuts land closest to the printed black reference lines."
  },
  "xcs_operation_warning": {
    "required": true,
    "message": "Use the cut-only SVG only after confirming it imports at the same origin as the alignment SVG. If it shifts, cut from the alignment SVG only after deleting or disabling every blue vector."
  },
  "artifacts": {
    "pdf_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-letter-600dpi.pdf",
    "png_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-letter-600dpi.png",
    "alignment_svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-alignment.svg",
    "cut_only_svg_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-cut-only.svg",
    "preview_path": "jobs/lps_20260515_015718_f841c17c4a3b/registration/xy-coarse-grid-v1/registration-xy-coarse-grid-v1-preview.webp"
  },
  "hashes": {
    "pdf_sha256": "d0b3987a52f441d2296025c921f8bd87b7b006940f3f5993dbd39e0781721736",
    "png_sha256": "f182e2f1e2fc2c7cd8fe5a446324312fc9b2072abf040fce49d469414fb80818",
    "alignment_svg_sha256": "252eb2330c7c3332572a9fcae4117f3d26843784cbd079b08f6a105c9ea6a7a6",
    "cut_only_svg_sha256": "8906a8139565ec32fb6e240d7fe7c1e065d6c264853cc69d2f0c57d90ccb5f10",
    "preview_sha256": "0ef0cfa9a3835eb12ede7c2698a9ad5da44b4ba8f8c525a32accd9f479812477"
  },
  "checks": [
    {
      "name": "v1_pdf_still_exists",
      "passed": true,
      "message": "V1 registration PDF is still present.",
      "details": {}
    },
    {
      "name": "v1_svg_still_exists",
      "passed": true,
      "message": "V1 registration SVG is still present.",
      "details": {}
    },
    {
      "name": "v1_pdf_hash_preserved",
      "passed": true,
      "message": "V1 registration PDF hash is unchanged.",
      "details": {}
    },
    {
      "name": "v1_svg_hash_preserved",
      "passed": true,
      "message": "V1 registration SVG hash is unchanged.",
      "details": {}
    },
    {
      "name": "local_v2_pdf_still_exists",
      "passed": true,
      "message": "Local V2 registration PDF is still present.",
      "details": {}
    },
    {
      "name": "local_v2_svg_still_exists",
      "passed": true,
      "message": "Local V2 registration SVG is still present.",
      "details": {}
    },
    {
      "name": "local_v2_pdf_hash_preserved",
      "passed": true,
      "message": "Local V2 registration PDF hash is unchanged.",
      "details": {}
    },
    {
      "name": "local_v2_svg_hash_preserved",
      "passed": true,
      "message": "Local V2 registration SVG hash is unchanged.",
      "details": {}
    },
    {
      "name": "xy_ladder_pdf_still_exists",
      "passed": true,
      "message": "XY ladder PDF is still present.",
      "details": {}
    },
    {
      "name": "xy_ladder_svg_still_exists",
      "passed": true,
      "message": "XY ladder SVG is still present.",
      "details": {}
    },
    {
      "name": "xy_ladder_pdf_hash_preserved",
      "passed": true,
      "message": "XY ladder PDF hash is unchanged.",
      "details": {}
    },
    {
      "name": "xy_ladder_svg_hash_preserved",
      "passed": true,
      "message": "XY ladder SVG hash is unchanged.",
      "details": {}
    },
    {
      "name": "pdf_exists",
      "passed": true,
      "message": "XY coarse grid PDF exists.",
      "details": {}
    },
    {
      "name": "png_exists",
      "passed": true,
      "message": "XY coarse grid PNG exists.",
      "details": {}
    },
    {
      "name": "alignment_svg_exists",
      "passed": true,
      "message": "XY coarse grid alignment SVG exists.",
      "details": {}
    },
    {
      "name": "cut_only_svg_exists",
      "passed": true,
      "message": "XY coarse grid cut-only SVG exists.",
      "details": {}
    },
    {
      "name": "preview_exists",
      "passed": true,
      "message": "XY coarse grid preview exists.",
      "details": {}
    },
    {
      "name": "artifact_hashes_exist",
      "passed": true,
      "message": "All XY coarse grid artifact hashes exist.",
      "details": {}
    },
    {
      "name": "png_dimensions_match",
      "passed": true,
      "message": "PNG is exactly 5100 x 6600 px.",
      "details": {
        "actual": [
          5100,
          6600
        ],
        "expected": [
          5100,
          6600
        ]
      }
    },
    {
      "name": "png_mode_matches",
      "passed": true,
      "message": "PNG is RGB.",
      "details": {
        "actual": "RGB",
        "expected": "RGB"
      }
    },
    {
      "name": "png_dpi_matches",
      "passed": true,
      "message": "PNG DPI metadata is 600 DPI.",
      "details": {
        "actual": [
          599.9988,
          599.9988
        ],
        "expected": [
          600,
          600
        ]
      }
    },
    {
      "name": "pdf_page_size_matches",
      "passed": true,
      "message": "PDF MediaBox is 612 x 792 pt.",
      "details": {}
    },
    {
      "name": "alignment_svg_xml_parses",
      "passed": true,
      "message": "Alignment SVG parses as XML.",
      "details": {
        "error": ""
      }
    },
    {
      "name": "cut_only_svg_xml_parses",
      "passed": true,
      "message": "Cut-only SVG parses as XML.",
      "details": {
        "error": ""
      }
    },
    {
      "name": "alignment_svg_root_dimensions_match",
      "passed": true,
      "message": "alignment SVG root has explicit Letter dimensions in millimeters.",
      "details": {}
    },
    {
      "name": "alignment_svg_viewbox_matches",
      "passed": true,
      "message": "alignment SVG viewBox matches the Letter mm coordinate frame.",
      "details": {}
    },
    {
      "name": "alignment_svg_no_prohibited_content",
      "passed": true,
      "message": "alignment SVG contains no image, foreignObject, or style elements.",
      "details": {}
    },
    {
      "name": "alignment_svg_no_transforms",
      "passed": true,
      "message": "alignment SVG contains no transforms.",
      "details": {}
    },
    {
      "name": "alignment_svg_no_filled_geometry",
      "passed": true,
      "message": "alignment SVG geometry has no fills.",
      "details": {}
    },
    {
      "name": "alignment_svg_has_no_text",
      "passed": true,
      "message": "alignment SVG has no text elements.",
      "details": {}
    },
    {
      "name": "cut_only_svg_root_dimensions_match",
      "passed": true,
      "message": "cut_only SVG root has explicit Letter dimensions in millimeters.",
      "details": {}
    },
    {
      "name": "cut_only_svg_viewbox_matches",
      "passed": true,
      "message": "cut_only SVG viewBox matches the Letter mm coordinate frame.",
      "details": {}
    },
    {
      "name": "cut_only_svg_no_prohibited_content",
      "passed": true,
      "message": "cut_only SVG contains no image, foreignObject, or style elements.",
      "details": {}
    },
    {
      "name": "cut_only_svg_no_transforms",
      "passed": true,
      "message": "cut_only SVG contains no transforms.",
      "details": {}
    },
    {
      "name": "cut_only_svg_no_filled_geometry",
      "passed": true,
      "message": "cut_only SVG geometry has no fills.",
      "details": {}
    },
    {
      "name": "cut_only_svg_has_no_text",
      "passed": true,
      "message": "cut_only SVG has no text elements.",
      "details": {}
    },
    {
      "name": "alignment_registration_reference_group_exists",
      "passed": true,
      "message": "Alignment SVG has blue local A/B/C registration reference group.",
      "details": {}
    },
    {
      "name": "alignment_registration_check_group_exists",
      "passed": true,
      "message": "Alignment SVG has blue local D check group.",
      "details": {}
    },
    {
      "name": "alignment_cut_group_exists",
      "passed": true,
      "message": "Alignment SVG has red coarse grid cut group.",
      "details": {}
    },
    {
      "name": "cut_only_cut_group_exists",
      "passed": true,
      "message": "Cut-only SVG has red coarse grid cut group.",
      "details": {}
    },
    {
      "name": "cut_only_has_no_registration_groups",
      "passed": true,
      "message": "Cut-only SVG contains no blue registration groups.",
      "details": {}
    },
    {
      "name": "alignment_path_count_matches",
      "passed": true,
      "message": "Alignment SVG has local registration paths plus red candidates.",
      "details": {
        "actual": 30,
        "expected": 30
      }
    },
    {
      "name": "cut_only_path_count_matches",
      "passed": true,
      "message": "Cut-only SVG has red candidates only.",
      "details": {
        "actual": 22,
        "expected": 22
      }
    },
    {
      "name": "alignment_red_candidate_count_matches",
      "passed": true,
      "message": "Alignment SVG red candidate count matches the plan.",
      "details": {}
    },
    {
      "name": "cut_only_red_candidate_count_matches",
      "passed": true,
      "message": "Cut-only SVG red candidate count matches the plan.",
      "details": {}
    },
    {
      "name": "alignment_red_path_hash_matches",
      "passed": true,
      "message": "Alignment SVG red path data matches the shared coordinate plan.",
      "details": {}
    },
    {
      "name": "cut_only_red_path_hash_matches",
      "passed": true,
      "message": "Cut-only SVG red path data matches the shared coordinate plan.",
      "details": {}
    },
    {
      "name": "red_path_hash_parity",
      "passed": true,
      "message": "Alignment and cut-only SVG red path data are identical.",
      "details": {}
    },
    {
      "name": "alignment_cut_group_stroke_matches",
      "passed": true,
      "message": "Alignment SVG coarse grid cut paths use red stroke.",
      "details": {}
    },
    {
      "name": "alignment_cut_group_hairline_matches",
      "passed": true,
      "message": "Alignment SVG coarse grid cut paths use hairline stroke.",
      "details": {}
    },
    {
      "name": "alignment_cut_group_has_no_fill",
      "passed": true,
      "message": "Alignment SVG coarse grid cut group has no fill.",
      "details": {}
    },
    {
      "name": "cut_only_cut_group_stroke_matches",
      "passed": true,
      "message": "Cut-only SVG coarse grid cut paths use red stroke.",
      "details": {}
    },
    {
      "name": "cut_only_cut_group_hairline_matches",
      "passed": true,
      "message": "Cut-only SVG coarse grid cut paths use hairline stroke.",
      "details": {}
    },
    {
      "name": "cut_only_cut_group_has_no_fill",
      "passed": true,
      "message": "Cut-only SVG coarse grid cut group has no fill.",
      "details": {}
    },
    {
      "name": "cut_only_contains_only_candidate_paths",
      "passed": true,
      "message": "Cut-only SVG contains no helper, mark, frame, or diagonal paths.",
      "details": {
        "unexpected_path_ids": []
      }
    },
    {
      "name": "red_candidate_ids_match",
      "passed": true,
      "message": "Both SVGs include the exact expected red candidate IDs.",
      "details": {}
    },
    {
      "name": "candidate_range_matches",
      "passed": true,
      "message": "Coarse grid includes -5.00 mm through +5.00 mm.",
      "details": {}
    },
    {
      "name": "candidate_range_includes_zero",
      "passed": true,
      "message": "Coarse grid includes +0.00 mm.",
      "details": {}
    },
    {
      "name": "candidate_offsets_sorted",
      "passed": true,
      "message": "Coarse grid offsets are sorted in ascending order.",
      "details": {}
    },
    {
      "name": "candidate_paths_inside_safe_area",
      "passed": true,
      "message": "All coarse grid candidate cut paths stay inside the printable safe area.",
      "details": {
        "min_x_mm": 18.0,
        "min_y_mm": 48.5,
        "max_x_mm": 173.0,
        "max_y_mm": 257.0,
        "width_mm": 155.0,
        "height_mm": 208.5
      }
    },
    {
      "name": "candidate_count_matches",
      "passed": true,
      "message": "Coarse grid defines 11 X and 11 Y candidates.",
      "details": {}
    },
    {
      "name": "cut_only_has_no_blue_stroke",
      "passed": true,
      "message": "Cut-only SVG does not contain the blue registration stroke.",
      "details": {}
    }
  ],
  "warnings": [
    "Cut-only SVG is safer only after XCS import-origin parity is visually confirmed against the alignment SVG.",
    "If cut-only SVG shifts in XCS, cut from the alignment SVG only after deleting or disabling every blue vector.",
    "Treat selected offsets as provisional until repeated with a fine grid centered on the selected values.",
    "Do not apply coarse-grid compensation to jigsaw exports until the owner confirms the physical result."
  ]
}
