main
Caleb Version 0.3.0: new copper reader, dome via filter, every layer read from the photos, net evidence, measured confidence;… e874d7d
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487
{
  "passes": [
    {
      "aiThread": "driver-re2",
      "at": "2026-11-03T23:27:54Z",
      "changes": 5,
      "confidence": {
        "blocks": {
          "level": "High",
          "why": "silkscreen labels (VIN, GND, X1-X3, CAN, AUX, PROG, FAN, MOTOR_TEMP, RESET) and the part identities agree with the block topology"
        },
        "connectivity": {
          "level": "Low",
          "why": "only the three phase pours and the XT30 pin were measured on the photos; the MCU pin map, the regulator and transceiver pinouts and every passive's role are inferred"
        },
        "copper": {
          "level": "Medium",
          "why": "five bottom pours fitted to measured gap lines (64 to 91 percent of each outline); two sketched pours and all top-side copper are not traced; via rings could not be paired across faces for 306 of 326 vias"
        },
        "identity": {
          "level": "Medium",
          "why": "DRV8323S, SS210 diodes, R002 shunts, the 100 uH inductor and every connector are read off the photo; the six MOSFETs, the STM32G4 variant, the buck IC, the CAN transceiver and both regulators have unreadable markings"
        },
        "layers": {
          "level": "Low",
          "why": "no inner via was detected, so the layer count rests on the routing results, and the inner planes are inferred from which nets are largest"
        },
        "placement": {
          "level": "High",
          "why": "120 of 137 parts placed by their own pads on the photo (median correction 0.26 mm); the rest by body centre or a pin-1 reading; overlay checked by eye"
        },
        "values": {
          "level": "Medium",
          "why": "resistor codes read where legible (R002, 220, 30B, 241, 391, 621, 59C, 01C, 472, 100); every MLCC value and ten resistor codes are not readable"
        }
      },
      "hashes": {
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "86326950162756cc427b5f65b984c581359c60649c677993e748424fc80b1521",
        "layers.json": "72d8c32480f78239771f1f9d7dd8c0a8366dec26ec286d337c7372ece90771c5",
        "nets.json": "bc213b65e2e07aa2bedbdbd5b5ebd6f410146a9e25641f8290b373b074382d93",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "033ee84509855df456ea668f0294224c0ab12595a3e17d48b6e846d2acf4a77a"
      },
      "n": 1,
      "note": "gate-driver passives corrected to 0805 at centres read on a 120 px/mm crop; L1 turned 90 (terminals left and right); C30 moved to its body; zone clearance written without the raster margin; snaps that end at the search edge rejected; routes re-run on the corrected placement"
    },
    {
      "aiThread": "driver-re2",
      "at": "2026-11-03T23:27:54Z",
      "changes": 0,
      "confidence": {
        "blocks": {
          "level": "High",
          "why": "silkscreen labels (VIN, GND, X1-X3, CAN, AUX, PROG, FAN, MOTOR_TEMP, RESET) and the part identities agree with the block topology"
        },
        "connectivity": {
          "level": "Low",
          "why": "only the three phase pours and the XT30 pin were measured on the photos; the MCU pin map, the regulator and transceiver pinouts and every passive's role are inferred"
        },
        "copper": {
          "level": "Medium",
          "why": "five bottom pours fitted to measured gap lines (64 to 91 percent of each outline); two sketched pours and all top-side copper are not traced; via rings could not be paired across faces for 306 of 326 vias"
        },
        "identity": {
          "level": "Medium",
          "why": "DRV8323S, SS210 diodes, R002 shunts, the 100 uH inductor and every connector are read off the photo; the six MOSFETs, the STM32G4 variant, the buck IC, the CAN transceiver and both regulators have unreadable markings"
        },
        "layers": {
          "level": "Low",
          "why": "no inner via was detected, so the layer count rests on the routing results, and the inner planes are inferred from which nets are largest"
        },
        "placement": {
          "level": "High",
          "why": "120 of 137 parts placed by their own pads on the photo (median correction 0.26 mm); the rest by body centre or a pin-1 reading; overlay checked by eye"
        },
        "values": {
          "level": "Medium",
          "why": "resistor codes read where legible (R002, 220, 30B, 241, 391, 621, 59C, 01C, 472, 100); every MLCC value and ten resistor codes are not readable"
        }
      },
      "hashes": {
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "86326950162756cc427b5f65b984c581359c60649c677993e748424fc80b1521",
        "layers.json": "72d8c32480f78239771f1f9d7dd8c0a8366dec26ec286d337c7372ece90771c5",
        "nets.json": "bc213b65e2e07aa2bedbdbd5b5ebd6f410146a9e25641f8290b373b074382d93",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "033ee84509855df456ea668f0294224c0ab12595a3e17d48b6e846d2acf4a77a"
      },
      "n": 2,
      "note": "re-measured: the two sketched pours (vin-bottom, gnd-bottom-right) remain INFERRED with tests, as recorded; no other disagreement"
    },
    {
      "aiThread": "driver-re2",
      "at": "2026-11-04T07:06:47Z",
      "changes": 1,
      "confidence": {
        "blocks": {
          "level": "High",
          "why": "silkscreen labels (VIN, GND, X1-X3, CAN, AUX, PROG, FAN, MOTOR_TEMP, RESET) and the part identities agree with the block topology"
        },
        "connectivity": {
          "level": "Low",
          "why": "99 pins disagree with the copper they appear to touch and 4 net pairs meet at vias; the ring test does not reliably separate a joined plated pad from an isolated one on these photos. 827 mm2 of pour and 94 mm of track have no net. The MCU pin map, regulator and transceiver pinouts and passive roles are inferred. Routed copper is one possible way to make the connections, not what is inside the board"
        },
        "copper": {
          "level": "Medium",
          "why": "116 pours and 314 tracks traced from the photos on both faces, and checked by eye against them: phase, VIN and ground pours and the via fields follow the board. Known misses: the bulk-capacitor rails at the bottom's upper left are largely missing, the bottom's signal bundles come out mostly as gaps in the pour, not separate tracks, and 637 short track fragments were dropped as misreadings"
        },
        "identity": {
          "level": "Medium",
          "why": "DRV8323S, SS210 diodes, R002 shunts, the 100 uH inductor and every connector are read off the photo; the six MOSFETs, the STM32G4 variant, the buck IC, the CAN transceiver and most small parts rest on package and circuit role"
        },
        "layers": {
          "level": "Medium",
          "why": "6 layers proposed from routing difficulty: crossing of seen copper falls from 327 mm at 4 layers to 24 mm at 6 and does not improve at 8. Layer count has not been seen directly, and 3 inner-via candidates only prove at least 4. No stackup closed every connection at KiCad default rules; 34 stay open at 6 layers, and a tighter-rules experiment left 2"
        },
        "placement": {
          "level": "High",
          "why": "120 of 137 parts placed by their own pads on the photo (median correction 0.26 mm); the rest by body centre or a pin-1 reading; 62 courtyard overlaps and 23 pad-to-pad clearance errors remain in the copy"
        },
        "values": {
          "level": "Medium",
          "why": "resistor codes read where legible (R002, 220, 30B, 241, 391, 621, 59C, 01C, 472, 100); every MLCC value and ten resistor codes are not readable"
        },
        "vias": {
          "level": "Medium",
          "why": "1028 kept from 2681 dome candidates. Grids line up under the parts and pours they stitch, but only 45 are confirmed on both faces because vias tent on the top, and hand-checking was by eye only. Drill and diameter are the rule's, not measured"
        }
      },
      "hashes": {
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "ea32d9c84f44d45fa145ad7f4f49c24c97dd563f84406c6f1bab77183e82a013",
        "layers.json": "124bf5e358f9d55c67eb6c2a7c96f5d47e48fbf70cd5244abea62abc198ae3e7",
        "nets.json": "fc2e4063a68df4f906758a88b6a6ac1dbf790821166ff5f0851881b74b8bd00a",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "033ee84509855df456ea668f0294224c0ab12595a3e17d48b6e846d2acf4a77a"
      },
      "n": 3,
      "note": "Copper rebuilt island by island from the photos; 6-layer candidate built; checked by eye against both photos; the misses are recorded under copper."
    },
    {
      "aiThread": "driver-re2",
      "at": "2026-11-04T07:06:47Z",
      "changes": 0,
      "confidence": {
        "blocks": {
          "level": "High",
          "why": "silkscreen labels (VIN, GND, X1-X3, CAN, AUX, PROG, FAN, MOTOR_TEMP, RESET) and the part identities agree with the block topology"
        },
        "connectivity": {
          "level": "Low",
          "why": "99 pins disagree with the copper they appear to touch and 4 net pairs meet at vias; the ring test does not reliably separate a joined plated pad from an isolated one on these photos. 827 mm2 of pour and 94 mm of track have no net. The MCU pin map, regulator and transceiver pinouts and passive roles are inferred. Routed copper is one possible way to make the connections, not what is inside the board"
        },
        "copper": {
          "level": "Medium",
          "why": "116 pours and 314 tracks traced from the photos on both faces, and checked by eye against them: phase, VIN and ground pours and the via fields follow the board. Known misses: the bulk-capacitor rails at the bottom's upper left are largely missing, the bottom's signal bundles come out mostly as gaps in the pour, not separate tracks, and 637 short track fragments were dropped as misreadings"
        },
        "identity": {
          "level": "Medium",
          "why": "DRV8323S, SS210 diodes, R002 shunts, the 100 uH inductor and every connector are read off the photo; the six MOSFETs, the STM32G4 variant, the buck IC, the CAN transceiver and most small parts rest on package and circuit role"
        },
        "layers": {
          "level": "Medium",
          "why": "6 layers proposed from routing difficulty: crossing of seen copper falls from 327 mm at 4 layers to 24 mm at 6 and does not improve at 8. Layer count has not been seen directly, and 3 inner-via candidates only prove at least 4. No stackup closed every connection at KiCad default rules; 34 stay open at 6 layers, and a tighter-rules experiment left 2"
        },
        "placement": {
          "level": "High",
          "why": "120 of 137 parts placed by their own pads on the photo (median correction 0.26 mm); the rest by body centre or a pin-1 reading; 62 courtyard overlaps and 23 pad-to-pad clearance errors remain in the copy"
        },
        "values": {
          "level": "Medium",
          "why": "resistor codes read where legible (R002, 220, 30B, 241, 391, 621, 59C, 01C, 472, 100); every MLCC value and ten resistor codes are not readable"
        },
        "vias": {
          "level": "Medium",
          "why": "1028 kept from 2681 dome candidates. Grids line up under the parts and pours they stitch, but only 45 are confirmed on both faces because vias tent on the top, and hand-checking was by eye only. Drill and diameter are the rule's, not measured"
        }
      },
      "hashes": {
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "ea32d9c84f44d45fa145ad7f4f49c24c97dd563f84406c6f1bab77183e82a013",
        "layers.json": "124bf5e358f9d55c67eb6c2a7c96f5d47e48fbf70cd5244abea62abc198ae3e7",
        "nets.json": "fc2e4063a68df4f906758a88b6a6ac1dbf790821166ff5f0851881b74b8bd00a",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "033ee84509855df456ea668f0294224c0ab12595a3e17d48b6e846d2acf4a77a"
      },
      "n": 4,
      "note": "Measurements re-run against the delivered files; nothing changed."
    },
    {
      "aiThread": "merge",
      "at": "2026-11-06T00:11:49Z",
      "findings": 0,
      "fullPass": false,
      "hashes": {
        "audits/blocks/population.json": "1352a169ba40037809c228cd4a58f701efdb976ee186433aee605dba5f9b3855",
        "audits/blocks/sample.json": "3c8a1d29370925af9050af93fea1984752c586fe0e243a83b619bad1f30feddb",
        "audits/copper/population.json": "36ba45ddc15e2223e9e605d9a312c75669c0ca754d1d89e5e9fb44f6faa0a4f1",
        "audits/copper/sample.json": "c5c65264b0b507f76555754fc2ff0cce8a1bc39d4aa0231c478bd5c83cd70442",
        "audits/identity/population.json": "75bf2fd1af182089c51258dfb389af6883fa34b5da0d1b26d8829b24d54721ef",
        "audits/identity/sample.json": "99c5146bc8f5e0922180797e284e8bfba10eb548d7c17e2f744357bf3cafb36f",
        "audits/placement/population.json": "9152f8d0ddbc75ffc93f1d8b46766ffa3e5f7c42a8543d87c0d5b6f9cb4fb450",
        "audits/placement/sample.json": "f67995eecfc1f8adbd6860031067c3b0443528e44ab711aa88cd0ca220fc28ab",
        "audits/vias/population.json": "800700985d5d1099c483dfaddb6da796d898c106c93e1dd3e8129dda7dc79a5a",
        "audits/vias/sample.json": "982e5fc1c1645b91debcf62d74ec2dea660b52718b0d727d475b604554a7e9d6",
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "265967901bb29d74b1fb814e6d9f1a39b7eac452af78a123ea58a75f8f486a11",
        "fidelity.json": "19107272de14cf7b013fa5436ab871821a798cf1a489fc4eda052a9396131b2c",
        "layers.json": "7f859c062fc677674ac78c5a48eede6e3e3257dc9704f6d663a740bf36cccf49",
        "nets.json": "b097ed8f10165321e20636ffa4d277e0f21c911371465dc6b233d409de72871b",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "d411aaa3dd032a4dbdf0c829be8b1837d876689f5dd30d3b0da47e4c332f260b"
      },
      "maxPasses": 20,
      "n": 5,
      "note": null,
      "scores": {
        "categories": {
          "blocks": {
            "audit": {
              "detail": "0 of 47 verdicts in sample 3b1df5c27f3a346a; a sample counts only when complete",
              "failed": [],
              "items": 47,
              "sample": "3b1df5c27f3a346a",
              "status": "incomplete",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (incomplete: 0 of 47 verdicts in sample 3b1df5c27f3a346a; a sample counts only when complete): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "104 of 137 parts are in a block tagged SEEN, MEASURED or DATASHEET",
                "name": "parts in a block seen on the board",
                "value": 75.9
              }
            ],
            "heldByAudit": true,
            "limit": "independent audit: no independent evidence (incomplete: 0 of 47 verdicts in sample 3b1df5c27f3a346a; a sample counts only when complete): capped at 40",
            "outside": null,
            "raise": "finish sample 3b1df5c27f3a346a: 0 of 47 verdicts; audits/blocks/sheet.md",
            "score": 40.0
          },
          "connectivity": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "4833 of 5359 mm2 of pour has a net",
                "name": "copper with a net, by area",
                "value": 90.1
              },
              {
                "inputs": "85 of 338 connections (415 pins, 77 nets) are joined by seen copper; 253 routed by the program, not seen; outside-evidence bound 0.0",
                "name": "connections the photos show or outside evidence proves",
                "value": 25.1
              },
              {
                "inputs": "455 of 1048 mm of track has a net",
                "name": "copper with a net, by length",
                "value": 43.3
              },
              {
                "inputs": "7 of 89 joined pins disagree with the copper they touch; via net clashes: 4",
                "name": "pins that agree with their copper",
                "value": 92.1
              },
              {
                "inputs": "441 of 338 missing per KiCad at the proposed stackup",
                "name": "connections KiCad finds closed",
                "value": 0.0
              }
            ],
            "heldByAudit": false,
            "limit": "connections KiCad finds closed: 441 of 338 missing per KiCad at the proposed stackup",
            "outside": "a continuity log per net on the real board, or a real netlist, attached to the pin verdicts with --evidence: photos cannot show what joins inside the board",
            "raise": "close what the copy leaves open",
            "score": 0.0
          },
          "copper": {
            "audit": {
              "detail": "0 of 116 verdicts in sample 5689ec71713feb7e; a sample counts only when complete",
              "failed": [],
              "items": 116,
              "sample": "5689ec71713feb7e",
              "status": "incomplete",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (incomplete: 0 of 116 verdicts in sample 5689ec71713feb7e; a sample counts only when complete): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "top: 2001 mm2 drawn of 2599 mm2 read as islands; bottom: 3559 mm2 drawn of 3543 mm2 read as islands",
                "name": "copper read that reached the copy",
                "value": 77.0
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 80.9 at /categories/copper/score",
                "name": "layers against the photos",
                "value": 80.9
              }
            ],
            "heldByAudit": true,
            "limit": "independent audit: no independent evidence (incomplete: 0 of 116 verdicts in sample 5689ec71713feb7e; a sample counts only when complete): capped at 40",
            "outside": "an X-ray, or a photo of the bare board with the mask stripped, where the photo is dark or a part hides the copper",
            "raise": "finish sample 5689ec71713feb7e: 0 of 116 verdicts; audits/copper/sheet.md",
            "score": 40.0
          },
          "identity": {
            "audit": {
              "detail": "0 of 47 verdicts in sample 04ba581e0674b85f; a sample counts only when complete",
              "failed": [],
              "items": 47,
              "sample": "04ba581e0674b85f",
              "status": "incomplete",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (incomplete: 0 of 47 verdicts in sample 04ba581e0674b85f; a sample counts only when complete): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "132 of 137 parts have an identity tagged SEEN, MEASURED or DATASHEET",
                "name": "identity tagged as seen",
                "value": 96.3
              }
            ],
            "heldByAudit": true,
            "limit": "independent audit: no independent evidence (incomplete: 0 of 47 verdicts in sample 04ba581e0674b85f; a sample counts only when complete): capped at 40",
            "outside": "a bill of materials, or markings read under a microscope for the unmarked parts, attached to the verdicts with --evidence",
            "raise": "finish sample 04ba581e0674b85f: 0 of 47 verdicts; audits/identity/sheet.md",
            "score": 40.0
          },
          "layers": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 30",
                "name": "independent audit",
                "value": 30.0
              },
              {
                "inputs": "photos never show an inner layer: cap 30",
                "name": "photos alone",
                "value": 30.0
              },
              {
                "inputs": "45 of 253 connections stay open at 6 layers",
                "name": "the proposed stackup closes",
                "value": 82.2
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: no independent evidence (none: no sample drawn): capped at 30",
            "outside": "an edge micrograph, a cross-section or an X-ray that shows the copper layers, attached to the layer and plane verdicts with --evidence: photos never show an inner layer",
            "raise": "attach outside evidence with `audit verdict --evidence`",
            "score": 30.0
          },
          "placement": {
            "audit": {
              "detail": "0 of 47 verdicts in sample e2e0df98a782c0ae; a sample counts only when complete",
              "failed": [],
              "items": 47,
              "sample": "e2e0df98a782c0ae",
              "status": "incomplete",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (incomplete: 0 of 47 verdicts in sample e2e0df98a782c0ae; a sample counts only when complete): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "115 of 137 parts have snap.method by pads, body centre or hole centre",
                "name": "parts located by a program measurement",
                "value": 83.9
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 55.6 at /categories/placement/score",
                "name": "layers against the photos",
                "value": 55.6
              }
            ],
            "heldByAudit": true,
            "limit": "independent audit: no independent evidence (incomplete: 0 of 47 verdicts in sample e2e0df98a782c0ae; a sample counts only when complete): capped at 40",
            "outside": null,
            "raise": "finish sample e2e0df98a782c0ae: 0 of 47 verdicts; audits/placement/sheet.md",
            "score": 40.0
          },
          "values": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "47 of 137 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
                "name": "values tagged as seen",
                "value": 34.3
              }
            ],
            "heldByAudit": false,
            "limit": "values tagged as seen: 47 of 137 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
            "outside": "an LCR reading of each unmarked part off the board, or a bill of materials, attached to the verdicts with --evidence",
            "raise": "get values for the 90 parts with no readable value: unmarked ceramics cannot be read from a photo",
            "score": 34.3
          },
          "vias": {
            "audit": {
              "detail": "0 of 96 verdicts in sample 17b98f42f4908eaf; a sample counts only when complete",
              "failed": [],
              "items": 96,
              "sample": "17b98f42f4908eaf",
              "status": "incomplete",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (incomplete: 0 of 96 verdicts in sample 17b98f42f4908eaf; a sample counts only when complete): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "49 of 1329 kept vias sit on a patch more than a quarter pale (min(R,G,B) > 135 in the square reaching 0.35 mm around it, a rule from these photos and an upper bound on false vias); 0 seen on both faces",
                "name": "vias not on pale pixels",
                "value": 96.3
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 69.4 at /categories/vias/score",
                "name": "layers against the photos",
                "value": 69.4
              }
            ],
            "heldByAudit": true,
            "limit": "independent audit: no independent evidence (incomplete: 0 of 96 verdicts in sample 17b98f42f4908eaf; a sample counts only when complete): capped at 40",
            "outside": "an X-ray or a backlit photo of the bare board shows through vias directly, attached with --evidence",
            "raise": "finish sample 17b98f42f4908eaf: 0 of 96 verdicts; audits/vias/sheet.md",
            "score": 40.0
          }
        },
        "fullPass": false,
        "overall": 0.0,
        "overallRule": "the lowest category",
        "target": 90.0
      },
      "target": 90.0,
      "verdict": "CONTINUE"
    },
    {
      "aiThread": "merge",
      "at": "2026-11-06T00:20:25Z",
      "findings": 0,
      "fullPass": true,
      "hashes": {
        "audits/blocks/population.json": "1352a169ba40037809c228cd4a58f701efdb976ee186433aee605dba5f9b3855",
        "audits/blocks/sample.json": "359fdc0c536defffd9e4058884f5b7d7edb66b4300dae330fe760ab278e11669",
        "audits/blocks/verdicts.jsonl": "8ef77d20d04598c67647535d2948f0fecff8e3a8845e82091b74a13b44a8e4ee",
        "audits/copper/population.json": "36ba45ddc15e2223e9e605d9a312c75669c0ca754d1d89e5e9fb44f6faa0a4f1",
        "audits/copper/sample.json": "c5c65264b0b507f76555754fc2ff0cce8a1bc39d4aa0231c478bd5c83cd70442",
        "audits/copper/verdicts.jsonl": "778fdd3fb4f08d1fe9c0ac14fa243d16c61c6c3ed5eb8c115b630d8653cbcd0f",
        "audits/identity/population.json": "75bf2fd1af182089c51258dfb389af6883fa34b5da0d1b26d8829b24d54721ef",
        "audits/identity/sample.json": "99c5146bc8f5e0922180797e284e8bfba10eb548d7c17e2f744357bf3cafb36f",
        "audits/identity/verdicts.jsonl": "e71f2e06ada969fc677453acdc71dfc1b4bfdc44e53caf1f67470654abf37bec",
        "audits/placement/population.json": "9152f8d0ddbc75ffc93f1d8b46766ffa3e5f7c42a8543d87c0d5b6f9cb4fb450",
        "audits/placement/sample.json": "f67995eecfc1f8adbd6860031067c3b0443528e44ab711aa88cd0ca220fc28ab",
        "audits/placement/verdicts.jsonl": "09f6a168775e7fd26c3bfb8dccb0d89139fbf60d41b4e8ae44137c352da0935f",
        "audits/vias/population.json": "800700985d5d1099c483dfaddb6da796d898c106c93e1dd3e8129dda7dc79a5a",
        "audits/vias/sample.json": "982e5fc1c1645b91debcf62d74ec2dea660b52718b0d727d475b604554a7e9d6",
        "audits/vias/verdicts.jsonl": "d7b095207d2f05001d1fad7654fd6761bb3fe9c63f832d35e19c38472af8a585",
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "265967901bb29d74b1fb814e6d9f1a39b7eac452af78a123ea58a75f8f486a11",
        "fidelity.json": "19107272de14cf7b013fa5436ab871821a798cf1a489fc4eda052a9396131b2c",
        "layers.json": "7f859c062fc677674ac78c5a48eede6e3e3257dc9704f6d663a740bf36cccf49",
        "nets.json": "b097ed8f10165321e20636ffa4d277e0f21c911371465dc6b233d409de72871b",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "d411aaa3dd032a4dbdf0c829be8b1837d876689f5dd30d3b0da47e4c332f260b"
      },
      "maxPasses": 20,
      "n": 6,
      "note": null,
      "scores": {
        "categories": {
          "blocks": {
            "audit": {
              "detail": "all 31 of 42 ok from 137 (bound 61.5%, unchanged 100%)",
              "failed": [
                "a002 C31 (cannot_tell)",
                "a007 C45 (cannot_tell)",
                "a010 R31 (cannot_tell)",
                "a013 J2 (cannot_tell)",
                "a021 C52 (cannot_tell)",
                "a022 C34 (cannot_tell)",
                "a028 C42 (cannot_tell)",
                "a030 H6 (cannot_tell)",
                "a032 C32 (cannot_tell)",
                "a037 R21 (wrong)",
                "a040 R22 (cannot_tell)"
              ],
              "items": 47,
              "sample": "8de3533d37c544ce",
              "status": "scored",
              "strata": [
                {
                  "audited": 42,
                  "needForTarget": 28,
                  "ok": 31,
                  "population": 137,
                  "staleVerdicts": 0,
                  "stratum": "all",
                  "unchangedShare": 1.0,
                  "value": 61.5,
                  "wilson95Lower": 0.615
                }
              ],
              "verdicts": 47
            },
            "ceilings": [
              {
                "inputs": "scored: all 31 of 42 ok from 137 (bound 61.5%, unchanged 100%)",
                "name": "independent audit",
                "value": 61.5
              },
              {
                "inputs": "104 of 137 parts are in a block tagged SEEN, MEASURED or DATASHEET",
                "name": "parts in a block seen on the board",
                "value": 75.9
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: all 31 of 42 ok from 137 (bound 61.5%, unchanged 100%)",
            "outside": null,
            "raise": "fix the method behind the failed items (a002 C31 (cannot_tell), a007 C45 (cannot_tell), a010 R31 (cannot_tell), a013 J2 (cannot_tell), a021 C52 (cannot_tell), a022 C34 (cannot_tell)), then redraw",
            "score": 61.5
          },
          "connectivity": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "4833 of 5359 mm2 of pour has a net",
                "name": "copper with a net, by area",
                "value": 90.1
              },
              {
                "inputs": "85 of 338 connections (415 pins, 77 nets) are joined by seen copper; 253 routed by the program, not seen; outside-evidence bound 0.0",
                "name": "connections the photos show or outside evidence proves",
                "value": 25.1
              },
              {
                "inputs": "455 of 1048 mm of track has a net",
                "name": "copper with a net, by length",
                "value": 43.3
              },
              {
                "inputs": "7 of 89 joined pins disagree with the copper they touch; via net clashes: 4",
                "name": "pins that agree with their copper",
                "value": 92.1
              },
              {
                "inputs": "441 of 338 missing per KiCad at the proposed stackup",
                "name": "connections KiCad finds closed",
                "value": 0.0
              }
            ],
            "heldByAudit": false,
            "limit": "connections KiCad finds closed: 441 of 338 missing per KiCad at the proposed stackup",
            "outside": "a continuity log per net on the real board, or a real netlist, attached to the pin verdicts with --evidence: photos cannot show what joins inside the board",
            "raise": "close what the copy leaves open",
            "score": 0.0
          },
          "copper": {
            "audit": {
              "detail": "bare 9 of 52 ok from 1334 (bound 9.5%, unchanged 100%); copper 22 of 53 ok from 5360 (bound 29.3%, unchanged 100%)",
              "failed": [
                "a001 pt:bottom:3:38 (cannot_tell)",
                "a002 pt:top:5:43 (cannot_tell)",
                "a004 pt:top:26:55 (cannot_tell)",
                "a010 pt:bottom:42:33 (cannot_tell)",
                "a018 pt:top:60:30 (cannot_tell)",
                "a022 pt:bottom:40:0 (cannot_tell)",
                "a025 pt:bottom:38:21 (cannot_tell)",
                "a027 pt:bottom:42:32 (cannot_tell)",
                "a028 pt:top:27:56 (cannot_tell)",
                "a032 pt:bottom:34:60 (cannot_tell)",
                "a037 pt:top:51:26 (cannot_tell)",
                "a040 pt:top:11:49 (cannot_tell)",
                "a044 pt:top:68:39 (cannot_tell)",
                "a046 pt:bottom:44:28 (cannot_tell)",
                "a049 pt:top:28:53 (cannot_tell)",
                "a053 pt:top:8:55 (cannot_tell)",
                "a054 pt:bottom:49:36 (cannot_tell)",
                "a058 pt:bottom:25:14 (cannot_tell)",
                "a060 pt:bottom:40:27 (cannot_tell)",
                "a062 pt:bottom:50:37 (cannot_tell)",
                "a065 pt:top:32:55 (cannot_tell)",
                "a066 pt:bottom:50:23 (cannot_tell)",
                "a073 pt:bottom:19:9 (cannot_tell)",
                "a075 pt:top:51:8 (cannot_tell)",
                "a076 pt:top:0:20 (wrong)",
                "a078 pt:top:28:38 (cannot_tell)",
                "a080 pt:bottom:45:56 (cannot_tell)",
                "a082 pt:top:28:11 (cannot_tell)",
                "a083 pt:top:48:27 (cannot_tell)",
                "a084 pt:top:37:33 (cannot_tell)",
                "a089 pt:bottom:18:35 (cannot_tell)",
                "a091 pt:top:8:53 (cannot_tell)",
                "a092 pt:top:28:14 (cannot_tell)",
                "a093 pt:top:54:0 (cannot_tell)",
                "a097 pt:top:53:26 (cannot_tell)",
                "a100 pt:top:36:8 (cannot_tell)",
                "a101 pt:top:2:33 (cannot_tell)",
                "a102 pt:bottom:19:10 (wrong)",
                "a103 pt:bottom:2:28 (cannot_tell)",
                "a104 pt:top:60:31 (cannot_tell)",
                "a106 pt:top:35:11 (cannot_tell)",
                "a107 pt:top:34:33 (cannot_tell)",
                "a109 pt:bottom:39:25 (cannot_tell)",
                "a003 pt:bottom:66:50 (cannot_tell)",
                "a009 pt:bottom:37:27 (cannot_tell)",
                "a012 pt:bottom:39:50 (cannot_tell)",
                "a015 pt:top:53:58 (cannot_tell)",
                "a016 pt:bottom:15:45 (cannot_tell)",
                "a017 pt:bottom:25:57 (cannot_tell)",
                "a019 pt:top:30:41 (cannot_tell)",
                "a021 pt:bottom:57:58 (cannot_tell)",
                "a024 pt:bottom:60:24 (cannot_tell)",
                "a026 pt:bottom:12:50 (cannot_tell)",
                "a033 pt:top:68:13 (cannot_tell)",
                "a035 pt:bottom:55:25 (cannot_tell)",
                "a036 pt:top:49:25 (cannot_tell)",
                "a038 pt:bottom:52:23 (cannot_tell)",
                "a039 pt:bottom:66:23 (cannot_tell)",
                "a041 pt:top:35:38 (cannot_tell)",
                "a047 pt:top:51:58 (cannot_tell)",
                "a048 pt:top:59:45 (cannot_tell)",
                "a051 pt:bottom:54:41 (cannot_tell)",
                "a056 pt:top:19:60 (cannot_tell)",
                "a059 pt:top:43:21 (cannot_tell)",
                "a061 pt:bottom:29:28 (cannot_tell)",
                "a069 pt:bottom:60:29 (cannot_tell)",
                "a074 pt:top:26:19 (cannot_tell)",
                "a094 pt:top:34:39 (cannot_tell)",
                "a098 pt:top:66:28 (cannot_tell)",
                "a105 pt:bottom:35:41 (cannot_tell)",
                "a108 pt:bottom:27:47 (cannot_tell)",
                "a110 pt:bottom:2:47 (cannot_tell)",
                "a115 pt:top:61:46 (cannot_tell)",
                "a116 pt:top:14:50 (cannot_tell)"
              ],
              "items": 116,
              "sample": "5689ec71713feb7e",
              "status": "scored",
              "strata": [
                {
                  "audited": 52,
                  "needForTarget": 34,
                  "ok": 9,
                  "population": 1334,
                  "staleVerdicts": 0,
                  "stratum": "bare",
                  "unchangedShare": 1.0,
                  "value": 9.4,
                  "wilson95Lower": 0.095
                },
                {
                  "audited": 53,
                  "needForTarget": 35,
                  "ok": 22,
                  "population": 5360,
                  "staleVerdicts": 0,
                  "stratum": "copper",
                  "unchangedShare": 1.0,
                  "value": 29.3,
                  "wilson95Lower": 0.293
                }
              ],
              "verdicts": 116
            },
            "ceilings": [
              {
                "inputs": "scored: bare 9 of 52 ok from 1334 (bound 9.5%, unchanged 100%); copper 22 of 53 ok from 5360 (bound 29.3%, unchanged 100%)",
                "name": "independent audit",
                "value": 9.4
              },
              {
                "inputs": "top: 2001 mm2 drawn of 2599 mm2 read as islands; bottom: 3559 mm2 drawn of 3543 mm2 read as islands",
                "name": "copper read that reached the copy",
                "value": 77.0
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 80.9 at /categories/copper/score",
                "name": "layers against the photos",
                "value": 80.9
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: bare 9 of 52 ok from 1334 (bound 9.5%, unchanged 100%); copper 22 of 53 ok from 5360 (bound 29.3%, unchanged 100%)",
            "outside": "an X-ray, or a photo of the bare board with the mask stripped, where the photo is dark or a part hides the copper",
            "raise": "fix the method behind the failed items (a001 pt:bottom:3:38 (cannot_tell), a002 pt:top:5:43 (cannot_tell), a004 pt:top:26:55 (cannot_tell), a010 pt:bottom:42:33 (cannot_tell), a018 pt:top:60:30 (cannot_tell), a022 pt:bottom:40:0 (cannot_tell)), then redraw",
            "score": 9.4
          },
          "identity": {
            "audit": {
              "detail": "all 42 of 42 ok from 137 (bound 94.0%, unchanged 100%)",
              "failed": [],
              "items": 47,
              "sample": "04ba581e0674b85f",
              "status": "scored",
              "strata": [
                {
                  "audited": 42,
                  "needForTarget": 28,
                  "ok": 42,
                  "population": 137,
                  "staleVerdicts": 0,
                  "stratum": "all",
                  "unchangedShare": 1.0,
                  "value": 93.9,
                  "wilson95Lower": 0.94
                }
              ],
              "verdicts": 47
            },
            "ceilings": [
              {
                "inputs": "scored: all 42 of 42 ok from 137 (bound 94.0%, unchanged 100%)",
                "name": "independent audit",
                "value": 93.9
              },
              {
                "inputs": "132 of 137 parts have an identity tagged SEEN, MEASURED or DATASHEET",
                "name": "identity tagged as seen",
                "value": 96.3
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: all 42 of 42 ok from 137 (bound 94.0%, unchanged 100%)",
            "outside": "a bill of materials, or markings read under a microscope for the unmarked parts, attached to the verdicts with --evidence",
            "raise": "a larger sample: no audited item failed",
            "score": 93.9
          },
          "layers": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 30",
                "name": "independent audit",
                "value": 30.0
              },
              {
                "inputs": "photos never show an inner layer: cap 30",
                "name": "photos alone",
                "value": 30.0
              },
              {
                "inputs": "45 of 253 connections stay open at 6 layers",
                "name": "the proposed stackup closes",
                "value": 82.2
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: no independent evidence (none: no sample drawn): capped at 30",
            "outside": "an edge micrograph, a cross-section or an X-ray that shows the copper layers, attached to the layer and plane verdicts with --evidence: photos never show an inner layer",
            "raise": "attach outside evidence with `audit verdict --evidence`",
            "score": 30.0
          },
          "placement": {
            "audit": {
              "detail": "all 40 of 42 ok from 137 (bound 86.6%, unchanged 100%)",
              "failed": [
                "a010 J6 (wrong)",
                "a040 U5 (wrong)"
              ],
              "items": 47,
              "sample": "e2e0df98a782c0ae",
              "status": "scored",
              "strata": [
                {
                  "audited": 42,
                  "needForTarget": 28,
                  "ok": 40,
                  "population": 137,
                  "staleVerdicts": 0,
                  "stratum": "all",
                  "unchangedShare": 1.0,
                  "value": 86.6,
                  "wilson95Lower": 0.866
                }
              ],
              "verdicts": 47
            },
            "ceilings": [
              {
                "inputs": "scored: all 40 of 42 ok from 137 (bound 86.6%, unchanged 100%)",
                "name": "independent audit",
                "value": 86.6
              },
              {
                "inputs": "115 of 137 parts have snap.method by pads, body centre or hole centre",
                "name": "parts located by a program measurement",
                "value": 83.9
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 55.6 at /categories/placement/score",
                "name": "layers against the photos",
                "value": 55.6
              }
            ],
            "heldByAudit": false,
            "limit": "layers against the photos: fidelity.json: lowest of 1 figure(s) is 55.6 at /categories/placement/score",
            "outside": null,
            "raise": "make what the KiCad layers draw agree with the photos at /categories/placement/score",
            "score": 55.6
          },
          "values": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "47 of 137 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
                "name": "values tagged as seen",
                "value": 34.3
              }
            ],
            "heldByAudit": false,
            "limit": "values tagged as seen: 47 of 137 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
            "outside": "an LCR reading of each unmarked part off the board, or a bill of materials, attached to the verdicts with --evidence",
            "raise": "get values for the 90 parts with no readable value: unmarked ceramics cannot be read from a photo",
            "score": 34.3
          },
          "vias": {
            "audit": {
              "detail": "dropped 26 of 35 ok from 69 (bound 63.0%, unchanged 100%); kept 48 of 52 ok from 1329 (bound 82.1%, unchanged 100%)",
              "failed": [
                "a001 dome:bottom:[122.096,104.009] (wrong)",
                "a021 dome:bottom:[102.369,161.235] (wrong)",
                "a027 dome:bottom:[103.048,160.993] (wrong)",
                "a033 dome:bottom:[104.237,159.376] (wrong)",
                "a038 dome:bottom:[113.972,124.212] (cannot_tell)",
                "a052 dome:bottom:[113.566,124.79] (wrong)",
                "a063 dome:bottom:[114.379,123.575] (wrong)",
                "a076 dome:bottom:[144.3,155.275] (wrong)",
                "a089 dome:bottom:[124.75,158.825] (cannot_tell)",
                "a028 via:v1278 (cannot_tell)",
                "a060 via:v828 (wrong)",
                "a062 via:v1191 (cannot_tell)",
                "a092 via:v1022 (wrong)"
              ],
              "items": 96,
              "sample": "17b98f42f4908eaf",
              "status": "scored",
              "strata": [
                {
                  "audited": 35,
                  "needForTarget": 24,
                  "ok": 26,
                  "population": 69,
                  "staleVerdicts": 0,
                  "stratum": "dropped",
                  "unchangedShare": 1.0,
                  "value": 62.9,
                  "wilson95Lower": 0.63
                },
                {
                  "audited": 52,
                  "needForTarget": 34,
                  "ok": 48,
                  "population": 1329,
                  "staleVerdicts": 0,
                  "stratum": "kept",
                  "unchangedShare": 1.0,
                  "value": 82.0,
                  "wilson95Lower": 0.821
                }
              ],
              "verdicts": 96
            },
            "ceilings": [
              {
                "inputs": "scored: dropped 26 of 35 ok from 69 (bound 63.0%, unchanged 100%); kept 48 of 52 ok from 1329 (bound 82.1%, unchanged 100%)",
                "name": "independent audit",
                "value": 62.9
              },
              {
                "inputs": "49 of 1329 kept vias sit on a patch more than a quarter pale (min(R,G,B) > 135 in the square reaching 0.35 mm around it, a rule from these photos and an upper bound on false vias); 0 seen on both faces",
                "name": "vias not on pale pixels",
                "value": 96.3
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 69.4 at /categories/vias/score",
                "name": "layers against the photos",
                "value": 69.4
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: dropped 26 of 35 ok from 69 (bound 63.0%, unchanged 100%); kept 48 of 52 ok from 1329 (bound 82.1%, unchanged 100%)",
            "outside": "an X-ray or a backlit photo of the bare board shows through vias directly, attached with --evidence",
            "raise": "fix the method behind the failed items (a001 dome:bottom:[122.096,104.009] (wrong), a021 dome:bottom:[102.369,161.235] (wrong), a027 dome:bottom:[103.048,160.993] (wrong), a033 dome:bottom:[104.237,159.376] (wrong), a038 dome:bottom:[113.972,124.212] (cannot_tell), a052 dome:bottom:[113.566,124.79] (wrong)), then redraw",
            "score": 62.9
          }
        },
        "fullPass": true,
        "overall": 0.0,
        "overallRule": "the lowest category",
        "target": 90.0
      },
      "target": 90.0,
      "verdict": "CONTINUE"
    },
    {
      "aiThread": "merge",
      "at": "2026-11-06T00:20:28Z",
      "findings": 0,
      "fullPass": true,
      "hashes": {
        "audits/blocks/population.json": "1352a169ba40037809c228cd4a58f701efdb976ee186433aee605dba5f9b3855",
        "audits/blocks/sample.json": "359fdc0c536defffd9e4058884f5b7d7edb66b4300dae330fe760ab278e11669",
        "audits/blocks/verdicts.jsonl": "8ef77d20d04598c67647535d2948f0fecff8e3a8845e82091b74a13b44a8e4ee",
        "audits/copper/population.json": "36ba45ddc15e2223e9e605d9a312c75669c0ca754d1d89e5e9fb44f6faa0a4f1",
        "audits/copper/sample.json": "c5c65264b0b507f76555754fc2ff0cce8a1bc39d4aa0231c478bd5c83cd70442",
        "audits/copper/verdicts.jsonl": "778fdd3fb4f08d1fe9c0ac14fa243d16c61c6c3ed5eb8c115b630d8653cbcd0f",
        "audits/identity/population.json": "75bf2fd1af182089c51258dfb389af6883fa34b5da0d1b26d8829b24d54721ef",
        "audits/identity/sample.json": "99c5146bc8f5e0922180797e284e8bfba10eb548d7c17e2f744357bf3cafb36f",
        "audits/identity/verdicts.jsonl": "e71f2e06ada969fc677453acdc71dfc1b4bfdc44e53caf1f67470654abf37bec",
        "audits/placement/population.json": "9152f8d0ddbc75ffc93f1d8b46766ffa3e5f7c42a8543d87c0d5b6f9cb4fb450",
        "audits/placement/sample.json": "f67995eecfc1f8adbd6860031067c3b0443528e44ab711aa88cd0ca220fc28ab",
        "audits/placement/verdicts.jsonl": "09f6a168775e7fd26c3bfb8dccb0d89139fbf60d41b4e8ae44137c352da0935f",
        "audits/vias/population.json": "800700985d5d1099c483dfaddb6da796d898c106c93e1dd3e8129dda7dc79a5a",
        "audits/vias/sample.json": "982e5fc1c1645b91debcf62d74ec2dea660b52718b0d727d475b604554a7e9d6",
        "audits/vias/verdicts.jsonl": "d7b095207d2f05001d1fad7654fd6761bb3fe9c63f832d35e19c38472af8a585",
        "blocks.json": "ef3a018b04fd2e24a9bbeb1f9c437146bca39af0b80da8f60f78d88517cd54a7",
        "copper.json": "265967901bb29d74b1fb814e6d9f1a39b7eac452af78a123ea58a75f8f486a11",
        "fidelity.json": "19107272de14cf7b013fa5436ab871821a798cf1a489fc4eda052a9396131b2c",
        "layers.json": "7f859c062fc677674ac78c5a48eede6e3e3257dc9704f6d663a740bf36cccf49",
        "nets.json": "b097ed8f10165321e20636ffa4d277e0f21c911371465dc6b233d409de72871b",
        "parts.json": "4d332847fa5eb00103bb53d9a776f191920a1ac5d604680ef76ec3a2cb4b2bf7",
        "prep.json": "336a6a45b984593dfe40ca488a9ba478bf9d932e8b1aaf421c281c4df712ec08",
        "scale.json": "d411aaa3dd032a4dbdf0c829be8b1837d876689f5dd30d3b0da47e4c332f260b"
      },
      "maxPasses": 20,
      "n": 7,
      "note": null,
      "scores": {
        "categories": {
          "blocks": {
            "audit": {
              "detail": "all 31 of 42 ok from 137 (bound 61.5%, unchanged 100%)",
              "failed": [
                "a002 C31 (cannot_tell)",
                "a007 C45 (cannot_tell)",
                "a010 R31 (cannot_tell)",
                "a013 J2 (cannot_tell)",
                "a021 C52 (cannot_tell)",
                "a022 C34 (cannot_tell)",
                "a028 C42 (cannot_tell)",
                "a030 H6 (cannot_tell)",
                "a032 C32 (cannot_tell)",
                "a037 R21 (wrong)",
                "a040 R22 (cannot_tell)"
              ],
              "items": 47,
              "sample": "8de3533d37c544ce",
              "status": "scored",
              "strata": [
                {
                  "audited": 42,
                  "needForTarget": 28,
                  "ok": 31,
                  "population": 137,
                  "staleVerdicts": 0,
                  "stratum": "all",
                  "unchangedShare": 1.0,
                  "value": 61.5,
                  "wilson95Lower": 0.615
                }
              ],
              "verdicts": 47
            },
            "ceilings": [
              {
                "inputs": "scored: all 31 of 42 ok from 137 (bound 61.5%, unchanged 100%)",
                "name": "independent audit",
                "value": 61.5
              },
              {
                "inputs": "104 of 137 parts are in a block tagged SEEN, MEASURED or DATASHEET",
                "name": "parts in a block seen on the board",
                "value": 75.9
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: all 31 of 42 ok from 137 (bound 61.5%, unchanged 100%)",
            "outside": null,
            "raise": "fix the method behind the failed items (a002 C31 (cannot_tell), a007 C45 (cannot_tell), a010 R31 (cannot_tell), a013 J2 (cannot_tell), a021 C52 (cannot_tell), a022 C34 (cannot_tell)), then redraw",
            "score": 61.5
          },
          "connectivity": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "4833 of 5359 mm2 of pour has a net",
                "name": "copper with a net, by area",
                "value": 90.1
              },
              {
                "inputs": "85 of 338 connections (415 pins, 77 nets) are joined by seen copper; 253 routed by the program, not seen; outside-evidence bound 0.0",
                "name": "connections the photos show or outside evidence proves",
                "value": 25.1
              },
              {
                "inputs": "455 of 1048 mm of track has a net",
                "name": "copper with a net, by length",
                "value": 43.3
              },
              {
                "inputs": "7 of 89 joined pins disagree with the copper they touch; via net clashes: 4",
                "name": "pins that agree with their copper",
                "value": 92.1
              },
              {
                "inputs": "441 of 338 missing per KiCad at the proposed stackup",
                "name": "connections KiCad finds closed",
                "value": 0.0
              }
            ],
            "heldByAudit": false,
            "limit": "connections KiCad finds closed: 441 of 338 missing per KiCad at the proposed stackup",
            "outside": "a continuity log per net on the real board, or a real netlist, attached to the pin verdicts with --evidence: photos cannot show what joins inside the board",
            "raise": "close what the copy leaves open",
            "score": 0.0
          },
          "copper": {
            "audit": {
              "detail": "bare 9 of 52 ok from 1334 (bound 9.5%, unchanged 100%); copper 22 of 53 ok from 5360 (bound 29.3%, unchanged 100%)",
              "failed": [
                "a001 pt:bottom:3:38 (cannot_tell)",
                "a002 pt:top:5:43 (cannot_tell)",
                "a004 pt:top:26:55 (cannot_tell)",
                "a010 pt:bottom:42:33 (cannot_tell)",
                "a018 pt:top:60:30 (cannot_tell)",
                "a022 pt:bottom:40:0 (cannot_tell)",
                "a025 pt:bottom:38:21 (cannot_tell)",
                "a027 pt:bottom:42:32 (cannot_tell)",
                "a028 pt:top:27:56 (cannot_tell)",
                "a032 pt:bottom:34:60 (cannot_tell)",
                "a037 pt:top:51:26 (cannot_tell)",
                "a040 pt:top:11:49 (cannot_tell)",
                "a044 pt:top:68:39 (cannot_tell)",
                "a046 pt:bottom:44:28 (cannot_tell)",
                "a049 pt:top:28:53 (cannot_tell)",
                "a053 pt:top:8:55 (cannot_tell)",
                "a054 pt:bottom:49:36 (cannot_tell)",
                "a058 pt:bottom:25:14 (cannot_tell)",
                "a060 pt:bottom:40:27 (cannot_tell)",
                "a062 pt:bottom:50:37 (cannot_tell)",
                "a065 pt:top:32:55 (cannot_tell)",
                "a066 pt:bottom:50:23 (cannot_tell)",
                "a073 pt:bottom:19:9 (cannot_tell)",
                "a075 pt:top:51:8 (cannot_tell)",
                "a076 pt:top:0:20 (wrong)",
                "a078 pt:top:28:38 (cannot_tell)",
                "a080 pt:bottom:45:56 (cannot_tell)",
                "a082 pt:top:28:11 (cannot_tell)",
                "a083 pt:top:48:27 (cannot_tell)",
                "a084 pt:top:37:33 (cannot_tell)",
                "a089 pt:bottom:18:35 (cannot_tell)",
                "a091 pt:top:8:53 (cannot_tell)",
                "a092 pt:top:28:14 (cannot_tell)",
                "a093 pt:top:54:0 (cannot_tell)",
                "a097 pt:top:53:26 (cannot_tell)",
                "a100 pt:top:36:8 (cannot_tell)",
                "a101 pt:top:2:33 (cannot_tell)",
                "a102 pt:bottom:19:10 (wrong)",
                "a103 pt:bottom:2:28 (cannot_tell)",
                "a104 pt:top:60:31 (cannot_tell)",
                "a106 pt:top:35:11 (cannot_tell)",
                "a107 pt:top:34:33 (cannot_tell)",
                "a109 pt:bottom:39:25 (cannot_tell)",
                "a003 pt:bottom:66:50 (cannot_tell)",
                "a009 pt:bottom:37:27 (cannot_tell)",
                "a012 pt:bottom:39:50 (cannot_tell)",
                "a015 pt:top:53:58 (cannot_tell)",
                "a016 pt:bottom:15:45 (cannot_tell)",
                "a017 pt:bottom:25:57 (cannot_tell)",
                "a019 pt:top:30:41 (cannot_tell)",
                "a021 pt:bottom:57:58 (cannot_tell)",
                "a024 pt:bottom:60:24 (cannot_tell)",
                "a026 pt:bottom:12:50 (cannot_tell)",
                "a033 pt:top:68:13 (cannot_tell)",
                "a035 pt:bottom:55:25 (cannot_tell)",
                "a036 pt:top:49:25 (cannot_tell)",
                "a038 pt:bottom:52:23 (cannot_tell)",
                "a039 pt:bottom:66:23 (cannot_tell)",
                "a041 pt:top:35:38 (cannot_tell)",
                "a047 pt:top:51:58 (cannot_tell)",
                "a048 pt:top:59:45 (cannot_tell)",
                "a051 pt:bottom:54:41 (cannot_tell)",
                "a056 pt:top:19:60 (cannot_tell)",
                "a059 pt:top:43:21 (cannot_tell)",
                "a061 pt:bottom:29:28 (cannot_tell)",
                "a069 pt:bottom:60:29 (cannot_tell)",
                "a074 pt:top:26:19 (cannot_tell)",
                "a094 pt:top:34:39 (cannot_tell)",
                "a098 pt:top:66:28 (cannot_tell)",
                "a105 pt:bottom:35:41 (cannot_tell)",
                "a108 pt:bottom:27:47 (cannot_tell)",
                "a110 pt:bottom:2:47 (cannot_tell)",
                "a115 pt:top:61:46 (cannot_tell)",
                "a116 pt:top:14:50 (cannot_tell)"
              ],
              "items": 116,
              "sample": "5689ec71713feb7e",
              "status": "scored",
              "strata": [
                {
                  "audited": 52,
                  "needForTarget": 34,
                  "ok": 9,
                  "population": 1334,
                  "staleVerdicts": 0,
                  "stratum": "bare",
                  "unchangedShare": 1.0,
                  "value": 9.4,
                  "wilson95Lower": 0.095
                },
                {
                  "audited": 53,
                  "needForTarget": 35,
                  "ok": 22,
                  "population": 5360,
                  "staleVerdicts": 0,
                  "stratum": "copper",
                  "unchangedShare": 1.0,
                  "value": 29.3,
                  "wilson95Lower": 0.293
                }
              ],
              "verdicts": 116
            },
            "ceilings": [
              {
                "inputs": "scored: bare 9 of 52 ok from 1334 (bound 9.5%, unchanged 100%); copper 22 of 53 ok from 5360 (bound 29.3%, unchanged 100%)",
                "name": "independent audit",
                "value": 9.4
              },
              {
                "inputs": "top: 2001 mm2 drawn of 2599 mm2 read as islands; bottom: 3559 mm2 drawn of 3543 mm2 read as islands",
                "name": "copper read that reached the copy",
                "value": 77.0
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 80.9 at /categories/copper/score",
                "name": "layers against the photos",
                "value": 80.9
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: bare 9 of 52 ok from 1334 (bound 9.5%, unchanged 100%); copper 22 of 53 ok from 5360 (bound 29.3%, unchanged 100%)",
            "outside": "an X-ray, or a photo of the bare board with the mask stripped, where the photo is dark or a part hides the copper",
            "raise": "fix the method behind the failed items (a001 pt:bottom:3:38 (cannot_tell), a002 pt:top:5:43 (cannot_tell), a004 pt:top:26:55 (cannot_tell), a010 pt:bottom:42:33 (cannot_tell), a018 pt:top:60:30 (cannot_tell), a022 pt:bottom:40:0 (cannot_tell)), then redraw",
            "score": 9.4
          },
          "identity": {
            "audit": {
              "detail": "all 42 of 42 ok from 137 (bound 94.0%, unchanged 100%)",
              "failed": [],
              "items": 47,
              "sample": "04ba581e0674b85f",
              "status": "scored",
              "strata": [
                {
                  "audited": 42,
                  "needForTarget": 28,
                  "ok": 42,
                  "population": 137,
                  "staleVerdicts": 0,
                  "stratum": "all",
                  "unchangedShare": 1.0,
                  "value": 93.9,
                  "wilson95Lower": 0.94
                }
              ],
              "verdicts": 47
            },
            "ceilings": [
              {
                "inputs": "scored: all 42 of 42 ok from 137 (bound 94.0%, unchanged 100%)",
                "name": "independent audit",
                "value": 93.9
              },
              {
                "inputs": "132 of 137 parts have an identity tagged SEEN, MEASURED or DATASHEET",
                "name": "identity tagged as seen",
                "value": 96.3
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: all 42 of 42 ok from 137 (bound 94.0%, unchanged 100%)",
            "outside": "a bill of materials, or markings read under a microscope for the unmarked parts, attached to the verdicts with --evidence",
            "raise": "a larger sample: no audited item failed",
            "score": 93.9
          },
          "layers": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 30",
                "name": "independent audit",
                "value": 30.0
              },
              {
                "inputs": "photos never show an inner layer: cap 30",
                "name": "photos alone",
                "value": 30.0
              },
              {
                "inputs": "45 of 253 connections stay open at 6 layers",
                "name": "the proposed stackup closes",
                "value": 82.2
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: no independent evidence (none: no sample drawn): capped at 30",
            "outside": "an edge micrograph, a cross-section or an X-ray that shows the copper layers, attached to the layer and plane verdicts with --evidence: photos never show an inner layer",
            "raise": "attach outside evidence with `audit verdict --evidence`",
            "score": 30.0
          },
          "placement": {
            "audit": {
              "detail": "all 40 of 42 ok from 137 (bound 86.6%, unchanged 100%)",
              "failed": [
                "a010 J6 (wrong)",
                "a040 U5 (wrong)"
              ],
              "items": 47,
              "sample": "e2e0df98a782c0ae",
              "status": "scored",
              "strata": [
                {
                  "audited": 42,
                  "needForTarget": 28,
                  "ok": 40,
                  "population": 137,
                  "staleVerdicts": 0,
                  "stratum": "all",
                  "unchangedShare": 1.0,
                  "value": 86.6,
                  "wilson95Lower": 0.866
                }
              ],
              "verdicts": 47
            },
            "ceilings": [
              {
                "inputs": "scored: all 40 of 42 ok from 137 (bound 86.6%, unchanged 100%)",
                "name": "independent audit",
                "value": 86.6
              },
              {
                "inputs": "115 of 137 parts have snap.method by pads, body centre or hole centre",
                "name": "parts located by a program measurement",
                "value": 83.9
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 55.6 at /categories/placement/score",
                "name": "layers against the photos",
                "value": 55.6
              }
            ],
            "heldByAudit": false,
            "limit": "layers against the photos: fidelity.json: lowest of 1 figure(s) is 55.6 at /categories/placement/score",
            "outside": null,
            "raise": "make what the KiCad layers draw agree with the photos at /categories/placement/score",
            "score": 55.6
          },
          "values": {
            "audit": {
              "detail": "no sample drawn",
              "failed": [],
              "items": 0,
              "sample": "",
              "status": "none",
              "strata": [],
              "verdicts": 0
            },
            "ceilings": [
              {
                "inputs": "no independent evidence (none: no sample drawn): capped at 40",
                "name": "independent audit",
                "value": 40.0
              },
              {
                "inputs": "47 of 137 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
                "name": "values tagged as seen",
                "value": 34.3
              }
            ],
            "heldByAudit": false,
            "limit": "values tagged as seen: 47 of 137 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
            "outside": "an LCR reading of each unmarked part off the board, or a bill of materials, attached to the verdicts with --evidence",
            "raise": "get values for the 90 parts with no readable value: unmarked ceramics cannot be read from a photo",
            "score": 34.3
          },
          "vias": {
            "audit": {
              "detail": "dropped 26 of 35 ok from 69 (bound 63.0%, unchanged 100%); kept 48 of 52 ok from 1329 (bound 82.1%, unchanged 100%)",
              "failed": [
                "a001 dome:bottom:[122.096,104.009] (wrong)",
                "a021 dome:bottom:[102.369,161.235] (wrong)",
                "a027 dome:bottom:[103.048,160.993] (wrong)",
                "a033 dome:bottom:[104.237,159.376] (wrong)",
                "a038 dome:bottom:[113.972,124.212] (cannot_tell)",
                "a052 dome:bottom:[113.566,124.79] (wrong)",
                "a063 dome:bottom:[114.379,123.575] (wrong)",
                "a076 dome:bottom:[144.3,155.275] (wrong)",
                "a089 dome:bottom:[124.75,158.825] (cannot_tell)",
                "a028 via:v1278 (cannot_tell)",
                "a060 via:v828 (wrong)",
                "a062 via:v1191 (cannot_tell)",
                "a092 via:v1022 (wrong)"
              ],
              "items": 96,
              "sample": "17b98f42f4908eaf",
              "status": "scored",
              "strata": [
                {
                  "audited": 35,
                  "needForTarget": 24,
                  "ok": 26,
                  "population": 69,
                  "staleVerdicts": 0,
                  "stratum": "dropped",
                  "unchangedShare": 1.0,
                  "value": 62.9,
                  "wilson95Lower": 0.63
                },
                {
                  "audited": 52,
                  "needForTarget": 34,
                  "ok": 48,
                  "population": 1329,
                  "staleVerdicts": 0,
                  "stratum": "kept",
                  "unchangedShare": 1.0,
                  "value": 82.0,
                  "wilson95Lower": 0.821
                }
              ],
              "verdicts": 96
            },
            "ceilings": [
              {
                "inputs": "scored: dropped 26 of 35 ok from 69 (bound 63.0%, unchanged 100%); kept 48 of 52 ok from 1329 (bound 82.1%, unchanged 100%)",
                "name": "independent audit",
                "value": 62.9
              },
              {
                "inputs": "49 of 1329 kept vias sit on a patch more than a quarter pale (min(R,G,B) > 135 in the square reaching 0.35 mm around it, a rule from these photos and an upper bound on false vias); 0 seen on both faces",
                "name": "vias not on pale pixels",
                "value": 96.3
              },
              {
                "inputs": "fidelity.json: lowest of 1 figure(s) is 69.4 at /categories/vias/score",
                "name": "layers against the photos",
                "value": 69.4
              }
            ],
            "heldByAudit": false,
            "limit": "independent audit: scored: dropped 26 of 35 ok from 69 (bound 63.0%, unchanged 100%); kept 48 of 52 ok from 1329 (bound 82.1%, unchanged 100%)",
            "outside": "an X-ray or a backlit photo of the bare board shows through vias directly, attached with --evidence",
            "raise": "fix the method behind the failed items (a001 dome:bottom:[122.096,104.009] (wrong), a021 dome:bottom:[102.369,161.235] (wrong), a027 dome:bottom:[103.048,160.993] (wrong), a033 dome:bottom:[104.237,159.376] (wrong), a038 dome:bottom:[113.972,124.212] (cannot_tell), a052 dome:bottom:[113.566,124.79] (wrong)), then redraw",
            "score": 62.9
          }
        },
        "fullPass": true,
        "overall": 0.0,
        "overallRule": "the lowest category",
        "target": 90.0
      },
      "target": 90.0,
      "verdict": "STALLED"
    }
  ]
}