On v0.6.5-esp32, enabling the firmware's direct-to-Seed ingest (provisioning --seed-url / --seed-token) causes the swarm task to overflow its stack immediately after it initialises - right where it would open the HTTPS/TLS connection to the Seed. The node panics and reboots, looping on every boot.
Everything else in the firmware runs cleanly on the same boot - WiFi, CSI capture, edge DSP at tier 2, UDP streaming, display init - so this is specific to the swarm task, not a board or general-config problem.
This looks like the same class of bug as the Tmr Svc stack overflow fixed in this release (undersized FreeRTOS task stack), but in the swarm task.
Environment
- Firmware: v0.6.5-esp32, 8 MB variant (
esp32-csi-node.bin). Boot log: App version: 0.6.5, Compile time: May 18 2026.
- Board: ESP32-S3, 16 MB flash + 8 MB PSRAM (N16R8-class), chip rev v0.2. The 8 MB image runs fine here (
Detected size 16384k … using image header 8192k).
- Flash: esptool 5.3.0, matched set at
0x0 / 0x8000 / 0xf000 / 0x20000, --flash_mode dio --flash_size 8MB.
- Provisioning:
provision.py with --edge-tier 2 and the swarm flags (--seed-url, --seed-token, --zone, --swarm-hb 30, --swarm-ingest 5).
Steps to reproduce
- Flash the v0.6.5 8 MB matched set.
- Provision with swarm enabled:
provision.py --port COMx --chip esp32s3 --ssid … --password … \
--node-id 1 --zone GND-LIVING --target-ip 192.168.1.236 --target-port 5006 \
--seed-url https://192.168.1.236:8443 --seed-token <token> \
--swarm-hb 30 --swarm-ingest 5 --edge-tier 2
- Reset and watch serial. The node connects to WiFi, starts CSI/edge DSP, then the swarm bridge inits and panics within ~1 s.
Expected vs actual
- Expected: the
swarm task POSTs feature vectors to the Seed's /api/v1/store/ingest.
- Actual: stack overflow in the
swarm task → panic → reboot, on every boot.
Log
I (4066) swarm: Bearer token configured for Seed auth
I (4066) swarm: bridge init OK - seed=https://192.168.1.236:8443 zone=GND-LIVING h…
***ERROR*** A stack overflow in task swarm has been detected.
Backtrace: 0x40375d41:0x3fcd3910 0x4037eac9:0x3fcd3930 0x4037f7c6:0x3fcd3950 0x40380d87:0x3fcd39d0 0x4037f90c:0x3fcd39f0 0x4037f902:0xa5a5a5a5 |<-CORRUPTED
Rebooting...
rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
The 0xa5a5a5a5 tail is the FreeRTOS stack-fill pattern - the task exhausted its stack.
Suspected cause
The swarm task's stack appears too small for the mbedTLS handshake to the Seed (HTTPS), so it overflows as soon as it opens the TLS connection. This mirrors the Tmr Svc fix in the v0.6.5 notes (CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=8192).
My workaround
Provision without --seed-url / --seed-token (Swarm bridge disabled (no seed_url configured)). Using the laptop as the bridge, the node is then stable and streams CSI over UDP; ingest into the Seed via a host-side UDP → /api/v1/store/ingest bridge.
On v0.6.5-esp32, enabling the firmware's direct-to-Seed ingest (provisioning
--seed-url/--seed-token) causes theswarmtask to overflow its stack immediately after it initialises - right where it would open the HTTPS/TLS connection to the Seed. The node panics and reboots, looping on every boot.Everything else in the firmware runs cleanly on the same boot - WiFi, CSI capture, edge DSP at tier 2, UDP streaming, display init - so this is specific to the
swarmtask, not a board or general-config problem.This looks like the same class of bug as the
Tmr Svcstack overflow fixed in this release (undersized FreeRTOS task stack), but in theswarmtask.Environment
esp32-csi-node.bin). Boot log:App version: 0.6.5,Compile time: May 18 2026.Detected size 16384k … using image header 8192k).0x0 / 0x8000 / 0xf000 / 0x20000,--flash_mode dio --flash_size 8MB.provision.pywith--edge-tier 2and the swarm flags (--seed-url,--seed-token,--zone,--swarm-hb 30,--swarm-ingest 5).Steps to reproduce
Expected vs actual
swarmtask POSTs feature vectors to the Seed's/api/v1/store/ingest.swarmtask → panic → reboot, on every boot.Log
The
0xa5a5a5a5tail is the FreeRTOS stack-fill pattern - the task exhausted its stack.Suspected cause
The
swarmtask's stack appears too small for the mbedTLS handshake to the Seed (HTTPS), so it overflows as soon as it opens the TLS connection. This mirrors theTmr Svcfix in the v0.6.5 notes (CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=8192).My workaround
Provision without
--seed-url/--seed-token(Swarm bridge disabled (no seed_url configured)). Using the laptop as the bridge, the node is then stable and streams CSI over UDP; ingest into the Seed via a host-side UDP →/api/v1/store/ingestbridge.