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.
e874d7d
Driver board: reverse engineered from photos
Run of adom-aiflow-reverse 0.3 on Driver1.JPG to Driver4.jpg only, updated 2026-11-06. The generated tables (evidence counts, every open item, the tests) are in report-tables.md.
Result: a 6-layer proposal, with copper read from the photos on both faces. This is not a finished board, and the 90 percent confidence target was not reached.
Overall confidence: 0.0 of 100, target 90: STALLED
Overall is the lowest category. Connectivity scores 0 because KiCad still finds 441 missing connections against 338 expected at the proposed stackup.
What the board is
A three-phase BLDC motor controller, 73.65 x 61.78 mm as measured from the photos, with 2.5 mm corners. A TI DRV8323S gate driver (marking read, confirmed against TI's product page) drives six TDSON-8 MOSFETs in three half-bridges to the X1, X2 and X3 lugs. An STM32G4 in QFN-48 (silkscreen only, the package marking is unreadable) runs it.
The photos and the copy
| Top | Bottom (turned over to line up with the top) | |
|---|---|---|
| Photo | ![]() |
![]() |
| What each pixel is | ![]() |
![]() |
| Copper islands read | ![]() |
![]() |
| Copy over the photo | ![]() |
![]() |
| Drawn against the photo | ![]() |
![]() |
| How each piece got its net | ![]() |
![]() |
In "Drawn against the photo", green is drawn and seen, red is drawn but not seen, cyan is seen but not drawn, and purple is hidden and not scored. In "How each piece got its net", green means a pad touches it, cyan a via, yellow inferred, orange by group only, red no net and magenta a conflict.
Vias, 0.2 against 0.3


Dome shadows

Routing

How it was measured
| Step | Result |
|---|---|
| Photos | Outline found in all four photos; bottom pinned to top through 40 shared holes, 0.026 mm RMS with each hole held out in turn |
| Scale | 46.599 px/mm from the 2.0 and 2.54 mm header rows. The DRV8323S body (6 x 6 mm, TI) only picks the pitch standard |
| Parts | 137 parts, 103 placed by their own pads on the photo. 47 have a value tagged as seen; most others are unmarked ceramics |
| Blocks | 11 blocks from silkscreen and topology |
| Copper | 828 pours and 2,588 tracks read from the photos |
| Vias | 1,329 kept, all from dome shading on the bottom. The top face shows no domes that can be trusted |
| Other layers | Silkscreen, mask openings, exposed metal, holes and outline read from the photos into their own KiCad layers |
| Against the photos | Held-out copper IoU: bottom 0.873, top 0.823. 87% of the bottom and 48% of the top are visible enough to score |
| Nets | 77 nets, all INFERRED. 1,782 pieces of copper stitched into 1,418 conductors; 79 of 415 pins seen on their net; 7 pins moved by the copper and not yet reviewed by hand |
| Review | 7 passes, STALLED |
| Tests | 119 tests covering the open items |
How each piece of copper got its net
| Evidence | Area | Track length | Vias |
|---|---|---|---|
| A pad touches it | 75.5% | 33.6% | 66.0% |
| Through a via | 10.2% | 6.0% | 12.8% |
| Inferred | 4.3% | 3.8% | 6.5% |
| Net group only | 2.3% | 9.3% | 4.5% |
| No net | 7.6% | 46.5% | 7.4% |
| Conflict | 0.1% | 0.8% | 2.9% |
"Every piece of copper on a net" is not met: 1,261 of 1,782 pieces and 46.5% of track length have no net. A held-out check of 150 connections, judged blind from crops on the nets branch before the final merge, gave 54 correct, 24 wrong and 72 cannot tell.
Layer count
Rules: KiCad default (0.2 mm track and clearance, 0.6/0.3 mm via, 0.5 mm edge).
| Layers | Open | New DRC errors | Missing per KiCad | Crossing seen copper |
|---|---|---|---|---|
| 2 | 47 of 267 | 718 | 358 | 454 mm |
| 4 | 43 of 253 | 475 | 340 | 384 mm |
| 6 | 45 of 253 | 594 | 441 | 11 mm |
| 8 | 45 of 253 | 602 | 452 | 8 mm |
The evidence for 6 is routing difficulty: crossing of seen copper falls from 384 mm at 4 layers to 11 mm at 6, and 8 adds almost nothing. Open counts do not separate the stackups. The routed inner copper is one possible way to make the connections, not what is inside the board. In1 GND and In4 +3V3 are inferred as the largest power nets.
Finer copper made routing worse than version 0.2 by DRC and KiCad's count: at 6 layers 0.2 had 34 of 249 open, 6 new DRC errors and 76 missing per KiCad, because it had far less copper to clear and join.
Confidence by category
Scores come from independent audits and measurements. No score is typed. Five auditors who did not produce the run judged random crops, with false claims planted. One blocks sample was voided when a planted claim was called correct, and a new auditor redid it.
| Category | Score | Limited by |
|---|---|---|
| Identity | 93.9 | Audit: all 42 of 42 correct, 5 planted claims rejected |
| Vias | 62.9 | Audit: 48 of 52 kept vias and 26 of 35 dropped candidates judged correct |
| Blocks | 61.5 | Audit: 31 of 42 correct |
| Placement | 55.6 | Layers against the photos; the audit itself gave 40 of 42 |
| Values | 34.3 | 90 parts have no readable value |
| Layers | 30.0 | Capped without outside evidence, such as an edge view, X-ray or the stackup |
| Copper | 9.4 | Audit: the auditor could not tell copper from bare board through smooth green mask on 79 of 116 crops |
| Connectivity | 0.0 | KiCad finds more missing connections than there are expected connections |
The copper figure mostly measures what a crop can show. It disagrees with the answer key's copper match below, and the audit method needs changing before it can be trusted either way.
Checked against the real design
The true design was kept as a sealed answer key: never a flow input, never shown to an agent, totals only. Scorer edf583a6419b9d9d, published 0.2 against this run.
| Measure | Published | This run |
|---|---|---|
| Vias that are real | 42.4% | 95.5% |
| Design vias found | 25.8% | 75.2% |
| Outline error, x / y | -0.35 / -0.22 mm | 0.04 / 0.03 mm |
| Copper match (IoU), top / bottom | 61.4 / 80.2% | 67.4 / 88.9% |
| Copper net purity, top / bottom | 70.5 / 77.5% | 76.1 / 85.9% |
| Copper with no named net, top / bottom | 10.7 / 1.9% | 13.8 / 5.9% |
| Pins on a consistent net | 45.8% | 48.4% |
| Pin pairs, precision / recall | 18.5 / 29.8% | 20.3 / 33.3% |
| Parts found / placed parts real | 84.7 / 97.1% | 84.7 / 96.4% |
| Median part offset | 0.107 mm | 0.125 mm |
| Part values matching | 3.0% | 3.0% |
| Layer proposal | 6, correct | 6, correct |
Limits on this check: the true layer count and outline were known while working, so neither result is blind. One scale hint given to the layers agent was slightly informed by the key. The thresholds came from this board. The scorer counts copper hidden under parts, which no photo can show, and its handling of pins has not been audited. A second board is needed.
What it would take to reach 90
Photos alone cannot get there. Values need meter readings or a BOM for the unmarked parts. The layer count needs an edge view, an X-ray or the stackup. Connectivity needs continuity measurements and the remaining track pieces joined. Copper needs an audit that can settle what a crop of smooth mask cannot, such as a contrast-stretched crop or backlit photos.
Files
- kicad/: the KiCad project with the 6-layer route. Open
run.kicad_pcbto check any result. - data/: parts, blocks, nets, layers, tests, net evidence, fidelity scores and the computed confidence.
- routes/: each stackup's route result and DRC summary.
- images/: the pictures above, reduced for the page. Full-size evidence,
copper.json, every routed board, the audits and the recorded views are in the run archive on the page's Releases tab.
# Driver board: reverse engineered from photos
Run of adom-aiflow-reverse 0.3 on Driver1.JPG to Driver4.jpg only, updated 2026-11-06. The generated tables (evidence counts, every open item, the tests) are in [report-tables.md](data/report-tables.md).
**Result: a 6-layer proposal, with copper read from the photos on both faces. This is not a finished board, and the 90 percent confidence target was not reached.**
Overall confidence: 0.0 of 100, target 90: STALLED
Overall is the lowest category. Connectivity scores 0 because KiCad still finds 441 missing connections against 338 expected at the proposed stackup.
## What the board is
A three-phase BLDC motor controller, 73.65 x 61.78 mm as measured from the photos, with 2.5 mm corners. A TI DRV8323S gate driver (marking read, confirmed against TI's product page) drives six TDSON-8 MOSFETs in three half-bridges to the X1, X2 and X3 lugs. An STM32G4 in QFN-48 (silkscreen only, the package marking is unreadable) runs it.
## The photos and the copy
| | Top | Bottom (turned over to line up with the top) |
|---|---|---|
| Photo |  |  |
| What each pixel is |  |  |
| Copper islands read |  |  |
| Copy over the photo |  |  |
| Drawn against the photo |  |  |
| How each piece got its net |  |  |
In "Drawn against the photo", green is drawn and seen, red is drawn but not seen, cyan is seen but not drawn, and purple is hidden and not scored. In "How each piece got its net", green means a pad touches it, cyan a via, yellow inferred, orange by group only, red no net and magenta a conflict.
### Vias, 0.2 against 0.3


### Dome shadows

### Routing

## How it was measured
| Step | Result |
|---|---|
| Photos | Outline found in all four photos; bottom pinned to top through 40 shared holes, 0.026 mm RMS with each hole held out in turn |
| Scale | 46.599 px/mm from the 2.0 and 2.54 mm header rows. The DRV8323S body (6 x 6 mm, TI) only picks the pitch standard |
| Parts | 137 parts, 103 placed by their own pads on the photo. 47 have a value tagged as seen; most others are unmarked ceramics |
| Blocks | 11 blocks from silkscreen and topology |
| Copper | 828 pours and 2,588 tracks read from the photos |
| Vias | 1,329 kept, all from dome shading on the bottom. The top face shows no domes that can be trusted |
| Other layers | Silkscreen, mask openings, exposed metal, holes and outline read from the photos into their own KiCad layers |
| Against the photos | Held-out copper IoU: bottom 0.873, top 0.823. 87% of the bottom and 48% of the top are visible enough to score |
| Nets | 77 nets, all INFERRED. 1,782 pieces of copper stitched into 1,418 conductors; 79 of 415 pins seen on their net; 7 pins moved by the copper and not yet reviewed by hand |
| Review | 7 passes, STALLED |
| Tests | 119 tests covering the open items |
## How each piece of copper got its net
| Evidence | Area | Track length | Vias |
|---|---|---|---|
| A pad touches it | 75.5% | 33.6% | 66.0% |
| Through a via | 10.2% | 6.0% | 12.8% |
| Inferred | 4.3% | 3.8% | 6.5% |
| Net group only | 2.3% | 9.3% | 4.5% |
| No net | 7.6% | 46.5% | 7.4% |
| Conflict | 0.1% | 0.8% | 2.9% |
"Every piece of copper on a net" is not met: 1,261 of 1,782 pieces and 46.5% of track length have no net. A held-out check of 150 connections, judged blind from crops on the nets branch before the final merge, gave 54 correct, 24 wrong and 72 cannot tell.
## Layer count
Rules: KiCad default (0.2 mm track and clearance, 0.6/0.3 mm via, 0.5 mm edge).
| Layers | Open | New DRC errors | Missing per KiCad | Crossing seen copper |
|---|---|---|---|---|
| 2 | 47 of 267 | 718 | 358 | 454 mm |
| 4 | 43 of 253 | 475 | 340 | 384 mm |
| **6** | **45 of 253** | **594** | **441** | **11 mm** |
| 8 | 45 of 253 | 602 | 452 | 8 mm |
The evidence for 6 is routing difficulty: crossing of seen copper falls from 384 mm at 4 layers to 11 mm at 6, and 8 adds almost nothing. Open counts do not separate the stackups. The routed inner copper is one possible way to make the connections, not what is inside the board. In1 GND and In4 +3V3 are inferred as the largest power nets.
Finer copper made routing worse than version 0.2 by DRC and KiCad's count: at 6 layers 0.2 had 34 of 249 open, 6 new DRC errors and 76 missing per KiCad, because it had far less copper to clear and join.
## Confidence by category
Scores come from independent audits and measurements. No score is typed. Five auditors who did not produce the run judged random crops, with false claims planted. One blocks sample was voided when a planted claim was called correct, and a new auditor redid it.
| Category | Score | Limited by |
|---|---|---|
| Identity | 93.9 | Audit: all 42 of 42 correct, 5 planted claims rejected |
| Vias | 62.9 | Audit: 48 of 52 kept vias and 26 of 35 dropped candidates judged correct |
| Blocks | 61.5 | Audit: 31 of 42 correct |
| Placement | 55.6 | Layers against the photos; the audit itself gave 40 of 42 |
| Values | 34.3 | 90 parts have no readable value |
| Layers | 30.0 | Capped without outside evidence, such as an edge view, X-ray or the stackup |
| Copper | 9.4 | Audit: the auditor could not tell copper from bare board through smooth green mask on 79 of 116 crops |
| Connectivity | 0.0 | KiCad finds more missing connections than there are expected connections |
The copper figure mostly measures what a crop can show. It disagrees with the answer key's copper match below, and the audit method needs changing before it can be trusted either way.
## Checked against the real design
The true design was kept as a sealed answer key: never a flow input, never shown to an agent, totals only. Scorer edf583a6419b9d9d, published 0.2 against this run.
| Measure | Published | This run |
|---|---|---|
| Vias that are real | 42.4% | 95.5% |
| Design vias found | 25.8% | 75.2% |
| Outline error, x / y | -0.35 / -0.22 mm | 0.04 / 0.03 mm |
| Copper match (IoU), top / bottom | 61.4 / 80.2% | 67.4 / 88.9% |
| Copper net purity, top / bottom | 70.5 / 77.5% | 76.1 / 85.9% |
| Copper with no named net, top / bottom | 10.7 / 1.9% | 13.8 / 5.9% |
| Pins on a consistent net | 45.8% | 48.4% |
| Pin pairs, precision / recall | 18.5 / 29.8% | 20.3 / 33.3% |
| Parts found / placed parts real | 84.7 / 97.1% | 84.7 / 96.4% |
| Median part offset | 0.107 mm | 0.125 mm |
| Part values matching | 3.0% | 3.0% |
| Layer proposal | 6, correct | 6, correct |
Limits on this check: the true layer count and outline were known while working, so neither result is blind. One scale hint given to the layers agent was slightly informed by the key. The thresholds came from this board. The scorer counts copper hidden under parts, which no photo can show, and its handling of pins has not been audited. A second board is needed.
## What it would take to reach 90
Photos alone cannot get there. Values need meter readings or a BOM for the unmarked parts. The layer count needs an edge view, an X-ray or the stackup. Connectivity needs continuity measurements and the remaining track pieces joined. Copper needs an audit that can settle what a crop of smooth mask cannot, such as a contrast-stretched crop or backlit photos.
## Files
- [kicad/](kicad): the KiCad project with the 6-layer route. Open `run.kicad_pcb` to check any result.
- [data/](data): parts, blocks, nets, layers, tests, net evidence, fidelity scores and the computed confidence.
- [routes/](routes): each stackup's route result and DRC summary.
- [images/](images): the pictures above, reduced for the page. Full-size evidence, `copper.json`, every routed board, the audits and the recorded views are in the run archive on the page's Releases tab.











