{
  "schemaVersion": 1,
  "date": "2026-10-15",
  "provenance": {
    "creator": "TraceDXF project",
    "license": "CC0-1.0",
    "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
    "source": "Self-authored deterministic geometry and diagram. References are generated by our script, not AutoCAD/PEDIT/JOIN outputs.",
    "softwareImport": "No AutoCAD or LightBurn execution, import or machining performed."
  },
  "verification": {
    "parser": "dxf-parser@1.1.2",
    "method": "Independent reparse of LF ASCII DXF. Coordinates, Z, topology flags and endpoint distances are measured from the reparsed entities. Strict site parser is deliberately not a dependency because its 2D/unit contract is being repaired separately.",
    "precision": "Coordinates are serialized without decimal rounding. 0.04 mm is the authored decimal gap; parsed arithmetic uses JavaScript double precision."
  },
  "files": [
    {
      "file": "touching-lines.dxf",
      "sha256": "4348a440fc7f5bb7d22d01f759c896b9b28d0046b82ae2b6c04dc4d81c5fd2f0",
      "bytes": 337,
      "units": "mm",
      "insunits": 4,
      "entityCount": 3,
      "entityTypes": {
        "LINE": 3
      },
      "entities": [
        {
          "type": "LINE",
          "points": [
            [
              0,
              0,
              0
            ],
            [
              100,
              0,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        },
        {
          "type": "LINE",
          "points": [
            [
              100,
              0,
              0
            ],
            [
              100,
              70,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        },
        {
          "type": "LINE",
          "points": [
            [
              100,
              70,
              0
            ],
            [
              0,
              70,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        }
      ],
      "coordinateBounds3dMm": {
        "minX": 0,
        "minY": 0,
        "minZ": 0,
        "maxX": 100,
        "maxY": 70,
        "maxZ": 0
      },
      "bounds2dMm": {
        "minX": 0,
        "minY": 0,
        "maxX": 100,
        "maxY": 70,
        "width": 100,
        "height": 70
      },
      "bounds2dNote": "All coordinates lie in z=0.",
      "allCoordinatesAtZeroZ": true,
      "internalChainGaps": [
        {
          "afterEntity": 1,
          "beforeEntity": 2,
          "from": [
            100,
            0,
            0
          ],
          "to": [
            100,
            0,
            0
          ],
          "distanceMm": 0
        },
        {
          "afterEntity": 2,
          "beforeEntity": 3,
          "from": [
            100,
            70,
            0
          ],
          "to": [
            100,
            70,
            0
          ],
          "distanceMm": 0
        }
      ],
      "nonzeroInternalChainGapCount": 0,
      "terminalEndpointDistanceMm": 70,
      "terminalDistanceNote": "Distance between first and last stored vertices; for a closed polyline the closing edge spans this distance, so it is not a missing segment.",
      "closedPolylineCount": 0
    },
    {
      "file": "gap-0.04mm-lines.dxf",
      "sha256": "1b51599e731fd0bb21f296e7331a7cb7fa9beb10c4e4284cc9d74b1d4beca9ad",
      "bytes": 340,
      "units": "mm",
      "insunits": 4,
      "entityCount": 3,
      "entityTypes": {
        "LINE": 3
      },
      "entities": [
        {
          "type": "LINE",
          "points": [
            [
              0,
              0,
              0
            ],
            [
              100,
              0,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        },
        {
          "type": "LINE",
          "points": [
            [
              100,
              0.04,
              0
            ],
            [
              100,
              70,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        },
        {
          "type": "LINE",
          "points": [
            [
              100,
              70,
              0
            ],
            [
              0,
              70,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        }
      ],
      "coordinateBounds3dMm": {
        "minX": 0,
        "minY": 0,
        "minZ": 0,
        "maxX": 100,
        "maxY": 70,
        "maxZ": 0
      },
      "bounds2dMm": {
        "minX": 0,
        "minY": 0,
        "maxX": 100,
        "maxY": 70,
        "width": 100,
        "height": 70
      },
      "bounds2dNote": "All coordinates lie in z=0.",
      "allCoordinatesAtZeroZ": true,
      "internalChainGaps": [
        {
          "afterEntity": 1,
          "beforeEntity": 2,
          "from": [
            100,
            0,
            0
          ],
          "to": [
            100,
            0.04,
            0
          ],
          "distanceMm": 0.04
        },
        {
          "afterEntity": 2,
          "beforeEntity": 3,
          "from": [
            100,
            70,
            0
          ],
          "to": [
            100,
            70,
            0
          ],
          "distanceMm": 0
        }
      ],
      "nonzeroInternalChainGapCount": 1,
      "terminalEndpointDistanceMm": 70,
      "terminalDistanceNote": "Distance between first and last stored vertices; for a closed polyline the closing edge spans this distance, so it is not a missing segment.",
      "closedPolylineCount": 0
    },
    {
      "file": "open-polyline-reference.dxf",
      "sha256": "175a14c77f02404a2d262016f60ee197bc766c69125daf3b59c953a9ef283fa6",
      "bytes": 212,
      "units": "mm",
      "insunits": 4,
      "entityCount": 1,
      "entityTypes": {
        "LWPOLYLINE": 1
      },
      "entities": [
        {
          "type": "LWPOLYLINE",
          "points": [
            [
              0,
              0,
              0
            ],
            [
              100,
              0,
              0
            ],
            [
              100,
              70,
              0
            ],
            [
              0,
              70,
              0
            ]
          ],
          "vertexCount": 4,
          "endpointCount": null,
          "closed": false,
          "segmentCount": 3
        }
      ],
      "coordinateBounds3dMm": {
        "minX": 0,
        "minY": 0,
        "minZ": 0,
        "maxX": 100,
        "maxY": 70,
        "maxZ": 0
      },
      "bounds2dMm": {
        "minX": 0,
        "minY": 0,
        "maxX": 100,
        "maxY": 70,
        "width": 100,
        "height": 70
      },
      "bounds2dNote": "All coordinates lie in z=0.",
      "allCoordinatesAtZeroZ": true,
      "internalChainGaps": [],
      "nonzeroInternalChainGapCount": 0,
      "terminalEndpointDistanceMm": 70,
      "terminalDistanceNote": "Distance between first and last stored vertices; for a closed polyline the closing edge spans this distance, so it is not a missing segment.",
      "closedPolylineCount": 0
    },
    {
      "file": "closed-polyline-reference.dxf",
      "sha256": "01a57c27ab3204d0a085ee48a17d1a1021a8c8e268c06d5910519202ac732bc2",
      "bytes": 212,
      "units": "mm",
      "insunits": 4,
      "entityCount": 1,
      "entityTypes": {
        "LWPOLYLINE": 1
      },
      "entities": [
        {
          "type": "LWPOLYLINE",
          "points": [
            [
              0,
              0,
              0
            ],
            [
              100,
              0,
              0
            ],
            [
              100,
              70,
              0
            ],
            [
              0,
              70,
              0
            ]
          ],
          "vertexCount": 4,
          "endpointCount": null,
          "closed": true,
          "segmentCount": 4
        }
      ],
      "coordinateBounds3dMm": {
        "minX": 0,
        "minY": 0,
        "minZ": 0,
        "maxX": 100,
        "maxY": 70,
        "maxZ": 0
      },
      "bounds2dMm": {
        "minX": 0,
        "minY": 0,
        "maxX": 100,
        "maxY": 70,
        "width": 100,
        "height": 70
      },
      "bounds2dNote": "All coordinates lie in z=0.",
      "allCoordinatesAtZeroZ": true,
      "internalChainGaps": [],
      "nonzeroInternalChainGapCount": 0,
      "terminalEndpointDistanceMm": 70,
      "terminalDistanceNote": "Distance between first and last stored vertices; for a closed polyline the closing edge spans this distance, so it is not a missing segment.",
      "closedPolylineCount": 1
    },
    {
      "file": "noncoplanar-lines.dxf",
      "sha256": "34a4e9956b08d98b3cd28b535b4e6124d5238e0a383e2e75108a2f9df11f48a7",
      "bytes": 337,
      "units": "mm",
      "insunits": 4,
      "entityCount": 3,
      "entityTypes": {
        "LINE": 3
      },
      "entities": [
        {
          "type": "LINE",
          "points": [
            [
              0,
              0,
              0
            ],
            [
              100,
              0,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        },
        {
          "type": "LINE",
          "points": [
            [
              100,
              0,
              0
            ],
            [
              100,
              70,
              0
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        },
        {
          "type": "LINE",
          "points": [
            [
              100,
              70,
              0
            ],
            [
              0,
              70,
              5
            ]
          ],
          "vertexCount": null,
          "endpointCount": 2,
          "closed": null,
          "segmentCount": 1
        }
      ],
      "coordinateBounds3dMm": {
        "minX": 0,
        "minY": 0,
        "minZ": 0,
        "maxX": 100,
        "maxY": 70,
        "maxZ": 5
      },
      "bounds2dMm": null,
      "bounds2dNote": "Not applicable as a flat XY engineering contour: nonzero Z is preserved in coordinateBounds3dMm, not discarded.",
      "allCoordinatesAtZeroZ": false,
      "internalChainGaps": [
        {
          "afterEntity": 1,
          "beforeEntity": 2,
          "from": [
            100,
            0,
            0
          ],
          "to": [
            100,
            0,
            0
          ],
          "distanceMm": 0
        },
        {
          "afterEntity": 2,
          "beforeEntity": 3,
          "from": [
            100,
            70,
            0
          ],
          "to": [
            100,
            70,
            0
          ],
          "distanceMm": 0
        }
      ],
      "nonzeroInternalChainGapCount": 0,
      "terminalEndpointDistanceMm": 70.178344238091,
      "terminalDistanceNote": "Distance between first and last stored vertices; for a closed polyline the closing edge spans this distance, so it is not a missing segment.",
      "closedPolylineCount": 0
    }
  ],
  "diagram": {
    "file": "comparison.svg",
    "sha256": "dca61c2fb9b25eee4f957d0b38ee0ffe9f8223f38dd20e7f5bf2a3d1cee44feb",
    "bytes": 1538,
    "captionMapping": {
      "A": "Three separate touching LINE entities, an open chain.",
      "B": "One authored open LWPOLYLINE reference with identical geometry; joining need not close a contour.",
      "C": "One authored closed LWPOLYLINE reference; dashed edge marks the added closing segment, 70 mm long."
    },
    "limitations": "Illustrative geometry only. A/B/C are references, not recorded software before/after results. Colors and dash pattern are explanation styling. No embedded English body copy; article must provide translated caption."
  },
  "limitations": "A known gap does not establish a safe universal fuzz distance or software join success. Open contours can be intentional. Noncoplanar linear objects may produce 3D output in CAD; do not project them silently into XY. No automatic join, close or repair capability is added to TraceDXF."
}
