Skip to content

P0-14: Retire the TreeHouse Pi Pico LED path per ADR-0020; finish Display→Controllable rename #192

Open

Description

@charliehuge

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. Keep ShowMode, GardenState, Controllable.
  • From coordinator.py: DioramaConfig, DormerConfig, Forge & Flora and porch config, LED cases in build_displays, get_all_frames, _led_displays, set_display_pattern, reset_porch_lights, _porch_lights.
  • From main.py: PicoDriver wiring, --no-pico flag.
  • From visualizer.py: /control/led/pattern, /control/forge-mode, /control/porch/* endpoints (:92-127). From Dashboard/treehouse.html: the matching controls (~60 lines).
  • From settings.json: pico_dioramas, pico_structure, dioramas, dormer, porch_lights, garage_windows, attic blocks (~70 lines). Keep locations, 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,22 stale 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentImplementation task suitable for an AI agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions