Open issues only. Resolved ones are archived in one line each at the
bottom; the full investigation history lives in
RUNTIME-WEDGE.md and the git log.
The one remaining boot-freeze class: console output stops right after
the SD partition-scan line; the MWDT resets the badge ≤30 s later, so
it costs one automatic retry, never a brick. Measured first-try rates:
29/30 (2026-07-05 warm campaign, card state unrecorded) vs 23/30 (same
day, SD card confirmed inserted, all 7 failures in or near this class)
— card presence is the leading hypothesis; a card-out 30-cycle
tools/freezetest.py campaign would settle it. Mechanism unknown.
Related gap: the watchdog arms at subsys_initcall (~0.3 s, patch
0034). A freeze before that is still unrecoverable without a power
cycle; arming the MWDT in the boot shim would close it.
freezetest.py RTS-resets only the P4; a cable plug-in cold-boots both
chips, and that path measures worse (post-0034/0035 hand campaign:
~7/9 first-try, every failure watchdog-recovered). A proper cold-boot
campaign needs physical power cycles — a hand campaign or a smart-plug
harness; RTS cannot produce them.
esp_cmd_work() (patch 0008) bails with "Busy in another cmd
execution" without rescheduling itself (the upstream code comments
admit this). A command queued while another is in flight is only sent
if an unrelated caller kicks the workqueue before its timeout (500 ms
for the WHY2025-added commands, 5 s for cfg80211) — otherwise it
silently times out unsent. Likely why the WHY2025-added commands'
timeouts fire "often". A proper fix (rescheduling from
process_cmd_resp() and the timeout paths) changes the command
channel's locking and needs a boot-cycle load test — deferred.
A 2026-07-05 audit of patch 0008 confirmed real bugs that are all gated
on conditions absent in normal operation (teardown, a second slave
bootup, GFP_ATOMIC alloc failure, write_packet failure with the
datapath closed). Documented rather than shipped because they can't be
exercised without fault injection and the command path is
boot-race-sensitive:
esp_cmd.cesp_cmd_worksend-failure path recycles a cmd node a waiter still owns → doublelist_addoncmd_free_queue. Fix: setcmd_respandwake_up_interruptiblewithcur_cmdstill set; let the single waiter release.esp_cmd.creset_cmd_nodenever clearsin_cmd_queue→ a reused pool slot canlist_dela node no longer queued. Fix: clear the flag after thelist_del.esp_bt.cesp_bt_send_framedouble-frees onhdev->sendfailure (the HCI core frees on <0 return).esp_bt.chci_register_devfailure leavesadapter->hcidevdangling;esp_remove_carddeinits BT before flushing the RX workqueue (teardown UAF).
Silicon-level: an interrupt arriving cycle-coincident with a
privilege-dropping mret latches the core into never accepting another
interrupt (root-caused at register level via the patch-0025 tracer;
every software recovery attempt failed). Avoided since patch 0031 —
userspace runs at physical M-mode, so no mret ever drops privilege;
churn reproducers that wedged in 25–90 s run clean. The MWDT (patch
0019) stays armed as the backstop: if the latch ever resurfaces,
recovery is a ≤30 s auto-reset. Trade-off of M-mode userspace: user
code can touch CSRs/MMIO (NOMMU never had memory isolation anyway).
Full forensic trail: RUNTIME-WEDGE.md.
- BME680 pressure reads ~227 kPa instead of ~100 kPa (BME688/690 calibration-coefficient difference) — cosmetic.
- Three
bmi270-init-data.fw ... failed with error -2lines on every boot: a probe-before-rootfs race; patch 0009 retries after the squashfs mounts and the successful load is silent. Harmless. ssh/dbclientin the first ~40 s after boot pauses at "Waiting for kernel randomness to be initialised" until the crng seeds.- The panel needs a 16-px vertical shift workaround
(
ESP32P4_PANEL_VSHIFTin patch 0003) — suspected vsync-line miscount, revisit if it ever drifts.
wlan0 uphang — IPv6rs_timertimer-wheel corruption, not the CLIC erratum; shipped fix isipv6.disable=1on the cmdline (2026-07-05, soak-verified).- Cold boots wedging at the ~21 s Bluetooth HCI burst — HCI
registration is opt-in at runtime since patch 0035 (the HCI tools set
the
bt_enableknob themselves); verified by a cold-boot hand campaign. - Freezes before the watchdog armed were hard-dead — patch 0034
arms the MWDT at
subsys_initcall, ahead of every device probe. - Boot freezes in the display/backlight bring-up window — the CLIC erratum during boot's busiest interrupt window; first-try success went ~60% → ~73% (patch 0030, BT-init deferral) → ~97% (patch 0031, M-mode userspace). Campaign data and the falsified regdb lever are in the git log.
- Display bring-up latency — two open-coded timers in the DSI glue replaced by a deterministic commit-tail hook (patch 0033): fbcon at ~5.5 s (was 7.2), video at ~5.7 s (was 10.0), verified over 23 boots.
- BMI270 intermittent init
-ENODEV— maskedINTERNAL_STATUSpoll + soft-reset/re-upload retries (patch 0013), verified 8/8 cold boots.