server: keep newline worktree paths registered (#121)

* server: keep newline worktree paths registered

git worktree list --porcelain splits a path at an embedded newline, so
is_worktree_registered treated a live checkout as unregistered. Task
cleanup could then remove_dir_all that directory after a failed
git worktree remove. NUL-delimited porcelain keeps the path in one field.

* server: match non-UTF-8 canonical worktree paths

Strict UTF-8 parsing skipped a worktree field when Git stored the
canonical bytes of a UTF-8 symlink. Lossy comparison keeps that
checkout registered.
320bf9317aSimone committed on 10/15/2026, 3:33:04 AM· committed by GitHubparent4a5a64f
8 files changedLine totals unavailable