docs: sweep sync follow-ups into their owning version docs

Kaizen/postmortem next-steps kept accumulating with no owner. Each item
now lives in one version doc (v0.7 sync perf, v0.9 robustness, v1.0
boot) with the source docs linking there; the editor-freeze safety net
is marked hardware-verified and the v0.5 walk re-measure closed at 4.3s.
This commit is contained in:
Julien Calixte
2026-07-13 22:07:34 +02:00
parent 5d623151a8
commit 4f0d745e84
7 changed files with 76 additions and 24 deletions

View File

@@ -202,7 +202,8 @@ it is explicitly **not recommended** and not applied.
(ADR-012, 2026-07-11); spike rewired to SPI3 (SCK 14 / MOSI 15) and
**re-verified on hardware 2026-07-11** — same mount + round-trip result.
- [ ] **Still open:** implement the FatFS atomic-save (unlink-then-rename +
`*.tmp` boot-recovery) in the real `persistence` module.
`*.tmp` boot-recovery) in the real `persistence` module — → tracked as
the crash-safe-writes item in [v0.9 robustness](../v0.9-robustness.md).
## Artifacts (this session)

View File

@@ -1,11 +1,16 @@
# Editor freeze — SPI-DMA out-of-memory during a background `:sync`
> Date: 2026-07-11 · Build at time of failure: `07-11 18:02Z @229c259-dirty`
> Status: **Safety net shipped** (paints are non-fatal, the appliance no longer
> bricks) — pending hardware re-test. **Root cause not yet eradicated**: a paint
> that lands during a sync still fails and drops the frame; the permanent fix (a
> persistent internal DMA scratch buffer) is specced below and tracked in the
> follow-ups.
> Status: **Safety net shipped and hardware-verified** (2026-07-13, during the
> [real-repo-sync kaizen](../kaizen/real-repo-sync.md): live scrolling through
> a real-repo push — the run-4 crash was this same paint-during-push family,
> and after the fixes the UI survived every subsequent push, success and
> failure alike). The paint path also **no longer allocates per repaint**
> (persistent two-frame `draw_into`/`swap` in `main.rs`, 2026-07-13), removing
> the frame-buffer half of the paint-time allocation. **Root cause not fully
> eradicated**: the EPD driver's per-refresh internal DMA scratch remains; the
> permanent fix (a persistent scratch buffer in `Epd`) is specced below and
> now tracked in [v0.9 robustness](../v0.9-robustness.md).
>
> Context: editor loop [`../../firmware/src/main.rs`](../../firmware/src/main.rs),
> EPD driver [`../../firmware/src/epd.rs`](../../firmware/src/epd.rs), git
@@ -156,9 +161,14 @@ triggered by the sync.
- [x] Make all editor-loop paints non-fatal + `force_full` recovery (`main.rs`);
release build green.
- [ ] Reflash and hardware-verify the safety net against the repro (edit →
- [x] Reflash and hardware-verify the safety net against the repro (edit →
`:sync` → scroll through the push): panel must recover, not freeze.
**Verified 2026-07-13** (real-repo-sync kaizen runs 59: concurrent
typing/scrolling through full pushes, no freeze; bonus fix — repaints no
longer allocate at all, closing the run-4 `Frame::new_white` OOM-abort
variant of the same failure).
- [ ] Implement the persistent internal DMA scratch buffer in `Epd` (eradication
above) if the stale-during-sync window proves annoying in real use.
above) if the stale-during-sync window proves annoying in real use
→ tracked in [v0.9 robustness](../v0.9-robustness.md).
- [ ] After eradication, confirm refreshes succeed *during* a push and drop the
stale window entirely.