bloat gate: local ESP32-S3 Blink total_flash reads 4 KB higher than CI for the same commit
Author: zackeesCreated Sep 19, 2026Updated Sep 19, 2026
Observed
For master 01caa0a89f, uv run python tests/test_esp32s3_bloat_regression.py gives different totals:
total_flash (report.json) |
fbuild image flash: |
ELF size | |
|---|---|---|---|
| CI (bloat regression run on master) | 383,120 B → PASS | 473,588 B | 9.84 MB |
| local (NixOS, fbuild 2.5.24) | 387,217 B → FAIL by 4,059 B | 473,524 B | 10.3 MB |
The flash images agree to within 64 B, but the symbol-sum total the gate reads is 4 KB apart. A local run therefore can't reproduce the gate: it fails on a commit CI passes. Any local delta is only meaningful against another local build.
Ruled out
- A stale build dir: removed
.build/fbuild/esp32s3and rebuilt; same 387,217. - The
nmpath:build_info_Blink.json'saliases.nmpoints at a stale~/.fbuild/devtoolchain (20251107) while the compile uses~/.fbuild/prod(20260121). That comes from_gnu_toolchain_bin_for_targetinci/compiler/build_config.py, which globs~/.fbuild/*/…sorted, sodevwins overprod. It's a separate small bug worth fixing, but repointing it at the prodnmstill gives 387,217, so it isn't the cause here.
Next steps
- Upload
.build/symbols/esp32s3/report.jsonas an artifact from the bloat workflow, so a local report can be diffed against CI's by symbol rather than guessed at. - Make
_gnu_toolchain_bin_for_targetprefer the toolchain the compile actually used (it is in the compile command's include paths).
Found while measuring #4455.
Generated with Claude Code
Source: FastLED/FastLED