← Commit history

aiflow 0.1.37 closes every gap; BOM covers the molecule contacts and pins; spec uses molecule, fab.rules, planeUnder, chains, requireEvidence

John Lauer ·4cc9f852cd ·6d ago ·parent 9486c7e
4 files changed +102−23
AIFLOW-GAPS.md+25
@@ -93,3 +93,28 @@ Still open: 23 (land route resume), 25 (router layer policy), 26 (pack rotations | 29 (clip manifest) | 0.1.35: `recut` and `compose` recover clip files from the ledger by recording id (5 of 14 came back here); the via net enforcement half stays open | | 34 (new) | `compose` wrote run-relative paths into ffmpeg concat lists, so a relative `--run` could never assemble the video; 0.1.35 writes absolute paths | | 35 (new, open) | a clip stop records `./run/<clip>.mp4` as the local file even when the pull from the desktop failed: 4 of 14 clips (components, current, silkscreen, routing 2) never reached the container and nothing said so. The stop should check the file landed, retry the pull, and flag the capture `pullFailed` with the remote path so `recut` can fetch it later. By the time the pull was retried the desktop's recordings folder had been cleaned, so these four clips are gone for good: the pull has to be verified before the stop returns, not later |++## Closed in adom-aiflow 0.1.37 (2026-09-30)++Every remaining row is closed in the binary; see docs/release-0.1.37.md on adom/adom-aiflow.++| row | closed by |+|---|---|+| 1 | `intake --prompt-time`: the run and its clock start before any board; `start --board` attaches it later |+| 3, 4, 5 | `sourcing check --bom`: board references vs BOM, profile rules (`fab` or `jlcpcb`), dated stock, thin stock; finish requires it |+| 6, 7, 12 | `evidence add --kind calcs|simulation|vendor-model`; finish requires `requireEvidence`; vendor models run in adom/adom-spice-skillpack |+| 8 | `netlist check` (58/58 pins on this board); `start --sch` makes finish require it |+| 9 | `molecule check` (clean on this board) |+| 10 | `fab.rules` + `rules install --profile jlcpcb`; the 3rd party fab's rules stay private |+| 16, 17, 32 | bridge bugs, filed: adom/pup-bridge#127, adom/adom-bridge#220, comment on adom/kicad-bridge#104 |+| 20 | `models` checks each model's orientation and seating |+| 23 | `land route` skips what already landed, retries one trace after a lost reply, `--from` |+| 25 | `planeUnder` in the router and the gate |+| 26 | `chains` in `place pack`, plus pad-adjacency scoring |+| 29 | vias checked against other nets before landing and read back after |+| 30 | `clips --page --push`, and automatic on every clip stop once a page is set |+| 31 | `tour fields` films a localhost Fields URL on the user's own machine |+| 33 | `route` on a board with copper plans only what is unconnected; empty plans pass gate, land and finish |+| 35 | clip pulls are verified and retried; `pullFailed` clips are pulled again by recut, finish and deliver |++**New finding from the new gate:** with `planeUnder` scoped to the input hot loop (C2, C3, C4, U1 VIN and GND pads, 0.5 mm margin), this board fails: an EN via at (111.90, 91.00) and about 1.2 mm of EN track, plus about 5.3 mm of the VOUT sense trace, sit on B.Cu under the loop. The old flow let it through. Fixing it is a reroute of EN and the VOUT sense on the live board.
aiflow/spec.json+45−2
@@ -1,6 +1,5 @@ {  "board": "12 V to 5 V / 1 A buck molecule (TI TPS54202 synchronous buck, 500 kHz), 28 x 20 mm, 2 layers, medium machine pins on a 24 x 16 mm grid",- "fab": "3rd party fab, 2-layer, 1.6 mm FR4",  "copperUm": 17.5,  "copperNote": "designed for 0.5 oz outer copper, the conservative end of the fab's range",  "clearance": 0.15,@@ -219,5 +218,49 @@    "size": 0.6,    "drill": 0.3   }- ]+ ],+ "fabNote": "3rd party fab, 2-layer, 1.6 mm FR4",+ "fab": {+  "rules": "fab",+  "target": "fab"+ },+ "sourcing": {+  "profile": "fab"+ },+ "molecule": {+  "pin": "medium",+  "gridMm": 2,+  "edgeMarginMm": 2,+  "cornerPinsNet": "GND"+ },+ "planeUnder": [+  {+   "layer": "B.Cu",+   "net": "GND",+   "around": [+    "U1.1",+    "U1.3",+    "C2",+    "C3",+    "C4"+   ],+   "margin": 0.5,+   "name": "GND under the input hot loop"+  }+ ],+ "chains": [+  {+   "refs": [+    "R1",+    "R2",+    "C9"+   ],+   "direction": "down"+  }+ ],+ "requireEvidence": [+  "calcs",+  "simulation"+ ],+ "planeUnderNote": "the input hot loop is C2/C3/C4 to U1 VIN (pin 3) and GND (pin 1); B.Cu under it stays GND so the loop's return current images directly under it. U1's other pins (EN, FB, BOOT, SW) are left out: EN and FB have to leave U1 somewhere." }\ No newline at end of file
design/bom.csv+10
@@ -19,3 +19,13 @@ R6,2.2k,LED resistor,CR0402-FX-2201GLF,Bourns,0402,Adom stock,,,1.4 mA R7,10k,VMON divider top (VOUT to VMON),CR0402-FX-1002GLF,Bourns,0402,Adom stock,,,VMON = VOUT/2 = 2.5 V for a 3.3 V ADC R8,10k,VMON divider bottom (VMON to GND),CR0402-FX-1002GLF,Bourns,0402,Adom stock,,,VMON source impedance 5 k D1,green LED,5 V power-good indicator,IN-S63BTG,Inolux,0603,Adom stock,,,+J1,MachineContactMedium,molecule contact (VIN),MachineContactMedium,Adom,MachineContactMedium (1.3 mm pad / 0.78 mm drill),Adom stock,,,scaffold contact pressed into the board+J2,MachineContactMedium,molecule contact (GND),MachineContactMedium,Adom,MachineContactMedium (1.3 mm pad / 0.78 mm drill),Adom stock,,,scaffold contact pressed into the board+J3,MachineContactMedium,molecule contact (EN),MachineContactMedium,Adom,MachineContactMedium (1.3 mm pad / 0.78 mm drill),Adom stock,,,scaffold contact pressed into the board+J4,MachineContactMedium,molecule contact (VOUT),MachineContactMedium,Adom,MachineContactMedium (1.3 mm pad / 0.78 mm drill),Adom stock,,,scaffold contact pressed into the board+J5,MachineContactMedium,molecule contact (GND),MachineContactMedium,Adom,MachineContactMedium (1.3 mm pad / 0.78 mm drill),Adom stock,,,scaffold contact pressed into the board+J6,MachineContactMedium,molecule contact (VMON),MachineContactMedium,Adom,MachineContactMedium (1.3 mm pad / 0.78 mm drill),Adom stock,,,scaffold contact pressed into the board+MP1,MachinePinMediumShort,molecule machine pin (GND),MachinePinMediumShort,Adom,MachinePinMediumShort (1.6 mm pad / 1.2 mm drill),Adom stock,,,corner pin; MP1 is the origin+MP2,MachinePinMediumShort,molecule machine pin (GND),MachinePinMediumShort,Adom,MachinePinMediumShort (1.6 mm pad / 1.2 mm drill),Adom stock,,,corner pin; MP1 is the origin+MP3,MachinePinMediumShort,molecule machine pin (GND),MachinePinMediumShort,Adom,MachinePinMediumShort (1.6 mm pad / 1.2 mm drill),Adom stock,,,corner pin; MP1 is the origin+MP4,MachinePinMediumShort,molecule machine pin (GND),MachinePinMediumShort,Adom,MachinePinMediumShort (1.6 mm pad / 1.2 mm drill),Adom stock,,,corner pin; MP1 is the origin
docs/aiflow-run.md+22−21
@@ -85,42 +85,43 @@ Everything in this run that aiflow did not guide, gate or measure was logged as  | # | gap | belongs in | status | |---|---|---|---|-| 1 | the clock needs a board, so pre-board work is untimed | instrument | open (worked around with `--prompt-time`) |+| 1 | the clock needs a board, so pre-board work is untimed | instrument | **closed in 0.1.37** | | 2 | no intake step to turn a brief into requirements | skill | skill in 0.1.34 (`aiflow-intake`) |-| 3 | the sourcing profile should follow the fab target | skill + gate | skill in 0.1.34 (`aiflow-sourcing`); gate open |-| 4 | no guided parts-search pass | skill + gate | skill in 0.1.34 (`aiflow-sourcing`); gate open |-| 5 | nothing points at Adom stocked parts | skill + gate | skill in 0.1.34 (`aiflow-sourcing`); gate open |+| 3 | the sourcing profile should follow the fab target | skill + gate | **closed in 0.1.37** |+| 4 | no guided parts-search pass | skill + gate | **closed in 0.1.37** |+| 5 | nothing points at Adom stocked parts | skill + gate | **closed in 0.1.37** | | 6 | no step records design equations next to values | skill | skill in 0.1.34 (`aiflow-circuit-design`) |-| 7 | no simulation step or gate | skill + gate | skill in 0.1.34 (`aiflow-simulate`); gate open |-| 8 | no schematic-to-board path or netlist equivalence check | gate | skill in 0.1.34 (`aiflow-schematic-to-board`); gate open |-| 9 | aiflow does not know the molecule format | skill + gate | skill in 0.1.34 (`aiflow-molecule`); gate open |-| 10 | DRC does not load the target fab's rules | gate | fab-rules profile in `aiflow-molecule` (0.1.34); gate open |+| 7 | no simulation step or gate | skill + gate | **closed in 0.1.37** |+| 8 | no schematic-to-board path or netlist equivalence check | gate | **closed in 0.1.37** |+| 9 | aiflow does not know the molecule format | skill + gate | **closed in 0.1.37** |+| 10 | DRC does not load the target fab's rules | gate | **closed in 0.1.37** | | 11 | no scaffold / control-panel step after `finish` | skill | skill in 0.1.34 (`aiflow-scaffold-probe`) |-| 12 | no vendor-model (PSpice) simulation step | skill + gate + hands | skill in 0.1.34 (`aiflow-simulate`); hands open |+| 12 | no vendor-model (PSpice) simulation step | skill + gate + hands | **closed in 0.1.37** | | 13 | vendor logins: get them from the vault, never ask the human | skill | skill in 0.1.34 (`aiflow-credentials`) | | 14 | vendor sign-ups work in the user's real browser | skill | skill in 0.1.34 (`aiflow-credentials`) | | 15 | PSpice model access needs an approval wait | skill | skill in 0.1.34 (`aiflow-credentials`) |-| 16 | pup drops when a verb carries a secret | bug (pup-bridge) | open |-| 17 | `send_files` to a `.pretty` folder writes a file | bug (adom-bridge) | open |+| 16 | pup drops when a verb carries a secret | bug (pup-bridge) | filed: adom/pup-bridge#127 |+| 17 | `send_files` to a `.pretty` folder writes a file | bug (adom-bridge) | filed: adom/adom-bridge#220 | | 18 | never use chipsmith; model sourcing order | skill | skill in 0.1.34 (`aiflow-sourcing`) | | 19 | generate STEP geometry on the shared step2glb service | skill | skill in 0.1.34 (`aiflow-sourcing`) |-| 20 | search manufacturer CAD by series; check every model is Z-up | skill + gate | skill in 0.1.34 (`aiflow-sourcing`); gate open |+| 20 | search manufacturer CAD by series; check every model is Z-up | skill + gate | **closed in 0.1.37** | | 21 | no native kicad-cli in the container | instrument / gate | the remote wrapper now ships with 0.1.33 | | 22 | a stale KiCad 7 kicad-cli wins silently | gate | **fixed in 0.1.33** |-| 23 | `land route` is not resumable | hands | open |+| 23 | `land route` is not resumable | hands | **closed in 0.1.37** | | 24 | duplicate Kelvin keepout names refused by the bridge | bug | **fixed in 0.1.33** |-| 25 | the router has no layer policy for 2-layer power boards | skill + router | skill in 0.1.34 (`aiflow-power-layout`); router open |-| 26 | the packer picks rotations that knot a divider chain | skill + pack scoring | skill in 0.1.34 (`aiflow-power-layout`); pack scoring open |+| 25 | the router has no layer policy for 2-layer power boards | skill + router | **closed in 0.1.37** |+| 26 | the packer picks rotations that knot a divider chain | skill + pack scoring | **closed in 0.1.37** | | 27 | Kelvin keepouts on both layers and up to the power pin | bug | **fixed in 0.1.33** | | 28 | thermal vias for small pins land inside the pad | bug | **fixed in 0.1.33** |-| 29 | a planned GND via landed as SW; clip files missing from the manifest | bug | **clip files fixed in 0.1.35**; via net check open |-| 30 | no live clips sub-readme | instrument + skill | skill in 0.1.34 (`aiflow-live-clips`); binary open (kept by hand: [build clips](clips.md)) |-| 31 | `tour fields` opens a localhost proxy on the wrong box | bug | open (worked around with `--on`) |-| 32 | silkscreen text verb contract and minimum height | skill + bridge | skill in 0.1.34 (`aiflow-power-layout`); bridge open |-| 33 | `finish` after adopting a routed board | bug | **analyses half fixed in 0.1.33**; routing half open |+| 29 | a planned GND via landed as SW; clip files missing from the manifest | bug | **closed in 0.1.37** |+| 30 | no live clips sub-readme | instrument + skill | **closed in 0.1.37** |+| 31 | `tour fields` opens a localhost proxy on the wrong box | bug | **closed in 0.1.37** |+| 32 | silkscreen text verb contract and minimum height | skill + bridge | skill in 0.1.34; bridge side filed on adom/kicad-bridge#104 |+| 33 | `finish` after adopting a routed board | bug | **closed in 0.1.37** | | 34 | `compose` could not assemble the video from a relative run path | bug | **fixed in 0.1.35** |+| 35 | clip pulls that fail silently (four clips lost) | bug | **closed in 0.1.37** | -Ten companion skills from this run shipped in adom-aiflow 0.1.34 (2026-09-29). "Gate open" means the judgement is written down but the binary does not enforce it yet.+Ten companion skills from this run shipped in adom-aiflow 0.1.34 (2026-09-29), and 0.1.37 (2026-09-30) closed every remaining gap in the binary. Its new `planeUnder` gate then found one thing on this board: an EN via and part of the VOUT sense trace on B.Cu under the input hot loop (see the gap log).  ### Fixed in adom-aiflow 0.1.33