soldermask

a lab working on efficiency in printed-circuit-board design

a sentence in. a board you can order out.

an anneal, drawn: courtyards, the cut line, the band inside it

mission

The expensive thing in electronics is not the copper; it is the distance between a decision about a board and the verdict on it. Today that distance is a fab run. We are closing it to a router's ten seconds, and then to a judge that answers while the part is still being dragged.

Most tools that turn a description into a board optimize for looking finished. Few are checked against the one thing that actually decides whether a board is real: whether the router — the program that has to close every net into copper — agrees. We build backwards from that verdict, and we've learned not to trust our own flattering numbers until an audit has tried to break them.

what exists

soldermask is the pipeline the research runs on. A sentence becomes parts and a netlist; every part is resolved against live JLCPCB stock; the netlist is checked; the board is placed — on both sides, where the front runs out of room — routed by freerouting and again by a second router if that leaves a net short of a pin, checked by KiCad's own DRC, written out as Gerbers and assembly files, and priced. Every route it has ever run is kept — the board as the router met it, and what the router said — which is now a corpus of 39,741 verdicts on 12,213 boards, drawn from a bank of 13,990 real board files: 12,239 from KiCad projects on GitHub, 908 from open-schematics, and PCBench's 843 held aside as an external test nobody here chose. Since 5 September that test is held out by content and not by path: freerouting vendors a copy of PCBench inside its own fixtures, and 866 byte-identical copies of held-out boards had walked into the training directory under ordinary names. The bank itself has now been placed and routed end to end — 42,334 placements of 10,895 boards under both routers and one DRC — which is where most of the numbers below are measured. Every one of them is measured on boards the model in question never saw.

  1. 01a sentence becomes parts and a netlist
  2. 02every part resolved against live JLCPCB stock
  3. 03the netlist checked
  4. 04the board placed, both sides
  5. 05routed by freerouting, and by a second router if a net is left dead
  6. 06checked again by KiCad's own DRC
  7. 07Gerbers and assembly files written out
  8. 08priced

the build

One board, from the sentence that asked for it to the files a fab can take. Each system runs where it actually runs — the placer before the router, the judges before the copper.

ten acts · one board · a point cloud, full screen open the build → the sentence, the parts, the netlist, Quorra's anneal, Mendicant's fold, ISOnet's verdict, Physarum's escape, the route, the check, the files — with every number measured off the frame.

measured

Nine numbers the work turns on. Each is quoted next to the thing that qualifies it, because on this corpus every one of them had something behind it worth saying out loud.

0.829 a slime mould's escape windows, predicting a failed route between boards — held out on 1,774 boards nothing had tuned on The best board-difficulty reading here, and it is not a cheap one: a ruler over pad gaps reads the same boards at 0.821, a difference of [−0.006, +0.022]. Between boards the instrument is a pitch counter that costs what a router costs.
0.744 ISOnet's AUC on 256 boards it had never seen, judged by KiCad's own DRC rather than by the corpus Its stored 0.954 was measured on its own split, under its own judge, on its own placements — and does not travel. On these boards an unfitted instrument scores 0.770 and the difference is not significant.
0.574 the coarse mould ordering one board's own anneals, over 2,045 boards that hold both a clean placement and a failed one p = 1×10−15: six hundredths of AUC, and the first within-board reading here that survives being measured at scale. The pad-resolution windows have none of it — 0.47.
74.5 / 74.8 the placer's first anneal and the person's placement, routed clean, on 705 finished open-hardware boards Best of six anneals is 80.4%. The 14.5-point gap we had measured was an edge-band defect in our own placer.
−18% crossings a placement asks the router to resolve, cut by Mendicant's own count inside the anneal — for +0.2% of wirelength 5,750 paired anneal-and-route jobs, same board, same seed. The routed board barely moved: +1.8 points of clean rate [+0.2, +3.7] pooled over five weights, half a point at best of six, vias flat. Route rate is rules-limited now, not placement-limited.
41.3 / 8.8 a second router against freerouting on the strict bar — not one DRC error left — over 42,334 placements of 10,895 boards On the looser bar, 67.7% against 54.0%; either router closes 74.3%, and they disagree on 27%. Every label in the corpus was written by the loser, and the build now runs both.
39,741 router verdicts kept, over 12,213 boards — the board as the router met it, and what the router said PCBench is held aside as an external test nobody here chose, by content since 5 September and not by path.
287 / 287 nets of a 16×16 photonic mesh placed by Mendicant's fold and routed by LiDAR with no crossings at all Apollo publishes 95.05% and two crossings on the same chip. On the MMI tensor cores the fold takes 21% of the crossings out of a layout a person drew. Not a rerun of Apollo — its repository is empty, so its rows are its published table.
9 / 42 boards of 54 a diffusion model placed clean, against the same annealer's best of six It beats the board's own author on wirelength and on how close the decoupling sits, and stacks courtyards the prompt forbids. Not one board in 54 where its placement closed and six anneals all failed.

retro

Ten days. Everything above happened between the first commit at 03:04 on 1 September and the diffusion-model run that finished at 11:28 on 10 September. Below: the hours, as the corpus recorded them, and what each system measured, and when. The label writes stop on 5 September and the work does not — the router experiments moved to the board bank, whose 42,334 placements are an experiment rather than training labels.

Labels written to the corpus, by hour
    the same numbers, as tables

    how we work

    The router is the only judge

    Not a model's confidence, not a placement's symmetry. Whether freerouting closes every net clean is the one test that counts, asked of everything upstream — a placer's cost function, a learned model's prediction, a rule inferred from a part's own footprint — before any of it is trusted.

    A result is only as honest as the corpus behind it

    A label defect sat in a quarter of a training corpus before anyone went looking for it. A score gets retracted and re-measured the day that's found, not defended — auditing what the last audit missed is the work, not a step before it.

    Complexity has to earn its place

    A neural network is judged against the plainest baseline that could stand in for it, and loses to it more often than a pitch would like. What ships is whichever wins that comparison, not whichever took longer to build.

    Every stage says what it could not do

    A part that doesn't exist is a part that doesn't exist. A rail nothing drives is said out loud. A router that gives up says so — because a board that looks finished and isn't costs a fab run to find out.

    Every number here is one router run away from being wrong, and we would rather find that out than defend it. A release of the corpus with its split hash — so the claims can be checked by someone who did not make them — is next.