Repository navigation
Description
Goal
Roll up the structural lessons from the FastLED LPC845-BRK bring-up incident (FastLED/FastLED#3300 / #3325 / #3339) into a single point of triage for the fbuild side. The Python-side fixes already landed (FastLED#3339, merged). This meta tracks the fbuild-side counterparts identified during a four-axis audit of fbuild's issue tracker — each gap got its own focused issue; this list ties them together so the maintainer has one URL.
How this list was built
Four sub-agents fanned out in parallel against four independent axes of fbuild coverage. Each agent compared lessons from the FastLED incident against fbuild's open + closed issues. Concrete gaps with no existing tracker became individual issues; gaps already covered by an existing tracker were noted and not duplicated.
The four axes:
- Reset + serial wire-protocol — DTR/RTS, reset method dispatch, boot-mode detection.
- Deploy + flash path — pyocd/CMSIS-DAP integration, artifact verification, handoff timing.
- Agent-facing tooling + hook policy — forbidden-tool guards, agent docs parity.
- Bring-up + autoresearch parity — end-to-end orchestrator, schema validation, hardware CI.
Sub-issues
Axis 1 — Reset + serial wire-protocol (4 issues)
Parent: #684 (closed) — hard_reset_blocking DTR=low fix. The structural follow-ups:
- #687 —
fbuild-serial:BoardFamilyenum + polymorphicResetMethoddispatch registry. - #688 —
fbuild-serial::boot_mode: generalize to per-familyBootModeClassifierregistry (ESP-only today). - #689 — docs: USB CDC DTR/RTS control-line semantics matrix per board family.
- #686 —
fbuild-serial: vendor aserial-probeCLI + sharedBOARD_FINGERPRINTStable (companion to closed fbuild-serial: hard_reset_blocking leaves DTR=low — fatal for CDC-ACM bridges (LPC11U35, FTDI CDC). Mirror the FastLED #3300/#3339 lessons. #684, parallel to FastLED#3339).
Axis 2 — Deploy + flash path (4 issues)
- #690 —
fbuild-deploy: pre-deploy artifact size validation against board flash region. - #691 —
fbuild: standardize flash→monitor handoff timing as per-familyHandoffTimingonBoardFamily. - #692 —
fbuild-deploy: enumerate supported deploy protocols per board; fail fast on unsupported. - #693 —
fbuild-serial: USB-level bootloader re-enumeration detection (complement to fbuild-serial::boot_mode: generalize to per-family BootModeClassifier registry (ESP-only today) #688 serial-line classifier).
Axis 3 — Agent-facing tooling + hook policy (2 issues)
- #694 —
ci/hooks: ban directpyocd/esptool/dfu-util/picotoolinvocation (mirror FastLEDcheck_forbidden_commands). - #695 —
agents/docs/: agent-facing documentation directory + top-levelCLAUDE.mdrouting table (mirror FastLED).
Axis 4 — Bring-up + autoresearch parity (3 issues)
- #696 — ci: nightly hardware-attached bring-up CI runner (multi-family).
- #697 —
fbuild-cli: promote bring-up orchestrator to first-classfbuild bringup <board>command. - #698 —
fbuild-rpc-validate: reusable host-side JSON-RPC schema fetch + validate component.
Dependency hints (for ordering work)
- #687 is a load-bearing prerequisite for #691 (
HandoffTiminglives onBoardFamily) and partially for #693 (TouchBaud1200consumes the bootloader watcher). - #686 is the data foundation for fbuild-serial: BoardFamily enum + polymorphic ResetMethod dispatch registry #687, fbuild-deploy: enumerate supported deploy protocols per board; fail fast on unsupported #692, fbuild-serial: USB-level bootloader re-enumeration detection (complement to #688 serial-line classifier) #693, fbuild-rpc-validate: reusable host-side JSON-RPC schema fetch + validate component #698. The fingerprint table is the cheapest first land.
- #689 is the design doc that underpins fbuild-serial: BoardFamily enum + polymorphic ResetMethod dispatch registry #687 and fbuild: standardize flash→monitor handoff timing as per-family HandoffTiming on BoardFamily #691 — landing it first reduces design-review friction on the code issues.
- #695 (
agents/docs/) blocks nothing technically but accelerates every other issue's review cycle.
Suggested rough order: #686 → #689 → #695 → #687 → #691 → #694 → rest.
Out of scope (deliberately not filed)
Three candidate gaps surfaced during the audit but were ruled out:
- Application-specific bring-up details — 3-way pass-criteria tuple, per-board echo sentinel value, watchdog feed pattern. These belong on the FastLED side.
- Cross-repo agent rule sync — governance-level meta-question, not actionable as a single fbuild ticket.
- Skill / slash-command registration — Claude Code plugin infrastructure concern, not fbuild's responsibility.
Refs
- FastLED/FastLED#3300 — the LPC845-BRK bring-up "silence" incident (root).
- FastLED/FastLED#3325 — bisection plan (false trail invalidated by #3339).
- FastLED/FastLED#3336 — agent doc/hook rule banning ad-hoc PowerShell SerialPort probes; resolved by FastLED#3339.
- FastLED/FastLED#3339 — the FastLED-side fix that merged (Python DTR/RTS + port detection +
serial_probe.pyhelper + hook ban). - FastLED/fbuild#586 — existing LPC845-BRK on-hand burn-down meta. This issue intersects but is broader (covers all board families).
- FastLED/fbuild#684 (closed) — the
hard_reset_blockingDTR=low fix that opened the audit.
Filed during the audit fan-out on FastLED/FastLED#3339.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTriage
Activity
zackees commentedon Jun 20, 2026
All 13 listed sub-issues are now merged and closed:
Net structural delta on the fbuild side, mirroring the FastLED-side FastLED/FastLED#3339:
idle_dtr_rts(fbuild-serial: hard_reset_blocking leaves DTR=low — fatal for CDC-ACM bridges (LPC11U35, FTDI CDC). Mirror the FastLED #3300/#3339 lessons. #684/fbuild-serial: vendor a serial-probe CLI + shared BOARD_FINGERPRINTS table (companion to closed #684, parallel to FastLED #3339) #686),reset_method+dispatch_reset(fbuild-serial: BoardFamily enum + polymorphic ResetMethod dispatch registry #687),handoff_timing(fbuild: standardize flash→monitor handoff timing as per-family HandoffTiming on BoardFamily #691),BootModeClassifier::Registry::for_family(fbuild-serial::boot_mode: generalize to per-family BootModeClassifier registry (ESP-only today) #688), bootloader-watcherBootloaderSignature::for_family(fbuild-serial: USB-level bootloader re-enumeration detection (complement to #688 serial-line classifier) #693).fbuild serial probe list|find|read(fbuild-serial: vendor a serial-probe CLI + shared BOARD_FINGERPRINTS table (companion to closed #684, parallel to FastLED #3339) #686),fbuild bringup <env>(fbuild-cli: promote bring-up orchestrator to first-class command #697),agents/docs/(agents/docs/: agent-facing documentation directory + top-level CLAUDE.md routing table (mirror FastLED) #695).forbidden_commands.pyhook banning ad-hocpyocd/esptool/dfu-util/picotool/probe-rs(ci/hooks: ban direct pyocd / esptool / dfu-util / picotool invocation (mirror FastLED check_forbidden_commands) #694).BOARD_FINGERPRINTStable (fbuild-serial: vendor a serial-probe CLI + shared BOARD_FINGERPRINTS table (companion to closed #684, parallel to FastLED #3339) #686),ENVIRONMENT_TO_VCOM(fbuild-serial: vendor a serial-probe CLI + shared BOARD_FINGERPRINTS table (companion to closed #684, parallel to FastLED #3339) #686),docs/usb-cdc-control-line-matrix.md(docs: USB CDC DTR/RTS control-line semantics matrix per board family #689) + handoff-timing table (fbuild: standardize flash→monitor handoff timing as per-family HandoffTiming on BoardFamily #691),agents/docs/hardware-ci-setup.md(ci: nightly hardware-attached bring-up CI runner (multi-family) #696)..github/workflows/hw-ci.yml(ci: nightly hardware-attached bring-up CI runner (multi-family) #696),tests/hw/fixtures (ci: nightly hardware-attached bring-up CI runner (multi-family) #696).fbuild_serial::rpc_validate::{RpcSchema, ValidationReport}(fbuild-rpc-validate: reusable host-side JSON-RPC schema fetch + validate component #698).No additional issues surfaced during the audit beyond the 13 originally fanned out. Each follow-up not landed in this round is named in its parent issue's "Out of scope" section.
Closing the meta.