main
Caleb Add the Compute Module 5 run of version 0.4.0: report, evidence images, audit sheets and KiCad copy e47f4f7
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
{
  "at": "2026-11-10T01:58:52Z",
  "belowTarget": [
    "F.Mask opening 0.721",
    "F exposed metal 0.689",
    "F.Cu 0.698",
    "B.Mask opening 0.355",
    "B exposed metal 0.354",
    "B holes 0.194",
    "B.Cu 0.749"
  ],
  "board": "/home/adom/project/CM5_RE/run6/reverse-flow/.fidelity-board.kicad_pcb",
  "boardAreaMm2": 2194.63,
  "categories": {
    "copper": {
      "formula": "100 x the lower IoU of F.Cu and B.Cu, each the lower of its held-out tiles and the second photo. Only bare mask counts: pixels under parts, silk or metal are in neither the numerator nor the denominator, so they cannot raise it. See layers.*.scoredShareOfBoard for how much of the board this covers.",
      "score": 69.8
    },
    "placement": {
      "formula": "100 x the lowest of: F exposed metal IoU, F holes IoU (held-out, second photo), and the share of parts whose library pads sit within 0.25 mm of the pads the photo shows",
      "score": 68.9
    },
    "vias": {
      "blobTestF1": 14.5,
      "notMeasured": "the bottom photo shows no lit domes (one light across the face is not seen), so a blob test for domes measures nothing here; the category stays capped until another check covers it",
      "score": null
    }
  },
  "generatedBy": "check fidelity",
  "inputs": {
    "copper.json": "geometry:fdf35d9462c24060222e8ba6b9a6d5eb301d3e2bc4a59775bc7202f1eb69f8cc",
    "parts.json": "8d0dc46ea6df10d5930dfb06d85f914079a93efa0077d27e0d81492b578bb928",
    "photo-layers.json": "5a2acfe0e28d850704b8faf11bcc52f7f516b0892f588ed7cf6dc6e52101060e"
  },
  "layers": {
    "B exposed metal": {
      "bestShiftMm": {
        "iouThere": 0.354,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "partBodiesMm2": 829.96
      },
      "excludedMm2": 829.96,
      "heldOutTiles": {
        "boardMm2": 23.79,
        "boundaryMedianMm": 0.367,
        "boundaryP95Mm": 3.7,
        "boundarySamples": 19435,
        "iou": 0.354,
        "photoMm2": 54.73,
        "precision": 0.863,
        "recall": 0.375
      },
      "iouTuningTiles": 0.374,
      "perBlob": {
        "blobs": 113,
        "iouMedian": 0.002,
        "iouP10": 0.0,
        "under05": 68
      },
      "scoredMm2": 1364.67,
      "scoredShareOfBoard": 0.622,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.244,
        "iouAtZero": 0.354,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "B holes": {
      "bestShiftMm": {
        "iouThere": 0.223,
        "x": -0.1,
        "y": 0.0
      },
      "excludedBecause": {
        "note": "a hole with a pin and solder in it does not show",
        "partBodiesMm2": 829.96,
        "solderedMetalMm2": 58.97
      },
      "excludedMm2": 888.94,
      "heldOutTiles": {
        "boardMm2": 0.48,
        "boundaryMedianMm": 15.717,
        "boundaryP95Mm": 16.067,
        "boundarySamples": 57,
        "iou": 0.194,
        "photoMm2": 0.13,
        "precision": 0.206,
        "recall": 0.778
      },
      "iouTuningTiles": 0.012,
      "perHole": {
        "centreErrorMedianMm": 0.001,
        "centreErrorP95Mm": 0.001,
        "diameterErrorMedianMm": 0.0,
        "diameterErrorP95Mm": 0.0,
        "drillsWithNoPhotoHole": 8,
        "holesOnPhoto": 1,
        "withADrill": 1,
        "withNoDrill": 0
      },
      "scoredMm2": 1305.7,
      "scoredShareOfBoard": 0.595,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.184,
        "iouAtZero": 0.194,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "B.Cu": {
      "bestShiftMm": {
        "iouThere": 0.749,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "holesMm2": 0.2,
        "metalMm2": 110.37,
        "note": "copper can be read only under bare mask; a margin of 6 px around anything else goes too",
        "partBodiesMm2": 829.96,
        "silkMm2": 4.53
      },
      "excludedMm2": 1286.56,
      "heldOutTiles": {
        "boardMm2": 215.07,
        "boundaryMedianMm": 0.05,
        "boundaryP95Mm": 0.375,
        "boundarySamples": 59543,
        "iou": 0.749,
        "photoMm2": 253.27,
        "precision": 0.932,
        "recall": 0.792
      },
      "iouTuningTiles": 0.75,
      "plotAgainstRead": {
        "iouVisibleOnly": 0.95,
        "iouWholeBoard": 0.757,
        "meaning": "KiCad's plotted copper against the pours and tracks of copper.json drawn directly. The whole-board figure also counts pads and vias, which the read layer does not draw",
        "plotOnlyVisibleMm2": 15.53,
        "readOnlyVisibleMm2": 7.58
      },
      "scoredMm2": 908.07,
      "scoredShareOfBoard": 0.414,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.619,
        "iouAtZero": 0.749,
        "scoresWorse": true,
        "shiftMm": 0.25
      },
      "visibility": {
        "agreementVisibleOnly": 0.749,
        "hiddenBy": {
          "holesMm2": 0.2,
          "marginBesideThemMm2": 341.51,
          "metalMm2": 110.37,
          "partBodiesMm2": 829.96,
          "silkMm2": 4.53
        },
        "visibleMm2": 908.07,
        "visibleShareOfBoard": 0.414
      }
    },
    "B.Mask opening": {
      "bestShiftMm": {
        "iouThere": 0.355,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "partBodiesMm2": 829.96
      },
      "excludedMm2": 829.96,
      "heldOutTiles": {
        "boardMm2": 24.41,
        "boundaryMedianMm": 0.35,
        "boundaryP95Mm": 3.558,
        "boundarySamples": 19431,
        "iou": 0.355,
        "photoMm2": 54.86,
        "precision": 0.851,
        "recall": 0.379
      },
      "iouTuningTiles": 0.368,
      "scoredMm2": 1364.67,
      "scoredShareOfBoard": 0.622,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.244,
        "iouAtZero": 0.355,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "B.SilkS": {
      "bestShiftMm": {
        "iouThere": 0.974,
        "x": 0.0,
        "y": 0.0
      },
      "edgeAgainstLuminance": {
        "meaning": "positive: the photographed edge lies outside the drawn shape",
        "medianAbsMm": 0.025,
        "medianSignedMm": 0.025,
        "p95AbsMm": 0.1,
        "samples": 421
      },
      "excludedBecause": {
        "holesMm2": 0.2,
        "partBodiesMm2": 829.96
      },
      "excludedMm2": 830.16,
      "heldOutTiles": {
        "boardMm2": 2.45,
        "boundaryMedianMm": 0.0,
        "boundaryP95Mm": 0.025,
        "boundarySamples": 3173,
        "iou": 0.974,
        "photoMm2": 2.46,
        "precision": 0.989,
        "recall": 0.984
      },
      "iouTuningTiles": 0.975,
      "scoredMm2": 1364.47,
      "scoredShareOfBoard": 0.622,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.218,
        "iouAtZero": 0.974,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "F exposed metal": {
      "bestShiftMm": {
        "iouThere": 0.689,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "partBodiesMm2": 748.24
      },
      "excludedMm2": 748.24,
      "heldOutTiles": {
        "boardMm2": 77.17,
        "boundaryMedianMm": 0.0,
        "boundaryP95Mm": 5.142,
        "boundarySamples": 29255,
        "iou": 0.689,
        "photoMm2": 101.4,
        "precision": 0.944,
        "recall": 0.718
      },
      "iouTuningTiles": 0.657,
      "perBlob": {
        "blobs": 68,
        "iouMedian": 0.775,
        "iouP10": 0.0,
        "under05": 25
      },
      "scoredMm2": 1446.4,
      "scoredShareOfBoard": 0.659,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.489,
        "iouAtZero": 0.689,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "F holes": {
      "bestShiftMm": {
        "iouThere": 0.944,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "note": "a hole with a pin and solder in it does not show",
        "partBodiesMm2": 748.24,
        "solderedMetalMm2": 114.76
      },
      "excludedMm2": 862.99,
      "heldOutTiles": {
        "boardMm2": 11.93,
        "boundaryMedianMm": 0.025,
        "boundaryP95Mm": 0.108,
        "boundarySamples": 1306,
        "iou": 0.944,
        "photoMm2": 12.09,
        "precision": 0.978,
        "recall": 0.964
      },
      "iouTuningTiles": 0.902,
      "perHole": {
        "centreErrorMedianMm": 0.0,
        "centreErrorP95Mm": 0.001,
        "diameterErrorMedianMm": 0.0,
        "diameterErrorP95Mm": 0.0,
        "drillsWithNoPhotoHole": 1,
        "holesOnPhoto": 8,
        "withADrill": 8,
        "withNoDrill": 0
      },
      "scoredMm2": 1331.64,
      "scoredShareOfBoard": 0.607,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.778,
        "iouAtZero": 0.944,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "F.Cu": {
      "bestShiftMm": {
        "iouThere": 0.698,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "holesMm2": 31.38,
        "metalMm2": 206.71,
        "note": "copper can be read only under bare mask; a margin of 6 px around anything else goes too",
        "partBodiesMm2": 748.24,
        "silkMm2": 47.81
      },
      "excludedMm2": 1279.06,
      "heldOutTiles": {
        "boardMm2": 349.64,
        "boundaryMedianMm": 0.108,
        "boundaryP95Mm": 1.092,
        "boundarySamples": 47451,
        "iou": 0.698,
        "photoMm2": 325.06,
        "precision": 0.793,
        "recall": 0.853
      },
      "iouTuningTiles": 0.665,
      "plotAgainstRead": {
        "iouVisibleOnly": 0.903,
        "iouWholeBoard": 0.852,
        "meaning": "KiCad's plotted copper against the pours and tracks of copper.json drawn directly. The whole-board figure also counts pads and vias, which the read layer does not draw",
        "plotOnlyVisibleMm2": 3.41,
        "readOnlyVisibleMm2": 70.22
      },
      "scoredMm2": 915.57,
      "scoredShareOfBoard": 0.417,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.677,
        "iouAtZero": 0.698,
        "scoresWorse": true,
        "shiftMm": 0.25
      },
      "visibility": {
        "agreementVisibleOnly": 0.698,
        "hiddenBy": {
          "holesMm2": 31.38,
          "marginBesideThemMm2": 244.92,
          "metalMm2": 206.71,
          "partBodiesMm2": 748.24,
          "silkMm2": 47.81
        },
        "visibleMm2": 915.57,
        "visibleShareOfBoard": 0.417
      }
    },
    "F.Mask opening": {
      "bestShiftMm": {
        "iouThere": 0.721,
        "x": 0.0,
        "y": 0.0
      },
      "excludedBecause": {
        "partBodiesMm2": 748.24
      },
      "excludedMm2": 748.24,
      "heldOutTiles": {
        "boardMm2": 89.23,
        "boundaryMedianMm": 0.0,
        "boundaryP95Mm": 5.183,
        "boundarySamples": 28047,
        "iou": 0.721,
        "photoMm2": 113.49,
        "precision": 0.952,
        "recall": 0.748
      },
      "iouTuningTiles": 0.708,
      "scoredMm2": 1446.4,
      "scoredShareOfBoard": 0.659,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.546,
        "iouAtZero": 0.721,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    },
    "F.SilkS": {
      "bestShiftMm": {
        "iouThere": 0.984,
        "x": 0.0,
        "y": 0.0
      },
      "edgeAgainstLuminance": {
        "meaning": "positive: the photographed edge lies outside the drawn shape",
        "medianAbsMm": 0.013,
        "medianSignedMm": 0.013,
        "p95AbsMm": 0.063,
        "samples": 1955
      },
      "excludedBecause": {
        "holesMm2": 31.38,
        "partBodiesMm2": 748.24
      },
      "excludedMm2": 779.62,
      "heldOutTiles": {
        "boardMm2": 22.19,
        "boundaryMedianMm": 0.0,
        "boundaryP95Mm": 0.025,
        "boundarySamples": 17227,
        "iou": 0.984,
        "photoMm2": 22.16,
        "precision": 0.991,
        "recall": 0.992
      },
      "iouTuningTiles": 0.981,
      "scoredMm2": 1415.01,
      "scoredShareOfBoard": 0.645,
      "shiftTest": {
        "iouAtBestOfFourShifts": 0.328,
        "iouAtZero": 0.984,
        "scoresWorse": true,
        "shiftMm": 0.25
      }
    }
  },
  "layersWorst": 19.4,
  "outline": {
    "perPhoto": {
      "bottom.jpg": {
        "bottom": {
          "maxGapMm": 0.129,
          "medianGapMm": 0.126
        },
        "cornerRadiiMm": [
          2.9,
          0.84,
          2.78,
          2.84
        ],
        "left": {
          "maxGapMm": 0.037,
          "medianGapMm": 0.025
        },
        "right": {
          "blocked": true
        },
        "top": {
          "maxGapMm": 0.117,
          "medianGapMm": 0.044
        }
      },
      "top.jpg": {
        "bottom": {
          "maxGapMm": 0.012,
          "medianGapMm": 0.011
        },
        "cornerRadiiMm": [
          2.72,
          2.6,
          2.66,
          0.0
        ],
        "left": {
          "blocked": true
        },
        "right": {
          "maxGapMm": 0.011,
          "medianGapMm": 0.006
        },
        "top": {
          "maxGapMm": 0.037,
          "medianGapMm": 0.022
        }
      }
    },
    "worstMedianGapMm": 0.126
  },
  "outlineOffStatedMm": 0.17796207461141797,
  "pxPerMm": 40.0,
  "samples": {
    "edgeAgainstLuminance": "threshold-free: the nearest steepest edge in the luminance, for bias in where the silk edge was put",
    "heldOut": "tile set B, primary photos",
    "secondPhoto": "tile set B, the other photo of each face, registered through its holes; same camera position and light, so it tests noise and registration, not a choice of threshold",
    "tuning": "tile set A of a 5 mm checkerboard, primary photos: thresholds come from here"
  },
  "scaleCheck": {
    "boardMm": [
      55.0,
      40.0
    ],
    "bottomRegistration": {
      "leaveOneOutMaxMm": 0.099,
      "leaveOneOutRmsMm": 0.04,
      "pairs": 252,
      "quadraticRmsMm": 0.039,
      "through": "vias showing on both faces",
      "translationOnlyMaxMm": 0.116,
      "translationOnlyRmsMm": 0.047
    },
    "edges": {
      "bottom": {
        "bottomInlierShare": 0.9668367346938777,
        "bottomPhotoMm": 39.976,
        "bowMmBottom": 0.029,
        "bowMmTop": -0.032,
        "tiltMradBottom": 0.135,
        "tiltMradTop": 0.032,
        "topInlierShare": 0.7602040816326531,
        "topPhotoMm": 39.861
      },
      "left": {
        "bottomInlierShare": 1.0,
        "bottomPhotoMm": 0.097,
        "bowMmBottom": 0.027,
        "bowMmTop": 0.014,
        "tiltMradBottom": 0.667,
        "tiltMradTop": 3.851,
        "topInlierShare": 0.34558823529411764,
        "topPhotoMm": 0.12
      },
      "right": {
        "bottomInlierShare": 0.4411764705882353,
        "bottomPhotoMm": 55.005,
        "bowMmBottom": -0.033,
        "bowMmTop": -0.017,
        "tiltMradBottom": 0.136,
        "tiltMradTop": -0.713,
        "topInlierShare": 0.6727941176470589,
        "topPhotoMm": 55.014
      },
      "top": {
        "bottomInlierShare": 0.8418367346938775,
        "bottomPhotoMm": 0.069,
        "bowMmBottom": 0.033,
        "bowMmTop": 0.038,
        "tiltMradBottom": 2.162,
        "tiltMradTop": -0.392,
        "topInlierShare": 0.6760204081632653,
        "topPhotoMm": 0.045
      }
    },
    "outlineMm": [
      [
        100.084,
        100.056
      ],
      [
        155.028,
        100.0345
      ],
      [
        154.9996,
        139.8622
      ],
      [
        100.1105,
        139.8605
      ]
    ],
    "pxPerMm": 60.153,
    "rulers": {
      "holes": {
        "x": null,
        "y": null
      },
      "meaning": "ratio 1.001 means the frame draws 0.1% larger than the library pitch",
      "perRuler": [
        {
          "holes": false,
          "name": "J1",
          "pads": 14,
          "x": 1.0019,
          "xBaselineMm": 629.6,
          "y": null,
          "yBaselineMm": 0.0
        },
        {
          "holes": false,
          "name": "J2",
          "pads": 5,
          "x": 0.9942,
          "xBaselineMm": 75.2,
          "y": null,
          "yBaselineMm": 0.0
        }
      ],
      "smallPads": {
        "x": {
          "ratio": 1.00108,
          "rulers": 2,
          "spreadBetweenRulers": 0.00239
        },
        "y": null
      }
    }
  },
  "secondPhotos": {},
  "targetIoU": 0.8,
  "viaLayer": {
    "domesInHeldOutTiles": 399,
    "domesWithAVia": 53,
    "f1": 0.145,
    "note": "domes here are small dark spots found by a plain blob test on the bottom face, not the flow's via detector: an independent floor, not a truth",
    "precision": 0.161,
    "recall": 0.133,
    "viasInHeldOutTiles": 330,
    "viasOnADome": 53,
    "viasOnSilk": 0
  }
}