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
Meta / tracking issue: burn down the remaining open fbuild issues, one at a time
Sequencing/tracking issue for the 3 remaining open work items on FastLED/fbuild. Worked and merged one by one in the order below — chosen by dependency first, then scope (the tight, shared-code daemon pair before the large architectural refactor). Check each box as its PR merges; this meta auto-closes when all are CLOSED.
Snapshot taken 2026-07-09. Open work: #1009, #1010, #574. (Successor to #1007, whose only remaining item is #574 — see Phase 2.) The recently-completed compile-parallelism split is #1008.
Phase 1 — daemon robustness cluster
These two are siblings sharing one code surface (crates/fbuild-cli/src/daemon_client.rs spawn/endpoint logic) — both fallout from the #940 → #1006 daemon-identity work. Do them together, correctness-first, since #1009's per-checkout endpoint keying gives #1010 a natural bind target.
Work: add a spawn lock / single-flight so only one invocation spawns; bind the port before heavy init so late arrivers detect the winner and wait rather than racing; arbitrate early instead of after a 10 s poll × 3. The broker path exists but silently falls back to the direct path when no broker runs (the common case) — close that gap.
Phase 2 — architecture (largest refactor, do last)
Work: define a typed EnvNamespace { platform, board, framework, env_id } in fbuild-core/fbuild-config; thread it through every package fetcher, compile invocation, cache path, and output dir; propagate [env:*]build_flags to framework/lib/sketch compiles (currently dropped on nxplpc — the concrete pain point from the LPC845 bring-up); env-scoped lib cache keys; namespace-keyed deployer dispatch; docs/namespacing.md.
Verifiable increment: the build_flags propagation is the highest-value, testable core — confirmable via the uno (avr8js) and esp32 (QEMU) emulators with no hardware. Success = one sample sketch builds on uno, teensy40, lpc845brk, esp32s3, esp32c6, teensy41 from one project root with one build_flags mechanism.
Working rules for each item
Confirm the issue is still open and re-read its body (bodies drift).
Plan non-trivial work in the issue thread first (per repo CLAUDE.md).
One PR per issue, conventional-commit title, TDD (red → green → refactor).
soldr cargo for Rust, uv run --no-project for CI Python — never bare cargo/python.
Merge, tick the box here, move to the next. Do not parallelize across phases.
Dependency summary
#1009 ──▶ #1010 [daemon cluster, sequential — shared code, #1009 keys the endpoint #1010 binds]
#574 [architecture, last; also closes the prior meta #1007]
Meta / tracking issue: burn down the remaining open fbuild issues, one at a time
Sequencing/tracking issue for the 3 remaining open work items on
FastLED/fbuild. Worked and merged one by one in the order below — chosen by dependency first, then scope (the tight, shared-code daemon pair before the large architectural refactor). Check each box as its PR merges; this meta auto-closes when all are CLOSED.Snapshot taken 2026-07-09. Open work: #1009, #1010, #574. (Successor to #1007, whose only remaining item is #574 — see Phase 2.) The recently-completed compile-parallelism split is #1008.
Phase 1 — daemon robustness cluster
These two are siblings sharing one code surface (
crates/fbuild-cli/src/daemon_client.rsspawn/endpoint logic) — both fallout from the #940 → #1006 daemon-identity work. Do them together, correctness-first, since #1009's per-checkout endpoint keying gives #1010 a natural bind target.daemon: endpoint isolation follow-up to #940 — key the default endpoint by cache-identity/checkout + deterministic version arbitration #1009 (DONE — PR fix(daemon): version+identity-keyed endpoint + version arbitration (#1009) #1020 merged) — key the default endpoint by cache-identity/checkout + deterministic version arbitration
daemon: concurrent fbuild invocations stampede daemon spawn — add single-flight + bind before heavy init #1010 (DONE — PR fix(daemon): bind-before-heavy-init single-flight for concurrent spawns (#1010) #1021 merged) — single-flight daemon spawn + bind-before-heavy-init
fbuildinvocations with no daemon running (common CI / parallel-build pattern) all spawn a fullfbuild-daemon— the direct spawn path (ensure_direct_daemon_running) has no spawn lock, no single-flight, no pre-bind probe.Phase 2 — architecture (largest refactor, do last)
platformio.ini [env:*]fbuild cache save / restorefor toolchains + platforms + framework + zccache sidecar #527 — are done). Landing this closes Meta: burn down all open fbuild issues one by one (#962 → #959 → #722, then #527, then #574) #1007 as well.EnvNamespace { platform, board, framework, env_id }infbuild-core/fbuild-config; thread it through every package fetcher, compile invocation, cache path, and output dir; propagate[env:*]build_flagsto framework/lib/sketch compiles (currently dropped on nxplpc — the concrete pain point from the LPC845 bring-up); env-scoped lib cache keys; namespace-keyed deployer dispatch;docs/namespacing.md.build_flagspropagation is the highest-value, testable core — confirmable via the uno (avr8js) and esp32 (QEMU) emulators with no hardware. Success = one sample sketch builds on uno, teensy40, lpc845brk, esp32s3, esp32c6, teensy41 from one project root with onebuild_flagsmechanism.Working rules for each item
CLAUDE.md).soldr cargofor Rust,uv run --no-projectfor CI Python — never barecargo/python.Dependency summary
🤖 Filed via Claude Code — successor burn-down to #1007.