Repository navigation
Description
Goal
We now have an LPC845-BRK physically on-hand and wired up. The remaining LPC8xx work is no longer hardware-blocked — this meta exists so we can burn it down end-to-end with a single rundown view across the fbuild side, the FastLED side, and the upstream framework / platform packages.
This is not a redesign. The existing per-issue plans stand. This meta only consolidates the remaining checklist so triage is one click.
For the FastLED-internal driver / RX / multi-strip / harness work, see the companion meta FastLED/FastLED#3040 — items unique to that scope live there.
Status of preceding metas
- FastLED/fbuild#487 — Stages 1-8 staircase closed.
- FastLED/FastLED#2836 — original two-stage port plan closed (Stages 1 + 2a shipped via #2837 / #2872).
- FastLED/FastLED#2845 — Stage 3 + 4 meta closed (hardware-side Stage 3.5/3.6 was carved out as #2880, now closed).
- FastLED/fbuild#553 — extra_scripts lite-SCons supersedes MockEnv; closed.
Open work — fbuild side
1. Deploy path on the LPC845-BRK board
Now unblocked by hardware-on-hand. The standalone monitor flow that #532 / #577 / #580 hardened end-to-end should now have a parallel deploy story for this board.
- LPC8xx Stage 7: deploy support (lpc21isp / pyocd / cmsis-dap / jlink) #551 — LPC8xx Stage 7: deploy support (
lpc21isp/ pyocd / cmsis-dap / jlink). NoDeployerwired today; the daemon falls through"deployer for NxpLpc not yet implemented". Hardware verification on the LPC845-BRK can now drive the implementation. - LPC845-BRK: deploy must always unwedge the shared VCOM (pyocd/SWD flash leaves CDC in Windows error 31) #565 — LPC845-BRK: deploy must always unwedge the shared VCOM. Concrete blocker on the flash-then-monitor cycle: pyocd/SWD flash leaves the on-board CDC in Windows error 31, only physical USB replug recovers. The acceptance criterion is "deploy must always unwedge" — primary path =
lpc21ispISP-over-UART (never opens the composite-device HID), fallback = SWD with a deterministic post-flash recovery modeled onTeensyDeployer. Gated on LPC8xx Stage 7: deploy support (lpc21isp / pyocd / cmsis-dap / jlink) #551.
2. Build-flag propagation gap
- (needs sub-issue) — The nxplpc orchestrator does not propagate
platformio.ini [env:*] build_flagsinto the per-env compile command. Mentioned in #574's body and worked around in #576 by baking the defines into the board JSON. Either tackle it inside the broader namespaced routing design (fbuild: design unified namespaced routing for platform/framework/library artifacts driven by platformio.ini [env:*] #574) or split it out as a focused 50-line fix; either way the workaround needs retiring.
3. CI canary for the 5 variants
- LPC8xx Stage 6: FastLED canary — Blink/DemoReel100/FxEngine compile for lpc845/lpc804 #550 — LPC8xx Stage 6: FastLED canary — Blink/DemoReel100/FxEngine compile for lpc845/lpc804. The five
build-lpc*.ymlworkflows are real (un-stubbed via ci(lpc8xx): un-stub lpc845brk + lpcxpresso804 builds (Stage 8 of #487) #548 / feat(lpc8xx): real Arduino Blink fixtures for lpc804/lpc845 (Stage 3 of #487) #549); what's missing is FastLED's bit-bang driver + a Blink sketch built against fbuild. Hardware verification (this meta's unlock) lets the canary include a smoke-test on real silicon. - lpc8xx: fbuild build is shipping for all 5 ArduinoCore-LPC8xx variants — add FastLED canary sketches to CI FastLED#2990 — fbuild build is shipping for all 5 ArduinoCore-LPC8xx variants — add FastLED canary sketches to CI. The FastLED-side mirror of LPC8xx Stage 6: FastLED canary — Blink/DemoReel100/FxEngine compile for lpc845/lpc804 #550; once the canary green-builds we can declare LPC8xx CI parity.
Open work — FastLED side (fbuild-relevant)
These are the FastLED-side items that intersect with fbuild's deploy / build / CI pipeline. The pure-driver / RX / multi-strip items live under #3040.
- AutoResearch: wire LPC845-BRK into bash autoresearch harness FastLED#3004 — AutoResearch: wire LPC845-BRK into bash autoresearch harness. Now unblocked — board on-hand, JSON-RPC bringup already verified on the LPC845-BRK via the fix(nxplpc): pin heap base past .bss + LPC845 bringup fixes #568/fix(nxplpc): run C++ global ctors in startup (__libc_init_array) #569/feat(nxplpc): vendor ArduinoCore-LPC8xx, retire embedded arduino_stub (#479, #487) #570 chain.
- feat(lpc845): WWDT watchdog driver + FL_WARN_LIT enabled on Low-memory FastLED#3014 — LPC8xx WWDT driver + FL_WARN_LIT on low-memory + pin-bridge
probePairRPC. In flight; hardware speeds up the watchdog + probe validation. - LPC845-BRK: WS2812 loopback validation via SCT-capture RX channel FastLED#3015 — LPC845-BRK: WS2812 loopback validation via SCT-capture RX channel. Three stacked gates per the issue body: flash-budget (#3002),
RxDevicefor LPC845 (the SCT-capture driver), autoresearch wiring. Hardware on-hand makes the loopback meaningfully testable. - fl::json: replace double with templated fixed-point variant to drop libgcc soft-FP bloat on embedded FastLED#3002 —
fl::json→ templated fixed-point variant to drop libgcc soft-FP bloat. Flash-budget unblocker for #3015. Partially landed via #3012 / #3013. - convention: platform (sub)type macros must follow FL_IS_<PLATFORM> (e.g. FL_IS_ARM_LPC_845, not FL_LPC845) FastLED#2999 — convention: platform (sub)type macros must follow
FL_IS_<PLATFORM>(e.g.FL_IS_ARM_LPC_845, notFL_LPC845). Cleanup; can land any time.
Open work — upstream packages
- zackees/ArduinoCore-LPC8xx#7 — fact-check linker scripts and core code against references. Hardware verification is exactly what catches the failures here.
- zackees/platform-nxplpc-arduino#1 — make LPC8xx board manifests work in standalone PlatformIO projects. Affects fbuild interop only indirectly (since fbuild reads its own board manifests); document the divergence either way.
Dependency edges
Hardware-on-hand (this issue)
├──unblocks──► #551 ──blocks──► #565 (deploy + VCOM unwedge)
├──unblocks──► FastLED#3004 (AutoResearch wiring)
├──unblocks──► FastLED#3014, FastLED#3015 (driver + loopback validation)
└──unblocks──► ArduinoCore-LPC8xx#7 (linker / core fact-check)
FastLED#3002 (partial) ──blocks──► FastLED#3015 (flash budget gate)
FastLED#3015 ──follows──► RxDevice / SCT-capture implementation in #3040
#551 ──blocks──► #550 (canary needs deploy for the smoke-test step)
FastLED#2990 (same)
Acceptance
This meta closes when:
- All
[ ]items above are either closed or explicitly punted with a follow-up linked here. - The LPC845-BRK builds + flashes + monitors + AutoResearch-round-trips on a real board through one full
fbuild deploy + monitorcycle without intervention. - FastLED CI on the 5 LPC8xx variants is green on
masterfor at least one full release cycle.
When (1) + (2) + (3) hold, declare LPC8xx end-to-end support shipped and close this meta + close any survivors that effectively duplicate it.
Decisions / framing
- Scope = end-to-end LPC8xx burn-down on the fbuild side, cross-linked to FastLED. Not a redesign. Not a relitigation of the Stages 3/4 plan from the closed metas.
- Priority: P2 (tracker). Each sub-issue carries its own priority; this meta is a triage view.
- Pair with FastLED/FastLED#3040 rather than duplicate it. That meta owns the FastLED-internal driver/RX/multi-strip rundown; this one owns the fbuild deploy + CI-integration story plus the cross-repo connection.
- The hardware-on-hand unblock is the trigger. Items that were only gated on "needs a maintainer with a board" can now move.
cc @zackees
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTriage
Activity
zackees commentedon Jun 14, 2026
Audit pass — actual state of each sub-issue
Fanned out 12 parallel investigations against the rundown. Reality is significantly further along than the original meta body suggested — four sub-issues already auto-closed mid-flight, two more are stale-on-merged-PRs, and one (
#574's concretebuild_flagsbug) needs a focused 5-10 LOC fix that follows the ESP32 pattern.Already closed (auto-closed by merged PRs since this meta was filed)
watchdog_lpc.impl.hpp(commitb9d1efbf29),FL_WARN_LITatlog.h:256,probePairRPC verified on real LPC845-BRK.rx_sct_capture.{h,cpp.hpp}+RxBackend::LPC_SCT_CAPTURE(commit3e2cdca82a), autoresearch loopback (commits 3024/3031/3034).FL_IS_<PLATFORM>macro rename — closed 2026-06-14 10:15 UTC via PR #3017 (commit8c2a8f582a).examples/AutoResearchLpc/AutoResearchLpc.inoexists,ci/autoresearch/phases.pydispatches LPC, hardware verified.Stale on merged PRs — closed in this pass
zackees/ArduinoCore-LPC8xx#7— fact-check linker scripts and core code against references — closed. Seven merged PRs (Preserve emulator/simulator metadata in BoardConfig for runtime runner selection #22, Implement first AVR emulator backend with SimAVR and track avr8js follow-on #24-feat(cache): two-phase disk cache with LRU GC and SQLite index #29) shipped every substantive correction the fact-check would have flagged (SYSCON map,.ARM.exidx, heap base, F_CPU,operator new/delete, libgcc packing). Empirical receipt: LPC845-BRK JSON-RPC bringup verified downstream via FastLED/fbuild#568 + #569.zackees/platform-nxplpc-arduino#1— standalone PlatformIO project board manifests — closed.boards/directory + five board manifests shipped via commite583a43; PRs Add CDC on boot warning to ESP32 builds #4/Add VSCode extension scaffold (vscode-fbuild/) #5/Add Serial/USB foot-gun warnings for AVR (ATmega32U4), RP2040, and Teensy #6 wired linker defaults +f_cpu. Verified by buildingBlinkwith emptyldscripteverywhere (RAM 16 K / Flash 64 K onlpc845brk; RAM 4 K / Flash 32 K onlpcxpresso804).Concrete bug NOT fixed — focused follow-up filed
🟡
FastLED/fbuild#574— the broader namespaced routing design stays open. The concrete bug in its body ("nxplpc orchestrator does NOT propagate platformio.ini build_flags") is still real. The propagation works for the sketch compile viapipeline/sequential.rs:57-67, but the library compile atnxplpc/orchestrator.rs:247-257constructsLibraryBuildEnvwith rawcompiler.c_flags()/compiler.cpp_flags()— noctx.user_flagsfolded in. That's exactly why PR feat(nxplpc): find_core_root + LPC845 RELEASE defines + pin bump to ACLPC#29 #576 had to bake-DRELEASE=1 -DFASTLED_DISABLE_DBG=1intolpc845brk.jsoninstead.→ The fix template is at
esp32/orchestrator/build.rs:423-425(apply_overlay_flags(&p_compiler.c_flags(), &src_overlay, "dummy.c")and the.cppanalogue). Filed #587 — its scope is now (i) port the ESP32 lib-overlay pattern to nxplpc, (ii) regression-proof fixture, (iii) retire the board-JSON stopgap.Genuinely open + hardware-on-hand unblocks
FastLED/fbuild#551— Stage 7 deploy support — noDeployerwired; daemon falls through"deployer for NxpLpc not yet implemented"atdeploy.rs:707. Hardware unlocks the implementation.FastLED/fbuild#565— VCOM unwedge — no LPC deployer module exists; #568 confirms the unwedge is gated. Gated on LPC8xx Stage 7: deploy support (lpc21isp / pyocd / cmsis-dap / jlink) #551.FastLED/fbuild#550— Stage 6 canary — workflows un-stubbed and Blink fixture compiles green,src/platforms/arm/lpc/shim shipped (16 files). Missing: DemoReel100 / FxEngine fixtures.FastLED/FastLED#2990— 5-variant CI canary — LPC dispatcher + bit-bang driver shipped in FastLED, but zero LPC variants are in.github/workflows/build.yml. The fivebuild-lpc*.ymlfiles need to be added there.Partial — re-scope
FastLED/FastLED#3002—fl::jsonfixed-point variant — partial. #3012 + #3013 + #3038 shipped libm gating + IEEE 754 codec, recovering most of the flash budget the issue targeted; the variant is nowfloat-only attypes.h:652. The original "templated fixed-point" implementation strategy from the issue body was not implemented — a faster path (libm gating + float-only variant) achieved the same goal with less churn. Suggestion: update the issue body to acknowledge the alternative path, or close if you consider the flash-budget intent met.Updated burn-down rundown
build.ymlSo the actually-remaining LPC8xx burn-down is 5 items:
#551,#565,#550,FastLED#2990,#587. Three of the five are in fbuild and unblock cleanly with hardware-on-hand. Two are CI-canary completion. The path to closing this meta is direct.zackees commentedon Jun 14, 2026
Erratum on the previous comment
Re-checking the prior status comment — the claim about
build_flagspropagation in nxplpc being "actually fixed" is wrong. PR #576's explicit note that "build_flags are not propagated by the nxplpc orchestrator today" still holds.What I missed: the Explore agent's audit only traced the sketch compile path (
pipeline/sequential.rs:57-67, wherectx.user_flagsare correctly chained intouser_overlay.common). It didn't check the library compile path atnxplpc/orchestrator.rs:247, which constructsLibraryBuildEnvwith rawcompiler.c_flags()/compiler.cpp_flags()— no overlay applied, nouser_flagsfolded in. That's the exact gap that drove PR #576 to bake-DRELEASE=1 -DFASTLED_DISABLE_DBG=1intolpc845brk.json'sextra_flags: those defines need to reach FastLED's library compile, not just the sketch.The ESP32 orchestrator handles this correctly at
esp32/orchestrator/build.rs:423-425viaapply_overlay_flags(&p_compiler.c_flags(), &src_overlay, "dummy.c")(and the.cppanalogue).nxplpc(andavr, fwiw) don't have that step.Corrections
CONCRETE-BUG-FIXED-DESIGN-OPENtoSTILL-OPENfor the concrete bug; the broader namespaced routing design stays open as before.esp32/orchestrator/build.rs:423-425.What's unchanged in the burn-down
zackees/ArduinoCore-LPC8xx#7andzackees/platform-nxplpc-arduino#1stands — those audits were against actual file state and didn't rely on the wrong propagation claim.Net effect on the burn-down headcount: 5 remaining items — same as before, since #587 was already in that count; only its scope (5-10 LOC of porting plus the cleanup, not just the cleanup) has been corrected.
Sorry for the propagated misinformation. "Trust but verify" — the agent's report was confident but only covered half the path.
zackees commentedon Jun 14, 2026
Item 2 (build-flag propagation) — closed
Item 2's
*(needs sub-issue)*carve-out was filed as #587 and shipped via PR #588 (merged 2026-06-14). The nxplpc orchestrator now foldsctx.user_flagsinto theLibraryBuildEnvoverlay viaapply_overlay_flags, mirroring the ESP32 library-compile path. PR #588 also retired the-DRELEASE=1 -DFASTLED_DISABLE_DBG=1stopgap fromlpc845brk.json(the only LPC variant carrying it).Also in this burn-down pass:
validate_boards.pyreconciliation) had been partially shipped — only the bare MCU ids (lpc845,lpc804) were listed inFBUILD_NATIVE_BOARDS. The three Arduino-style variants (lpc845brk,lpcxpresso804,lpcxpresso845max) were silently slipping through the "platform not installed, skip" branch. PR fix(ci): list 3 more LPC8xx variants as fbuild-native (#456 item 3.8) #589 (merged 2026-06-14, closing Meta: LPC port completion — Stage 3 fbuild-side items from FastLED #2845 #456) lists all five and surfaces them in the fbuild-native tally (2 → 5).Remaining open items in this meta:
🤖 Filed via Claude Code as part of the /loop terminal pass over open issues > 200.
zackees commentedon Jun 15, 2026
/clud-fix readiness check — investigation report only (not a PR)
/clud-fixagainst this meta short-circuits at the intake gate: atracking-labeled umbrella issue has no single concrete reproduction, no single falsifiable symptom, and no single PR can close it (acceptance = all sub-issues closed + hardware deploy cycle + CI green for a release cycle). Per the skill, the deliverable for an under-specified or multi-PR issue is a report, not a PR. Posting that here and stopping the loop.State of the 5 remaining items (re-confirmed today)
Deployermodeled onTeensyDeployercould be written + smoke-built without the board; thelpc21ispISP-over-UART path and the pyocd/SWD fallback both need real LPC845-BRK to confirm. Suggest: implementation PR + explicit "hardware bench test pending" gate on merge.find .github/workflows -iname "*lpc*": FastLED has zero LPC workflow files today. The 5 fbuild workflows (build-lpc804.yml,build-lpc845.yml,build-lpc845brk.yml,build-lpcxpresso804.yml,build-lpcxpresso845max.yml) exist on the fbuild side; need to be mirrored as FastLED-side compile canary workflows following the existingbuild_*.ymlpattern (e.g.build_apollo3_red.yml).What changed since yesterday's audit
Nothing new closed today (between 2026-06-14 23:50 UTC and now). No new open fbuild PRs in flight. The burn-down count remains 5 items, same as the last comment.
Recommended next actions (in scope-ascending order)
.github/workflows/as compile-only canary jobs. Pure YAML / Action wiring, no hardware. Clean/clud-pr FastLED/FastLED#2990target.DemoReel100andFxEngineto the Stage 6 canary matrix in fbuild. Clean/clud-pr FastLED/fbuild#550target.Deployerfor nxplpc modeled onTeensyDeployer, both ISP and SWD paths), but the merge gate needs your bench validation on the LPC845-BRK. Worth scoping as its own/clud-pronce you decide whether to land the code with an explicit "hardware bench pending" caveat or to wait until you can validate concurrently with implementation.Why I'm not opening a PR from this run
/clud-fixrequires a concrete reproduction case to validate against (step 7) — for a meta tracking issue, there is no single "reproduction" to re-check. Opening a PR titled "Closes #586" against any single sub-item would either close the meta prematurely or leave it open with a PR that doesn't actually close it. Either way violates the skill's contract. The next step is for you to pick which of items (1)–(4) above to drive next; once chosen,/clud-fix <that-sub-issue>runs cleanly.Filed via Claude Code —
/clud-fixskill intake-gate report on tracking meta.ci(lpc8xx): extend canary to Blink + DemoReel100 + FxEngine (closes f…
zackees commentedon Jun 15, 2026
`/clud-fix` burn-down pass — 3 of 5 sub-items closed today
Run-up against the user's "LPC has been brought up, fix the issues" directive. State after this pass:
Hardware bench checklist remaining on #595
The Rust side is in. The validation that closes the LPC-deploy story end-to-end is the bench:
When both tick, the lpc21isp path is bench-validated and the SWD follow-up that #565 ultimately tracks can be scoped separately.
Remaining open from this meta
After this pass, the meta has effectively 2 line items still:
Plus any new LPC issues filed today that aren't yet in the meta body's checklist (FastLED/FastLED#3079 / #3076 / #3046 / fbuild#591 / #594 noticed during the sweep — fold in if you want them swept next pass).
Filed via Claude Code - `/clud-fix` skill meta burn-down.
zackees commentedon Jul 7, 2026
probe-rs / LPC-Link2 deploy subset resolved
The focused probe-rs + LPC-Link2 path has been rolled up and completed under #1000 / PR #1001.
Current state:
fastled-v0.31.2-nusb-v1-transport) with pinned artifact names and GitHub SHA256 digests for all six host targets.LpcDeployernow prefers probe-rs SWD when the LPC-Link2 CMSIS-DAP probe enumerates, keepslpc21ispfallback, and exposesfbuild deploy --no-probe-rs.Merged PR: #1001 (
cc319808).Post-merge hardware validation on current
origin/main:soldr --no-cache cargo build -p fbuild-cli -p fbuild-daemonpassed.FBUILD_DEV_MODE=1 .\target\x86_64-pc-windows-msvc\debug\fbuild.exe deploy tests\platform\lpc845brk -e lpc845brk --port COM10 --verboseexited 0.attempting SWD flash via probe-rs (binary=C:\Users\niteris\.fbuild\dev\tools\probe-rs\probe-rs.exe, chip=LPC845M301JBD48, probe=1fc9:0132, firmware=tests\platform\lpc845brk\.fbuild\build\release\firmware.elf)with no fallback line.Leaving this broader meta open for its remaining non-probe-rs LPC burn-down scope.
zackees commentedon Jul 7, 2026
Focused probe-rs + LPC deploy audit/meta opened as #1002. Treat #1002 as the active replacement for the closed #1000 roll-up when tracking the probe-rs/LPC-Link2 deploy subset; this broader LPC burn-down remains open for the rest of the LPC8xx scope.
zackees commentedon Jul 8, 2026
Closing as reconciled / stale umbrella.
Current state after the July 2026 follow-up pass:
bash autoresearch lpc845 --upload-port COM10 --timeout 120s --skip-lintand the #3615 fault validation run.This issue no longer tracks unique actionable scope. New LPC work should be filed as a focused issue against the specific fbuild/FastLED surface rather than reopening this old umbrella.