Symptom
fbuild rejects both Seeed XIAO BLE board IDs:
build error: config error: unknown board 'xiaoble_adafruit' (no built-in defaults)
build error: config error: unknown board 'xiaoblesense_adafruit' (no built-in defaults)
Reproducible: every FastLED nrf52_xiaoblesense and adafruit_xiaoblesense workflow run on master, e.g. https://github.com/FastLED/FastLED/actions/runs/26677701959 and https://github.com/FastLED/FastLED/actions/runs/26677701939 — every example fails identically.
Root cause
crates/fbuild-config/src/board/db.rs looks up boards in the bundled include_dir!("$CARGO_MANIFEST_DIR/assets/boards/json") DB. xiaoble_adafruit.json and xiaoblesense_adafruit.json are not in the bundle. Both boards are defined in maxgerhardt's platform-nordicnrf52 package (boards/xiaoble_adafruit.json, boards/xiaoblesense_adafruit.json on the develop branch), but fbuild does not consult ~/.platformio/platforms/ at runtime — the bundled DB is the source of truth.
enrich_boards (one-off maintenance bin) imports from the local PlatformIO install, but it apparently was last run before maxgerhardt's XIAO boards were available, or against a platform install that didn't have them.
Affected jobs
Every FastLED CI workflow that targets these board IDs:
nrf52_xiaoblesense → xiaoble_adafruit (FastLED XIAOBLESENSE_NRF52 real_board_name)
adafruit_xiaoblesense → xiaoblesense_adafruit (FastLED XIAOBLESENSE_ADAFRUIT_NRF52)
Every example in each workflow (AnalogOutput, Animartrix, Apa102, …) hits the same "unknown board" failure before any code is compiled.
Proposed fix
Add two bundled JSONs to crates/fbuild-config/assets/boards/json/:
xiaoble_adafruit.json (Seeed XIAO BLE, no IMU):
{
"build": {
"core": "nRF5",
"variant": "Seeed_XIAO_nRF52840",
"arduino": { "ldscript": "nrf52840_s140_v7.ld" }
},
"connectivity": ["bluetooth"],
"debug": { "tools": { "blackmagic": {}, "jlink": {}, "cmsis-dap": {} } },
"fcpu": 64000000,
"frameworks": ["arduino"],
"id": "xiaoble_adafruit",
"mcu": "NRF52840",
"name": "Seeed XIAO BLE nRF52840",
"platform": "nordicnrf52",
"ram": 237568,
"rom": 811008,
"url": "https://wiki.seeedstudio.com/XIAO_BLE",
"vendor": "Seeed"
}
xiaoblesense_adafruit.json (Seeed XIAO BLE Sense, with IMU/mic):
{
"build": {
"core": "nRF5",
"variant": "Seeed_XIAO_nRF52840_Sense",
"arduino": { "ldscript": "nrf52840_s140_v7.ld" }
},
"connectivity": ["bluetooth"],
"debug": { "tools": { "blackmagic": {}, "jlink": {}, "cmsis-dap": {} } },
"fcpu": 64000000,
"frameworks": ["arduino"],
"id": "xiaoblesense_adafruit",
"mcu": "NRF52840",
"name": "Seeed XIAO BLE Sense",
"platform": "nordicnrf52",
"ram": 237568,
"rom": 811008,
"url": "https://wiki.seeedstudio.com/XIAO_BLE",
"vendor": "Seeed"
}
Values mirror maxgerhardt/platform-nordicnrf52/boards/<name>.json (RAM/ROM from upload.maximum_ram_size/maximum_size; ldscript from build.arduino.ldscript; variant from build.variant; fcpu from build.f_cpu minus L suffix).
adafruit_feather_nrf52840_sense.json in the existing DB is the structural template.
Test plan
- Unit: assert
BoardConfig::from_board_id("xiaoble_adafruit", &HashMap::new()) returns Ok with mcu == "nrf52840", same for xiaoblesense_adafruit.
- Integration: re-run FastLED's
nrf52_xiaoblesense and adafruit_xiaoblesense workflows after a fbuild bump.
Filed automatically while triaging broken FastLED CI builds; intent is to open a PR immediately.
Symptom
fbuildrejects both Seeed XIAO BLE board IDs:Reproducible: every FastLED
nrf52_xiaoblesenseandadafruit_xiaoblesenseworkflow run on master, e.g. https://github.com/FastLED/FastLED/actions/runs/26677701959 and https://github.com/FastLED/FastLED/actions/runs/26677701939 — every example fails identically.Root cause
crates/fbuild-config/src/board/db.rslooks up boards in the bundledinclude_dir!("$CARGO_MANIFEST_DIR/assets/boards/json")DB.xiaoble_adafruit.jsonandxiaoblesense_adafruit.jsonare not in the bundle. Both boards are defined in maxgerhardt'splatform-nordicnrf52package (boards/xiaoble_adafruit.json,boards/xiaoblesense_adafruit.jsonon thedevelopbranch), but fbuild does not consult~/.platformio/platforms/at runtime — the bundled DB is the source of truth.enrich_boards(one-off maintenance bin) imports from the local PlatformIO install, but it apparently was last run before maxgerhardt's XIAO boards were available, or against a platform install that didn't have them.Affected jobs
Every FastLED CI workflow that targets these board IDs:
nrf52_xiaoblesense→xiaoble_adafruit(FastLEDXIAOBLESENSE_NRF52real_board_name)adafruit_xiaoblesense→xiaoblesense_adafruit(FastLEDXIAOBLESENSE_ADAFRUIT_NRF52)Every example in each workflow (
AnalogOutput,Animartrix,Apa102, …) hits the same "unknown board" failure before any code is compiled.Proposed fix
Add two bundled JSONs to
crates/fbuild-config/assets/boards/json/:xiaoble_adafruit.json(Seeed XIAO BLE, no IMU):{ "build": { "core": "nRF5", "variant": "Seeed_XIAO_nRF52840", "arduino": { "ldscript": "nrf52840_s140_v7.ld" } }, "connectivity": ["bluetooth"], "debug": { "tools": { "blackmagic": {}, "jlink": {}, "cmsis-dap": {} } }, "fcpu": 64000000, "frameworks": ["arduino"], "id": "xiaoble_adafruit", "mcu": "NRF52840", "name": "Seeed XIAO BLE nRF52840", "platform": "nordicnrf52", "ram": 237568, "rom": 811008, "url": "https://wiki.seeedstudio.com/XIAO_BLE", "vendor": "Seeed" }xiaoblesense_adafruit.json(Seeed XIAO BLE Sense, with IMU/mic):{ "build": { "core": "nRF5", "variant": "Seeed_XIAO_nRF52840_Sense", "arduino": { "ldscript": "nrf52840_s140_v7.ld" } }, "connectivity": ["bluetooth"], "debug": { "tools": { "blackmagic": {}, "jlink": {}, "cmsis-dap": {} } }, "fcpu": 64000000, "frameworks": ["arduino"], "id": "xiaoblesense_adafruit", "mcu": "NRF52840", "name": "Seeed XIAO BLE Sense", "platform": "nordicnrf52", "ram": 237568, "rom": 811008, "url": "https://wiki.seeedstudio.com/XIAO_BLE", "vendor": "Seeed" }Values mirror
maxgerhardt/platform-nordicnrf52/boards/<name>.json(RAM/ROM fromupload.maximum_ram_size/maximum_size; ldscript frombuild.arduino.ldscript; variant frombuild.variant; fcpu frombuild.f_cpuminusLsuffix).adafruit_feather_nrf52840_sense.jsonin the existing DB is the structural template.Test plan
BoardConfig::from_board_id("xiaoble_adafruit", &HashMap::new())returns Ok withmcu == "nrf52840", same forxiaoblesense_adafruit.nrf52_xiaoblesenseandadafruit_xiaoblesenseworkflows after a fbuild bump.Filed automatically while triaging broken FastLED CI builds; intent is to open a PR immediately.