# comma.ai Harness Tester Challenge — Bugs (VeigaPunk) **Repo:** https://github.com/commaai/harness_tester_challenge **Identity:** VeigaPunk · **Track:** hardware **Method:** firmware source + KiCad netlist (Eeschema export) + footprint check. Prefer show-stoppers. **Count:** **49** documented bugs (tables in CSV/XLSX). --- ## Critical — board / test cannot work 1. **`cy.begin()` never called** (`setup`) — Wire2 / expander never initialized. 2. **Expander reset left asserted** (`CY8C9560::begin`) — ends `CY_RST` LOW on active-low RESET_N → permanent reset. 3. **R3 is I2C SDA pull-down** (netlist: R3.1=GND, R3.2=CY_SDA with U2/U4). R2 correctly pulls SCL to +3.3V. Bus broken. 4. **GPS UART not crossed** (netlist): - `UBX-TXD` = Teensy TX1 + NEO-M8N **TXD** - `UBX-RXD` = Teensy RX1 + NEO-M8N **RXD** TX–TX and RX–RX; NMEA never arrives. 5. **VDD_USB (U3 pin7) → GND** (netlist). Must be VCC per u-blox. 6. **Q1 reverse-polarity FET S/D swapped** — sources on protected `+12V`, drain on raw J1 input; gate to GND via R1. High-side ideal diode inverted → body diode blocks power. 7. **RGB LED: no series resistors** — cathodes direct to GPIO 5/6/7. 8. **`1 << i` overflow** for pins ≥31 (need `1ULL`); pins 31–39 broken. 9. **Pass/fail OR not AND** — any one pin match ⇒ harness PASS. 10. **Button polarity inverted** — active-low with R4; code returns on LOW so test runs when idle. 11. **`set_output()` forces all ports OUTPUT** (`REG_PIN_DIRECTION=0x00`) → contention on shorted harness pins. 12. **`set_pd_inputs()` writes DIRECTION=0xFF for all ports** — overwrites the driven pin back to input (fights set_output). 13. **Device ID check `0x06` vs CY8C9560A family `0x04`**. 14. **LED pins 5/6/7 never `pinMode(OUTPUT)`**. 15. **GPS SAFEBOOT/RST never `pinMode(OUTPUT)`**. 16. **SAFEBOOT held LOW permanently** — `digitalWrite(PIN_UBX_SAFEBOOT, LOW)` asserts active-low ~SAFEBOOT so module stays in safeboot (not normal NMEA). ## High — wrong results / silent failures 17. **FAILED LED wiped every loop** — after test, `set_status(GOOD)` runs at top of loop while `time_fixed`, so FAIL is invisible. 18. **EXPECTED_CONNECTIONS self-bits vs `~output_mask`** — match structurally impossible. 19. **MSB vs LSB bit-order** in expected matrix vs `1<