app
AI Flow: Reverse Engineering
Public Made by Adomby adom
Photos of a PCB to a tagged KiCad copy: parts placed, copper and nets with their evidence, a schematic, a measured confidence score, bench tests and a video of the run.
main
Caleb
Add the Compute Module 5 run of version 0.4.0: report, evidence images, audit sheets and KiCad copy
e47f4f7
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
{
"at": "2026-11-10T04:00:30Z",
"derived": "written by the program for reading; nothing reads it back",
"scores": {
"categories": {
"blocks": {
"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": "0 of 258 parts are in a block tagged SEEN, MEASURED or DATASHEET",
"name": "parts in a block seen on the board",
"value": 0.0
}
],
"heldByAudit": false,
"limit": "parts in a block seen on the board: 0 of 258 parts are in a block tagged SEEN, MEASURED or DATASHEET",
"outside": null,
"raise": "settle the blocks tagged INFERRED from silkscreen and part identities",
"score": 0.0
},
"connectivity": {
"audit": {
"detail": "island 31 of 52 ok from 1873 (bound 46.2%, unchanged 100%); pin 27 of 39 ok from 97 (bound 57.2%, unchanged 100%); 433 of 2306 islands show no join to a pad, a via or other copper, so they are unproven and count as not correct (the island figure is multiplied by 0.812); 201 of 298 pins with a net show no join of their pad to copper the copy drew, so they are unproven and count as not correct (the pin figure is multiplied by 0.326); 146 of those 201 are on a net that cites a source outside the photos, which no photo confirms",
"failed": [
"a006 trace:isl-bottom-1324-4 (wrong)",
"a011 trace:isl-top-136-0 (cannot_tell)",
"a025 trace:isl-top-166-5 (cannot_tell)",
"a029 trace:isl-top-12-2 (wrong)",
"a032 zone:isl-top-5 (wrong)",
"a038 trace:isl-top-88-7 (cannot_tell)",
"a040 trace:isl-bottom-118-0 (wrong)",
"a042 trace:isl-top-81-1 (cannot_tell)",
"a044 zone:isl-top-84 (wrong)",
"a046 trace:isl-top-28-8 (cannot_tell)",
"a057 trace:isl-top-362-1 (cannot_tell)",
"a063 trace:isl-bottom-1200-4 (wrong)",
"a064 trace:isl-bottom-1389-6 (cannot_tell)",
"a065 trace:isl-bottom-6-1 (wrong)",
"a071 trace:isl-top-373-9 (cannot_tell)",
"a079 zone:isl-bottom-1344 (wrong)",
"a081 trace:isl-bottom-1377-8 (cannot_tell)",
"a093 trace:isl-top-265-7 (cannot_tell)",
"a096 trace:isl-top-309-stub0 (wrong)",
"a097 trace:isl-bottom-869-4 (wrong)",
"a100 trace:isl-bottom-324-5 (wrong)",
"a002 pin:H4.1 (wrong)",
"a015 pin:C111.2 (wrong)",
"a020 pin:H3.1 (cannot_tell)",
"a041 pin:C115.1 (cannot_tell)",
"a043 pin:C64.2 (cannot_tell)",
"a056 pin:H1.1 (wrong)",
"a059 pin:C45.1 (wrong)",
"a060 pin:J2.100 (wrong)",
"a067 pin:C98.1 (wrong)",
"a070 pin:H2.1 (wrong)",
"a095 pin:C119.1 (wrong)",
"a098 pin:R17.1 (cannot_tell)"
],
"items": 101,
"sample": "f0096b50840860c2",
"status": "scored",
"strata": [
{
"audited": 52,
"islands": 2306,
"needForTarget": 34,
"ok": 31,
"population": 1873,
"staleVerdicts": 0,
"stratum": "island",
"unchangedShare": 1.0,
"unproven": 433,
"value": 37.5,
"wilson95Lower": 0.462
},
{
"audited": 39,
"needForTarget": 26,
"ok": 27,
"pins": 298,
"population": 97,
"staleVerdicts": 0,
"stratum": "pin",
"unchangedShare": 1.0,
"unproven": 201,
"value": 18.6,
"wilson95Lower": 0.572
}
],
"verdicts": 101
},
"ceilings": [
{
"inputs": "scored: island 31 of 52 ok from 1873 (bound 46.2%, unchanged 100%); pin 27 of 39 ok from 97 (bound 57.2%, unchanged 100%); 433 of 2306 islands show no join to a pad, a via or other copper, so they are unproven and count as not correct (the island figure is multiplied by 0.812); 201 of 298 pins with a net show no join of their pad to copper the copy drew, so they are unproven and count as not correct (the pin figure is multiplied by 0.326); 146 of those 201 are on a net that cites a source outside the photos, which no photo confirms",
"name": "independent audit",
"value": 18.6
},
{
"inputs": "1468 of 1641 mm2 of pour has a net",
"name": "copper with a net, by area",
"value": 89.4
},
{
"inputs": "86 of 145 connections (337 pins, 192 nets) are joined by seen copper; 59 routed by the program, not seen; outside-evidence bound 0.0",
"name": "connections the photos show or outside evidence proves",
"value": 59.3
},
{
"inputs": "699 of 947 mm of track has a net",
"name": "copper with a net, by length",
"value": 73.8
},
{
"inputs": "0 of 142 joined pins disagree with the copper they touch; via net clashes: 7",
"name": "pins that agree with their copper",
"value": 100.0
},
{
"inputs": "499 of 145 missing per KiCad at the proposed stackup",
"name": "connections KiCad finds closed",
"value": 0.0
}
],
"heldByAudit": false,
"limit": "connections KiCad finds closed: 499 of 145 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 26 of 50 ok from 471 (bound 39.2%, unchanged 100%); copper 35 of 51 ok from 1063 (bound 55.3%, unchanged 100%); 2778 of 4312 points (64.4%) left out because the photo cannot show copper there: exposed metal 372, hole 3, part body 1334, part's pad box 937, silk 132",
"failed": [
"a003 pt:top:12:1 (wrong)",
"a006 pt:bottom:41:20 (wrong)",
"a008 pt:bottom:46:27 (wrong)",
"a009 pt:bottom:49:22 (cannot_tell)",
"a012 pt:bottom:4:28 (cannot_tell)",
"a022 pt:bottom:17:26 (wrong)",
"a029 pt:bottom:17:5 (cannot_tell)",
"a038 pt:bottom:43:3 (cannot_tell)",
"a041 pt:bottom:22:9 (cannot_tell)",
"a046 pt:bottom:41:23 (cannot_tell)",
"a051 pt:bottom:6:37 (cannot_tell)",
"a054 pt:top:53:11 (cannot_tell)",
"a055 pt:top:11:10 (wrong)",
"a069 pt:top:31:13 (cannot_tell)",
"a074 pt:bottom:31:16 (wrong)",
"a077 pt:bottom:49:9 (wrong)",
"a084 pt:top:12:2 (wrong)",
"a091 pt:bottom:40:23 (cannot_tell)",
"a092 pt:bottom:17:19 (wrong)",
"a094 pt:bottom:41:10 (wrong)",
"a095 pt:bottom:20:6 (cannot_tell)",
"a107 pt:bottom:32:9 (wrong)",
"a108 pt:top:0:37 (cannot_tell)",
"a111 pt:top:13:16 (wrong)",
"a034 pt:top:19:17 (wrong)",
"a036 pt:bottom:5:0 (wrong)",
"a039 pt:top:2:18 (wrong)",
"a044 pt:top:0:12 (wrong)",
"a045 pt:top:20:29 (wrong)",
"a047 pt:top:20:15 (wrong)",
"a052 pt:top:31:37 (cannot_tell)",
"a053 pt:top:44:26 (cannot_tell)",
"a058 pt:top:42:38 (cannot_tell)",
"a064 pt:top:3:16 (wrong)",
"a067 pt:bottom:16:22 (cannot_tell)",
"a068 pt:top:44:25 (wrong)",
"a075 pt:top:5:12 (wrong)",
"a086 pt:top:37:37 (wrong)",
"a097 pt:top:7:8 (cannot_tell)",
"a098 pt:top:22:22 (wrong)"
],
"items": 112,
"sample": "f7204517bcfa7e9f",
"status": "scored",
"strata": [
{
"audited": 50,
"needForTarget": 33,
"ok": 26,
"population": 471,
"staleVerdicts": 0,
"stratum": "bare",
"unchangedShare": 1.0,
"value": 39.1,
"wilson95Lower": 0.392
},
{
"audited": 51,
"needForTarget": 34,
"ok": 35,
"population": 1063,
"staleVerdicts": 0,
"stratum": "copper",
"unchangedShare": 1.0,
"value": 55.3,
"wilson95Lower": 0.553
}
],
"verdicts": 112
},
"ceilings": [
{
"inputs": "scored: bare 26 of 50 ok from 471 (bound 39.2%, unchanged 100%); copper 35 of 51 ok from 1063 (bound 55.3%, unchanged 100%); 2778 of 4312 points (64.4%) left out because the photo cannot show copper there: exposed metal 372, hole 3, part body 1334, part's pad box 937, silk 132",
"name": "independent audit",
"value": 39.1
},
{
"inputs": "top: no islands read; bottom: no islands read",
"name": "copper read that reached the copy",
"value": 40.0
},
{
"inputs": "fidelity.json: lowest of 1 figure(s) is 69.8 at /categories/copper/score",
"name": "layers against the photos",
"value": 69.8
}
],
"heldByAudit": false,
"limit": "independent audit: scored: bare 26 of 50 ok from 471 (bound 39.2%, unchanged 100%); copper 35 of 51 ok from 1063 (bound 55.3%, unchanged 100%); 2778 of 4312 points (64.4%) left out because the photo cannot show copper there: exposed metal 372, hole 3, part body 1334, part's pad box 937, silk 132",
"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 (a003 pt:top:12:1 (wrong), a006 pt:bottom:41:20 (wrong), a008 pt:bottom:46:27 (wrong), a009 pt:bottom:49:22 (cannot_tell), a012 pt:bottom:4:28 (cannot_tell), a022 pt:bottom:17:26 (wrong)), then redraw",
"score": 39.1
},
"identity": {
"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": "12 of 258 parts have an identity tagged SEEN, MEASURED or DATASHEET",
"name": "identity tagged as seen",
"value": 4.6
}
],
"heldByAudit": false,
"limit": "identity tagged as seen: 12 of 258 parts have an identity tagged SEEN, MEASURED or DATASHEET",
"outside": "a bill of materials, or markings read under a microscope for the unmarked parts, attached to the verdicts with --evidence",
"raise": "read the 246 parts whose identity is INFERRED or UNKNOWN from the crops or outside evidence",
"score": 4.6
},
"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": "42 of 59 connections stay open at 10 layers",
"name": "the proposed stackup closes",
"value": 28.8
}
],
"heldByAudit": false,
"limit": "the proposed stackup closes: 42 of 59 connections stay open at 10 layers",
"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": "a stackup that closes every connection",
"score": 28.8
},
"placement": {
"audit": {
"detail": "all 41 of 47 ok from 258 (bound 76.2%, unchanged 100%)",
"failed": [
"a009 C114 (wrong)",
"a012 C170 (wrong)",
"a013 C140 (wrong)",
"a014 C141 (wrong)",
"a021 C198 (wrong)",
"a045 C156 (wrong)"
],
"items": 52,
"sample": "ce5320b5c888233a",
"status": "scored",
"strata": [
{
"audited": 47,
"needForTarget": 31,
"ok": 41,
"population": 258,
"staleVerdicts": 0,
"stratum": "all",
"unchangedShare": 1.0,
"value": 76.2,
"wilson95Lower": 0.762
}
],
"verdicts": 52
},
"ceilings": [
{
"inputs": "scored: all 41 of 47 ok from 258 (bound 76.2%, unchanged 100%)",
"name": "independent audit",
"value": 76.2
},
{
"inputs": "140 of 258 parts have snap.method by pads, body centre or hole centre",
"name": "parts located by a program measurement",
"value": 54.2
},
{
"inputs": "fidelity.json: lowest of 1 figure(s) is 68.9 at /categories/placement/score",
"name": "layers against the photos",
"value": 68.9
}
],
"heldByAudit": false,
"limit": "parts located by a program measurement: 140 of 258 parts have snap.method by pads, body centre or hole centre",
"outside": null,
"raise": "make `parts snap` measure the 118 parts placed by a reading instead",
"score": 54.2
},
"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": "6 of 254 parts with a value have it tagged SEEN, MEASURED or DATASHEET",
"name": "values tagged as seen",
"value": 2.3
}
],
"heldByAudit": false,
"limit": "values tagged as seen: 6 of 254 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 248 parts with no readable value: unmarked ceramics cannot be read from a photo",
"score": 2.3
},
"vias": {
"audit": {
"detail": "dropped 5 of 6 ok from 6 (bound 83.3%, unchanged 100%); kept 43 of 51 ok from 883 (bound 72.4%, unchanged 100%)",
"failed": [
"a027 dome:bottom:[131.713,118.788] (wrong)",
"a003 via:v363 (wrong)",
"a005 via:v736 (wrong)",
"a006 via:v541 (wrong)",
"a009 via:v707 (wrong)",
"a014 via:v366 (wrong)",
"a029 via:v829 (wrong)",
"a049 via:v663 (wrong)",
"a055 via:v544 (wrong)"
],
"items": 63,
"sample": "03a1a8116cb47da0",
"status": "scored",
"strata": [
{
"audited": 6,
"needForTarget": 6,
"ok": 5,
"population": 6,
"staleVerdicts": 0,
"stratum": "dropped",
"unchangedShare": 1.0,
"value": 83.3,
"wilson95Lower": 0.833
},
{
"audited": 51,
"needForTarget": 34,
"ok": 43,
"population": 883,
"staleVerdicts": 0,
"stratum": "kept",
"unchangedShare": 1.0,
"value": 72.3,
"wilson95Lower": 0.724
}
],
"verdicts": 63
},
"ceilings": [
{
"inputs": "scored: dropped 5 of 6 ok from 6 (bound 83.3%, unchanged 100%); kept 43 of 51 ok from 883 (bound 72.4%, unchanged 100%)",
"name": "independent audit",
"value": 72.3
},
{
"inputs": "42 of 883 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); 256 seen on both faces",
"name": "vias not on pale pixels",
"value": 95.2
},
{
"inputs": "input missing: fidelity.json has no figure for vias: capped at 40",
"name": "layers against the photos",
"value": 40.0
}
],
"heldByAudit": false,
"limit": "layers against the photos: input missing: fidelity.json has no figure for vias: capped at 40",
"outside": "an X-ray or a backlit photo of the bare board shows through vias directly, attached with --evidence",
"raise": "run the layer scoring so fidelity.json compares this category's layers with the photos",
"score": 40.0
}
},
"fullPass": true,
"overall": 0.0,
"overallRule": "the lowest category",
"target": 90.0
},
"verdict": "STALLED"
}