{
  "schemaVersion": "boardport-render-inspection-1",
  "status": "REVIEWED_DISPLAY_SUPPLEMENT_HOLD",
  "generatedAt": "2026-09-21T19:03:14.205904+00:00",
  "sourceBoardSha256": "03d9840e1e3cad30180944ac7fb6432cb1ca87492da3e2937bcf727f80d84c04",
  "sourceOutputManifestSha256": "0e313e1870241bfbe8bb9744d0d9c5a2aaefabc5675265a078985797a1880371",
  "sourcePrefix": "https://boardport.signalandship.com/examples/pressure-module-review/outputs/",
  "tool": {
    "name": "Gerbonara",
    "version": "1.6.3",
    "wheelSha256": "fccf782acdc98e80e3a418b7ed57d35c4f6ac7a8bc5e5d3ddc48bdd870919be2",
    "pngRenderer": "librsvg 2.57.1"
  },
  "commonBoundsMm": [
    [
      -0.5,
      -1.262
    ],
    [
      8.354,
      5.25
    ]
  ],
  "coordinateMethod": "All inputs retain common absolute millimeter coordinates. Gerbonara applies the same global SVG Y-axis display transform to every view; no per-layer offset, scale, rotation or mirror was applied.",
  "maskMeaning": "Mask layers display opening artwork. Negative FilePolarity is retained in source provenance; colored shapes are not a simulation of finished solder resist.",
  "inputs": [
    {
      "file": "review-F_Cu.gtl",
      "sha256": "a396619ac5919a9de903c2fd660adc950e6f488876093cf2cf47ab3a0cbb6ceb",
      "objects": 20,
      "types": {
        "Flash": 8,
        "Line": 12
      }
    },
    {
      "file": "review-B_Cu.gbl",
      "sha256": "9fbe2bb6b67b91db3ef58512d22859fb332d61a11ab3e0ca3b1fd4b108f14711",
      "objects": 4,
      "types": {
        "Flash": 4
      }
    },
    {
      "file": "review-F_Mask.gts",
      "sha256": "afe91727dc6f1c4be963409f3cd5c57bfd54e8d1d31e33fd2e50dd05085affbb",
      "objects": 8,
      "types": {
        "Flash": 8
      }
    },
    {
      "file": "review-B_Mask.gbs",
      "sha256": "4718a1f96ab7b2e67fd28c0fbb6f8cb60cb97a52695f3df8ba71a79e9fa0b064",
      "objects": 4,
      "types": {
        "Flash": 4
      }
    },
    {
      "file": "review-F_Silkscreen.gto",
      "sha256": "bb9355e536c4b275bde94edac186dee6708d67da0c2b129f53f31e8bde5b2d35",
      "objects": 42,
      "types": {
        "Line": 38,
        "Arc": 4
      }
    },
    {
      "file": "review-B_Silkscreen.gbo",
      "sha256": "7d4b40430019986bbab8fbcb698f2ac71e95186071a639d9a98ad0cc61a8fdcd",
      "objects": 0,
      "types": {}
    },
    {
      "file": "review-Edge_Cuts.gm1",
      "sha256": "7ded1cc96218016dca0893e916348e352e4a33def112b79e783c570f2c10fdf2",
      "objects": 4,
      "types": {
        "Line": 4
      }
    },
    {
      "file": "review-PTH.drl",
      "sha256": "df3055fcebeabe00c80bb769abb767bca9b2de4ef6626b899d678e79be7cfed3",
      "objects": 4,
      "types": {
        "Flash": 4
      }
    },
    {
      "file": "review-NPTH.drl",
      "sha256": "351c2ccb976288e208a7473e6ff516822a387c42e1209948135786c45d11314d",
      "objects": 0,
      "types": {}
    }
  ],
  "expected": {
    "pth": {
      "holes": 4,
      "diameterMm": 0.813
    },
    "npth": {
      "holes": 0
    },
    "backSilk": {
      "objects": 0
    },
    "frontSilk": {
      "lines": 38,
      "arcs": 4
    }
  },
  "files": [
    {
      "file": "inspection-sheet.svg",
      "sha256": "b61c3a62aa9d4d20b98e801d3ae52ed703a5017d3c0f4e58011861025c3a84c7",
      "bytes": 43893
    },
    {
      "file": "reproduce-render.py.txt",
      "sha256": "a2d80a6f08582e51c8c410b96a01881f788ec6c03cc8072218a1389ace6cd312",
      "bytes": 8466
    },
    {
      "file": "README.txt",
      "sha256": "195d71ec4a8a6f818488d8cf2921112b8534abac296ce29daa3eb5ed66a509cc",
      "bytes": 3050
    }
  ],
  "contactSheet": {
    "svg": "inspection-sheet.svg",
    "svgSha256": "b61c3a62aa9d4d20b98e801d3ae52ed703a5017d3c0f4e58011861025c3a84c7",
    "panelsReadingOrder": [
      "front-copper-pth",
      "back-copper-pth",
      "front-mask-pth",
      "back-mask-pth",
      "front-silk-outline",
      "back-silk-empty-outline",
      "npth-empty-outline",
      "all-layers",
      "single-pth"
    ]
  },
  "warnings": [
    "outputs/review-PTH.drl:12 \"G90\": G90 header statement found after end of header",
    "outputs/review-NPTH.drl:10 \"G90\": G90 header statement found after end of header"
  ],
  "warningInterpretation": "Both Excellon files place G90 after the header delimiter. Gerbonara warns about placement, then handle_absolute_mode still sets absolute notation. Final units/notation, all four exact coordinates and diameter were independently asserted. Its aperture plating field is unspecified; PTH/NPTH assignment comes from the original explicit FileFunction headers and fixed inventory, not from inferred tool plating.",
  "decision": "HOLD: 18 DRC findings, 5 disabled checks, missing schematic/project/fabricator conditions remain unresolved.",
  "limits": [
    "Visual review is limited to this published example and the displayed geometry; it is not a check of a reader’s own board.",
    "GerbView UI remained unavailable; these are actual local Gerber/Excellon renders through a separately identified renderer, not GerbView screenshots.",
    "The all-layers overview can obscure coincident artwork; separate layer and paired views are required.",
    "Empty NPTH rendering validates an empty file only; it does not demonstrate nonzero NPTH rendering.",
    "This does not prove circuit function, rule compliance, manufacturing acceptance, customer success, or an AI citation."
  ],
  "visualReview": {
    "completed": true,
    "method": "AI-assisted review of the generated nine-panel PNG; independently re-rendered and compared exact SVG/PNG bytes before publication. This is not a native GerbView session.",
    "observations": [
      "Four PTH circles are centered in the corresponding front/back copper and mask openings.",
      "The four outline segments form a closed rectangle in each composite view.",
      "Front silkscreen geometry is present; back silkscreen and NPTH contain no objects.",
      "The all-layer view overlays the same nine inputs; coincident artwork can obscure lower layers."
    ]
  },
  "sourceLicense": "https://boardport.signalandship.com/examples/pressure-module-review/LICENSE.txt",
  "reviewedOn": "2026-09-22",
  "renderReview": {
    "svgChanges": "Group IDs were made unique across the nine embedded panels. No geometry, color, coordinate or viewBox was changed; re-rendered PNG SHA-256 is identical.",
    "reproducibility": "All 17 individual/composite SVG and PNG pairs plus the original sheet pair were reproduced exactly from the same input files in a separate output directory.",
    "parserWarnings": "Two G90 placement warnings are retained below; no additional warnings occurred."
  },
  "documentation": [
    "https://gerbolyze.gitlab.io/gerbonara/",
    "https://pypi.org/project/gerbonara/1.6.3/"
  ],
  "generatorApi": [
    "GerberFile.open(enable_includes=False)",
    "ExcellonFile.open",
    "CamFile.to_svg",
    "LayerStack.to_svg"
  ],
  "generatorScriptSha256": "690c03ec6ca81eb5ccd29ec3b805f7f3d6c1e6f3e57d8cd472eb2591b50f3688",
  "inputCoordinatesMm": [
    [
      1.143,
      1.016
    ],
    [
      1.143,
      2.921
    ],
    [
      6.731,
      1.016
    ],
    [
      6.731,
      2.921
    ]
  ],
  "localPngEvidenceSha256": "417384c02bb5addae95ab376f3b4ddf1ad4394a23330aca2193b80c4f14d6859",
  "publicReproducer": {
    "file": "reproduce-render.py.txt",
    "sha256": "a2d80a6f08582e51c8c410b96a01881f788ec6c03cc8072218a1389ace6cd312",
    "inputRequirements": "Nine exact inputs listed above; separate Gerbonara 1.6.3 environment; no automatic installation/network",
    "output": "New directory with SVG views and exact inspection-sheet.svg; no existing files overwritten",
    "saveAs": "reproduce-render.py"
  }
}
