AI Flow
Public Made by Adomby adom
Adom's AI Flow: a tool to help the AI follow all of the steps it takes to build a board.
main
d09912e
name: aiflow-test-plan
description: >-
Use when an adom-aiflow run reaches its test-plan step, or whenever someone asks where the board will be probed. The test-plan step of an adom-aiflow run: before the schematic is drawn, think through how the built board will be tested on the Adom probing workcell (the rails, the switch node, feedback, ripple, enable, power-good, every LED, the ground pin), write tests.json, and let adom-aiflow testplan check give every measurement a real probe spot, adding 0.5 mm round test points (adom/testpoint-pad-0-5mm) for the gaps; then check the landings again on the placed and finished board. Trigger words: test plan, test points, probe points, probing workcell, design for test, DFT, where will we probe, TP, testpoint, probe spot, bring-up measurements, what should we measure.
Parent skill: adom-aiflow
aiflow-test-plan: decide what you will measure, then make sure you can
Every Adom board goes to the probing workcell after it is built: a gantry lands a pogo-tipped scope
probe on the board while a ground tether is plugged into a ground machine contact. A board can only be
tested where there is copper the probe can land on. This step makes the AI decide, before the schematic
is drawn, what a careful engineer would measure at the bench, and makes the binary prove each
measurement has a spot. It is a required step: step and finish refuse to go past it.
1. Think like the engineer at the bench
Write tests.json, one entry per measurement, from THIS circuit and its simulation, not a template:
[
{"id": "vin", "what": "12 V arriving on the board", "net": "VIN", "why": "input path and the input cap", "kind": "dc", "expect": "11.4 to 12.6 V"},
{"id": "sw", "what": "switch node: frequency, ringing", "net": "SW", "why": "500 kHz, edges, dead time", "kind": "waveform", "expect": "0 to 12 V square, 500 kHz"},
{"id": "vout", "what": "5 V out, ripple at 1 A", "net": "VOUT", "why": "regulation and ripple", "kind": "ripple", "expect": "5.0 V, under 20 mV p-p"},
{"id": "fb", "what": "feedback node", "net": "FB", "why": "loop at 0.596 V", "kind": "dc", "expect": "0.596 V"},
{"id": "led", "what": "power LED lit", "net": "LED", "why": "camera check", "kind": "camera", "expect": "on above 4.5 V in"}
]
Kinds: dc, ripple, waveform need a probe landing; camera (an LED, a display) needs none;
ground is the tether's machine contact, which must be a free MachineContactMedium on that net (the tether ends in a medium pin; a test point or a large contact cannot take it). Typical for a regulator: the input at the board, the output,
the switch node, both inductor ends, feedback, enable, power-good, the bulk caps' ripple, every LED.
Probe face: a test is probed from the top unless it says otherwise. "face": "bottom" (or "back") on a
test, or "probeFace": "bottom" beside "tests" for the whole plan, lands it on bottom-side copper only (a
board whose top is wall-to-wall parts, probed from below); "both" accepts either face. testplan check
reports the face each landing was found on.
2. Give every measurement a spot (before the schematic)
adom-aiflow testplan check --tests tests.json --netlist <netlist.json> --add maps each measurement to
its net and adds TP<n> (adom/testpoint-pad-0-5mm: a 0.5 mm round exposed-copper pad, no paste, a 1.1 mm
courtyard) on every net with no landing. A MachineContactLarge already is a landing, so its net gets no
test point. A MachineContactMedium is not one for now (see below), and neither is a corner pin. A ground
test with no medium contact is a gap --add cannot fix: add the contact. The test points go into the library and the schematic like any
part. --add also writes the test point's footprint, symbol, Fusion library and 3D model to testpoint/ beside the
netlist, because its wiki page is private and most accounts cannot read it; fusion library falls back to the same
files by itself. Read the table to the human: what you will measure and where the probe lands.
3. Check again on the real board
Run testplan check again after placement and before finish (finish runs it itself). On a board it
looks for a real landing on each net: a test point, the ring of a large contact, or an exposed pad where a 0.5 mm landing fits clear
of every part body (an inductor's pads under its body, a 1206's end caps, an IC's pins do not count) and
0.3 mm from other nets' copper, within 50 mm of a ground machine contact. A gap names why; fix it by
moving a part, adding a test point (back to the schematic), or widening copper.
The workcell's numbers (Stephen's spec, adom/probing-workcell)
- Smallest probing pad 200 um; pads under 300 um may need a human crosshair check, so 0.5 mm is the default test point. Use 1.0 mm for a signal you know you will need often.
- Two probe tips work about 3 mm apart (the 2.5 mm pogo mount).
- Every probed point within 50 mm of a MachineContactMedium ground contact; put one near each corner.
- Parts directly under a probed point under 18 mm tall; within 50 mm of it, under 40 mm.
- adom-aiflow-probing's planner still assumes a 0.3 mm tip and 0.15 mm XY error (unconfirmed); with those, a 0.5 mm pad shows negative landing margin there until the tip and error are measured.
Where test pads go on the board
- At least 1.5 mm centre to centre from every other test pad, so a probe lands on one pad only; DRC passing is not enough (two pads 0.86 mm apart pass DRC and still share a probe).
- Out of the machine-contact columns and corner-pin zones: the contacts keep their grid positions and their silkscreen tags; the test pads move.
- A net on a
MachineContactLargeneeds no test pad: its ring is about 1 mm wide, clear of the bore, so the landing fits. A net only on aMachineContactMediumor a corner pin keeps its test pad for now: a medium contact's ring is about 0.3 mm wide around the bore, thinner than the 0.5 mm landing, and the human crosshair check for pads that small is not built.
---
name: aiflow-test-plan
description: >-
Use when an adom-aiflow run reaches its test-plan step, or whenever someone asks where the board will be probed. The test-plan step of an adom-aiflow run: before the schematic is drawn, think through how the built board will be tested on the Adom probing workcell (the rails, the switch node, feedback, ripple, enable, power-good, every LED, the ground pin), write tests.json, and let `adom-aiflow testplan check` give every measurement a real probe spot, adding 0.5 mm round test points (adom/testpoint-pad-0-5mm) for the gaps; then check the landings again on the placed and finished board. Trigger words: test plan, test points, probe points, probing workcell, design for test, DFT, where will we probe, TP, testpoint, probe spot, bring-up measurements, what should we measure.
---
Parent skill: **adom-aiflow**
# aiflow-test-plan: decide what you will measure, then make sure you can
Every Adom board goes to the probing workcell after it is built: a gantry lands a pogo-tipped scope
probe on the board while a ground tether is plugged into a ground machine contact. A board can only be
tested where there is copper the probe can land on. This step makes the AI decide, before the schematic
is drawn, what a careful engineer would measure at the bench, and makes the binary prove each
measurement has a spot. It is a required step: `step` and `finish` refuse to go past it.
## 1. Think like the engineer at the bench
Write `tests.json`, one entry per measurement, from THIS circuit and its simulation, not a template:
```json
[
{"id": "vin", "what": "12 V arriving on the board", "net": "VIN", "why": "input path and the input cap", "kind": "dc", "expect": "11.4 to 12.6 V"},
{"id": "sw", "what": "switch node: frequency, ringing", "net": "SW", "why": "500 kHz, edges, dead time", "kind": "waveform", "expect": "0 to 12 V square, 500 kHz"},
{"id": "vout", "what": "5 V out, ripple at 1 A", "net": "VOUT", "why": "regulation and ripple", "kind": "ripple", "expect": "5.0 V, under 20 mV p-p"},
{"id": "fb", "what": "feedback node", "net": "FB", "why": "loop at 0.596 V", "kind": "dc", "expect": "0.596 V"},
{"id": "led", "what": "power LED lit", "net": "LED", "why": "camera check", "kind": "camera", "expect": "on above 4.5 V in"}
]
```
Kinds: `dc`, `ripple`, `waveform` need a probe landing; `camera` (an LED, a display) needs none;
`ground` is the tether's machine contact, which must be a free `MachineContactMedium` on that net (the tether ends in a medium pin; a test point or a large contact cannot take it). Typical for a regulator: the input at the board, the output,
the switch node, both inductor ends, feedback, enable, power-good, the bulk caps' ripple, every LED.
Probe face: a test is probed from the top unless it says otherwise. `"face": "bottom"` (or `"back"`) on a
test, or `"probeFace": "bottom"` beside `"tests"` for the whole plan, lands it on bottom-side copper only (a
board whose top is wall-to-wall parts, probed from below); `"both"` accepts either face. `testplan check`
reports the face each landing was found on.
## 2. Give every measurement a spot (before the schematic)
`adom-aiflow testplan check --tests tests.json --netlist <netlist.json> --add` maps each measurement to
its net and adds `TP<n>` (adom/testpoint-pad-0-5mm: a 0.5 mm round exposed-copper pad, no paste, a 1.1 mm
courtyard) on every net with no landing. A `MachineContactLarge` already is a landing, so its net gets no
test point. A `MachineContactMedium` is not one for now (see below), and neither is a corner pin. A `ground`
test with no medium contact is a gap `--add` cannot fix: add the contact. The test points go into the library and the schematic like any
part. `--add` also writes the test point's footprint, symbol, Fusion library and 3D model to `testpoint/` beside the
netlist, because its wiki page is private and most accounts cannot read it; `fusion library` falls back to the same
files by itself. Read the table to the human: what you will measure and where the probe lands.
## 3. Check again on the real board
Run `testplan check` again after placement and before finish (finish runs it itself). On a board it
looks for a real landing on each net: a test point, the ring of a large contact, or an exposed pad where a 0.5 mm landing fits clear
of every part body (an inductor's pads under its body, a 1206's end caps, an IC's pins do not count) and
0.3 mm from other nets' copper, within 50 mm of a ground machine contact. A gap names why; fix it by
moving a part, adding a test point (back to the schematic), or widening copper.
## The workcell's numbers (Stephen's spec, adom/probing-workcell)
- Smallest probing pad 200 um; pads under 300 um may need a human crosshair check, so 0.5 mm is the
default test point. Use 1.0 mm for a signal you know you will need often.
- Two probe tips work about 3 mm apart (the 2.5 mm pogo mount).
- Every probed point within 50 mm of a MachineContactMedium ground contact; put one near each corner.
- Parts directly under a probed point under 18 mm tall; within 50 mm of it, under 40 mm.
- adom-aiflow-probing's planner still assumes a 0.3 mm tip and 0.15 mm XY error (unconfirmed); with
those, a 0.5 mm pad shows negative landing margin there until the tip and error are measured.
## Where test pads go on the board
- At least 1.5 mm centre to centre from every other test pad, so a probe lands on one pad only; DRC passing is not enough (two pads 0.86 mm apart pass DRC and still share a probe).
- Out of the machine-contact columns and corner-pin zones: the contacts keep their grid positions and their silkscreen tags; the test pads move.
- A net on a `MachineContactLarge` needs no test pad: its ring is about 1 mm wide, clear of the bore, so the landing fits. A net only on a `MachineContactMedium` or a corner pin keeps its test pad for now: a medium contact's ring is about 0.3 mm wide around the bore, thinner than the 0.5 mm landing, and the human crosshair check for pads that small is not built.