[correctness] apps/zig/static/app.js:24–25: Every response replaces the entire list, including any open editor. With a request pending, double-click another todo and start editing; when the earlier response arrives, the editor disappears and its unsaved text is lost. Preserve pending edits when applying responses.
[spec] apps/zig/src/app.zig:172 and :185: Adding and editing trim only ASCII whitespace. Unicode whitespace such as U+00A0 or U+2003 remains, so whitespace-only titles create items, and editing an item to whitespace does not delete it. Both handlers need Unicode whitespace trimming.