anaphase is a Bluetooth/USB split ergonomic keyboard with a 3D printed case and custom PCB base.
ZMK config lives in zmk-config/, defining anaphase_left (BLE central) and anaphase_right
as full boards (E73-2G4M08S1C nRF52840 modules, not a shield). Pinned to ZMK v0.3.0
(Zephyr 3.5, LVGL 8.3.7). CI builds both halves via the shared ZMK user-config workflow;
grab anaphase_left-zmk.uf2 / anaphase_right-zmk.uf2 from the Actions artifacts and
drag onto the Adafruit bootloader mass-storage device (double-tap reset).
Primary: archive/2022 dumps/CURRENT_{left,right}.UF2 — bootloader readbacks of the
actual firmware both halves ran for four years, captured 2026-08-09 before the v0.3.0
migration was flashed. Verified: contiguous 0x1000..0xEA000, valid vector tables, includes
the NVS storage region (BLE bonds as of capture). To restore: double-tap reset on the
affected half, drag the matching file onto the mass-storage volume. The family ID differs
from newly-built uf2s (0x239A0029 board-specific vs 0xADA52840 generic) — bootloader 0.6.2
accepts both, verified against its source.
Secondary (reconstruction from source, if the dumps are ever lost):
- zmk-config: commit
9e7d2f7 - zmkfirmware/zmk: commit
f1b5dc408144e7f334bad59da6e9ac788a56e0c7(main @ 2022-03-05) - which pins zephyr
v2.5.0+zmk-fixes(LVGL 7.6.1) - build container:
zmkfirmware/zmk-build-arm:2.5(local Docker build; modern CI images will not build this tree)
Bootloader on both halves: Adafruit nRF52 UF2 bootloader 0.6.2, pca10056 build
(archive/2022 dumps/INFO_UF2_*.TXT). App flashing never touches it.