diff --git a/docs/v0.5-palette-and-multi-file.md b/docs/v0.5-palette-and-multi-file.md index e6d184c..071a753 100644 --- a/docs/v0.5-palette-and-multi-file.md +++ b/docs/v0.5-palette-and-multi-file.md @@ -108,6 +108,28 @@ true via a *device*-authored publish (`3c79f38`), proving toggle → `SavePrefs` atomic write → `git add -A` → push — and the `save_on_idle` autosave works on device too. **v0.5 slice 4 fully DONE + on-device confirmed.** +**Trailing-newline handling — a saved note ends with a *visible* blank line +(commit `d14d9e7`, 2026-07-12; host-tested, on-device gate open).** Two +adjustments to how the buffer meets the file. First, format-on-save no longer +strips *every* trailing blank line — it collapses a run to **at most one** and +keeps it, so a writer who presses Enter to open the next line doesn't have that +line (and the caret) yanked away on save (the caret used to jump up to the last +non-empty line). Second, persistence treats the file's POSIX terminator as +content the editor *shows*: `load_path` reads the file **verbatim** and +`save_path` writes the buffer, appending a final newline **only if one is +missing** (guarded, not unconditional). Because the editor lays out +`rows = #\n + 1`, that terminating newline renders as a **visible trailing empty +line** the caret can land on — open a note and the blank line the newline stands +for is there. The two are an identity round-trip for any device-written file +(all end in `\n`); the file stays git-clean (exactly one terminator — vim and +GitHub show no phantom blank line); and a trailing blank line the writer leaves +is mirrored, never doubled. This replaced an interim model that stripped the +terminator on load and hid it (the file was correct, the newline just wasn't +shown). On-device check: reflash → open a note (trailing empty line visible) → +`:w` (caret stays on it) → reopen (still there). `Prefs::to_toml` ends in a +newline for the same reason; the guarded save leaves the prefs file with exactly +one. + - [x] `Cmd-P` opens fuzzy file palette over **both** `/sd/repo/` and `/sd/local/` — **landed and CONFIRMED ON DEVICE 2026-07-12** (Spike 11: no ghosting on the transient panel); scope shows as the inline