Repository navigation
Description
Part of #175 (audit Phase 0). Decision D1: the five ESP32-S3 location controllers are installed. Evidence: docs/audit/2026-11-09/detail/showcontrol-core.md §2 "Live-but-inert" and "Display → Controllable rename status"; detail/firmware-prototypes-pipes.md §1b.
Why. ADR-0020 states the Pico path "stays in the tree until the ESP32-S3 hardware is physically installed, then is removed along with pico_driver.py and the pico_* blocks in settings.json". ADR-0021 made the ESP32s run standalone. The Pi path cannot drive the documented hardware anyway: coordinator.py:177 reads settings key pico but settings.json:2-10 has pico_dioramas/pico_structure, so the single PicoDriver (main.py:149) falls back to /dev/ttyACM0; dormer.pico_pin=0 collides with dioramas[0].pico_pin=0 and porch_lights.pico_pin=1 with dioramas[1]; LEDDisplay.update() (led.py:60-63) ignores GardenState entirely. Production treehouse.service:14 still opens the Pico at boot.
Delete.
ShowControl/TreeHouse/pico_driver.py,displays/led.py,displays/effect.py,displays/porch_lights.py,test_forge_and_flora.py.- From
displays/base.py:LEDControllable,ChannelFrame,Color,scale_color. KeepShowMode,GardenState,Controllable. - From
coordinator.py:DioramaConfig,DormerConfig, Forge & Flora and porch config, LED cases inbuild_displays,get_all_frames,_led_displays,set_display_pattern,reset_porch_lights,_porch_lights. - From
main.py:PicoDriverwiring,--no-picoflag. - From
visualizer.py:/control/led/pattern,/control/forge-mode,/control/porch/*endpoints (:92-127). FromDashboard/treehouse.html: the matching controls (~60 lines). - From
settings.json:pico_dioramas,pico_structure,dioramas,dormer,porch_lights,garage_windows,atticblocks (~70 lines). Keeplocations,looking_glass,branch_controller,club_screen. Firmware/TreeHouse_PicoLEDs/.docs/TreeHouse.md:11,15-17,143-148,164-171,218,234(Pico wiring, udev, troubleshooting);treehouse.service:6-7,22stale comments.
Rename. With the LED classes gone, finish the stalled rename: LookingGlassDisplay → LookingGlassControllable (or LookingGlass), package displays/ → controllables/, Coordinator._displays/display_names/build_displays → _controllables/build_controllables. Then CONTEXT.md:85,88 avoid-notes become true and can be shortened.
ADRs. Mark ADR-0010 Status: Superseded by ADR-0020. Add a one-line "removal executed " to ADR-0020's consequences.
Done when. grep -rin pico ShowControl/TreeHouse ShowControl/Dashboard is empty; no class named *Display remains; coordinator.py is under ~250 lines; make test green (the three remaining TreeHouse test files still pass). About 800 LOC removed.
Activity