Thirteen expensive lessons from building the machine
The failures that became permanent engineering rules.
OUR OBSERVATIONLast verified: 2026-09-27 · Build 1.9.37
- Two numpy worlds. Runtime/camera on numpy 1.26.4; training subprocess on 2.1.3.
- Map before training. Random-weight mapping + negative controls before expensive runs.
- Verify deployment. Three tests were wasted because code never reached the Pi.
- Explain every rejection. “background 66% vs carabiner 43%” exposed empty negatives.
- Empty negatives poison the class. Guard them out.
- Vignetting beats global threshold. Model the belt locally.
- One empty frame is not a model. Use median + per-pixel noise over 16 frames.
- Angles move with the image. Rotation/mirroring must transform annotation; a sign bug hid at 90/180/270° and appeared at 45°.
- Handed parts are not freely mirrorable.
- Image the SD card, not only tar. A damaged card killed the VideoCore mailbox.
- Kernel 6.12 needs driver patches.
- One file, one active editor. Two AI assistants overwrote the same UI file.
- Fix glare at the source first. Polariser/lighting before masks.
