docs(zig): STATUS — review fixes live at 576c3b8

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 9a02d59902e1e00ec5703c1e0d5581bfe5f92d2a parent 34e7b19
1 file changed, +30 −4
  • apps/zig/STATUS.md +30 −4
diff --git a/apps/zig/STATUS.md b/apps/zig/STATUS.md
index 93f5538..53670a2 100644
--- a/apps/zig/STATUS.md
+++ b/apps/zig/STATUS.md
@@ -1,9 +1,9 @@
-LIVE https://todo-zig.bfj.oncarlos.com 11e07b8
+LIVE https://todo-zig.bfj.oncarlos.com 576c3b8
## What's live
- `todo-zig` on account `bfj`, one instance on channel `edge`, build probe
- `/api/version`. The deployed version is `11e07b8`; `/api/version` and
+ `/api/version`. The deployed version is `576c3b8`; `/api/version` and
`X-Carlos-Version` both report it.
- The shared behaviour suite passed locally (67 passed, 3 skipped) and
again against [https://todo-zig.bfj.oncarlos.com](https://todo-zig.bfj.oncarlos.com)
@@ -11,8 +11,8 @@ LIVE https://todo-zig.bfj.oncarlos.com 11e07b8
with JavaScript off, and the screenshot comparison with JavaScript off.
- `scripts/boot-check.sh dist/app-linux-arm64` passed: `/healthz` and
`/api/version` answer 200 on a unix socket under qemu, and SIGTERM exits 0.
-- `make test`: 10 Zig unit tests pass (view, routing, form and cookie
- parsing, origin check, store scoping).
+- `make test`: 11 Zig unit tests pass (view, routing, form and cookie
+ parsing, title trimming, origin check, store scoping).
## Notes
@@ -25,3 +25,29 @@ LIVE https://todo-zig.bfj.oncarlos.com 11e07b8
`clean-deps` keeps the downloaded SQLite sources (`.cache/zig/p`,
`.cache/pkg`) and drops everything compiled.
- Nothing in the contract seemed wrong.
+
+## Review fixes (576c3b8)
+
+Both findings are fixed. After the fixes, the shared suite passed
+locally and against the live site (67 passed, 3 skipped each time), and
+`boot-check.sh` passed on the new arm64 binary.
+
+1. **An open editor was lost when an earlier response arrived.**
+ `static/app.js` now leaves an item being edited in place when it applies
+ a response. It never detaches that item, so the editor keeps its focus
+ and unsaved text. It replaces the items around it and refreshes the
+ item's checkbox, label and classes. If the response no longer contains
+ that item (deleted, or filtered out), the list is replaced as before.
+ I checked this in a browser: I delayed a toggle by 1 s and opened
+ another item's editor while it was pending. When the answer arrived,
+ the editor kept its text and focus and the counter updated. Enter then
+ saved the edited text.
+2. **Titles were trimmed of ASCII whitespace only.** Adding and editing
+ now trim Unicode White_Space characters (U+00A0, U+2003, U+3000 and
+ the rest) and U+FEFF from both ends (`trimTitle` in `src/app.zig`, with
+ a unit test). A whitespace-only add creates nothing, and editing an
+ item to whitespace only deletes it. Both were checked with curl.
+
+## Review findings not fixed
+
+None.