You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Epic A: Stop depending on patched and external config #153
Removes the two hardest out-of-repo dependencies. Still arduino-cli — no toolchain change in this epic. The User_Setup*.h dependency dies in Epic B via build flags.
Why first
The firmware builds on exactly one machine, and one file it needs is a patched vendor library source (TFT_eSPI/TFT_Drivers/ST7796_Rotation.h) that any library upgrade silently reverts.
Key finding
The patch is unnecessary. Its case 1 writes MX|MY|MV|COLOR_ORDER — identical to stock case 3 — and the firmware calls setRotation(1) exactly once, never using rotations 4–7. One line replaces a maintained fork.
Children
A1 rotation fix · A2 vendor lv_conf.h · A3 library manifest · A4 integration test (gates Epic B)
Done when
Stock TFT_eSPI installed fresh, lv_conf.h served from the repo, firmware builds and runs with correct orientation.
The goal was to stop the build depending on files outside git. The blocking item was TFT_eSPI/TFT_Drivers/ST7796_Rotation.h, a patched vendor source file that existed on exactly one machine and that any library upgrade would silently revert.
That is resolved without forking the library. The patch turned out to be a pure permutation — its case 1 emitted the identical MADCTL to stock case 3 — so one line of our own source replaced a maintained fork. Confirmed empirically: restoring the stock driver without the source change flipped the display exactly 180 degrees, precisely the MX|MY delta the analysis predicted.
What it uncovered
The epic was scoped as "vendor three files." Four unrelated defects were in the way:
build: main no longer links — DRAM overflowed by 4296 bytes #164 — main did not link at all. dram0_0_seg overflowed by 4,296 bytes. Not a code regression: the source was untouched since 2026-03-02 and the environment drifted underneath it. Measured to a single symbol, LVGL's 160KB static heap in internal DRAM, and fixed by routing LVGL's allocator to PSRAM. DRAM went from over-by-4,296 to 103,096 bytes (31%).
bug: SPI bus down — TFT, SD and FRAM all dead; every other bus healthy #166 — the entire SPI bus was dead. TFT, SD and FRAM all down while every I2C device, the UART and WiFi were healthy. Root cause: a wire in the wrong pin on the board (SCK). Diagnosed from the device's own /diags endpoint by reading failures by bus rather than by device.
lv_conf.h is still copied into the sketchbook by the sync bridge, and TFT_eSPI's User_Setup_Select.h and Setup_Field_Compass_ESP32S3_ST7789.h still live inside the library folder. arduino-cli cannot serve either from the repo without a machine-specific absolute path.
Epic #154 retires both via build_flags = -I include -D LV_CONF_INCLUDE_SIMPLE (task B2). Signed off with the gap explicit rather than claimed as clean.
B6's parity baseline now exists. It was specified against "the known-good arduino-cli binary", which did not exist when the plan was written. It does now — the image currently running: flash 1,815,046 (62%), DRAM 103,096 (31%). Capture it before Epic B changes the toolchain.
Activity
Strycher commentedon Sep 7, 2026
@Strycher — 2026-08-09
Epic A complete — human sign-off received
Ben, 2026-08-09: integration test #160 "functionally complete and tollgate passed", followed by explicit authorisation to complete the epic.
Children
setRotation(3)in our own source. TFT_eSPI is stock — the vendor-source fork is gonelv_conf.hvendored toinclude/, withscripts/sync-lv-conf.pyas a documented bridge and drift checkWhat the epic actually delivered
The goal was to stop the build depending on files outside git. The blocking item was
TFT_eSPI/TFT_Drivers/ST7796_Rotation.h, a patched vendor source file that existed on exactly one machine and that any library upgrade would silently revert.That is resolved without forking the library. The patch turned out to be a pure permutation — its
case 1emitted the identical MADCTL to stockcase 3— so one line of our own source replaced a maintained fork. Confirmed empirically: restoring the stock driver without the source change flipped the display exactly 180 degrees, precisely theMX|MYdelta the analysis predicted.What it uncovered
The epic was scoped as "vendor three files." Four unrelated defects were in the way:
maindid not link at all.dram0_0_segoverflowed by 4,296 bytes. Not a code regression: the source was untouched since 2026-03-02 and the environment drifted underneath it. Measured to a single symbol, LVGL's 160KB static heap in internal DRAM, and fixed by routing LVGL's allocator to PSRAM. DRAM went from over-by-4,296 to 103,096 bytes (31%)./diagsendpoint by reading failures by bus rather than by device.docs/DIAGNOSTICS.md, referenced fromCLAUDE.md.Known gap, carried forward deliberately
lv_conf.his still copied into the sketchbook by the sync bridge, and TFT_eSPI'sUser_Setup_Select.handSetup_Field_Compass_ESP32S3_ST7789.hstill live inside the library folder. arduino-cli cannot serve either from the repo without a machine-specific absolute path.Epic #154 retires both via
build_flags = -I include -D LV_CONF_INCLUDE_SIMPLE(task B2). Signed off with the gap explicit rather than claimed as clean.Unblocks
Epic #154 — PlatformIO / pioarduino migration.
Two notes for whoever starts it:
Agent: IndigoForge (session b5521fc0)