fix(vcs): scrub control chars from jj/pwd output (#65)
## Summary - jj commit descriptions and bookmark/tag names are freeform text (unlike git refnames, which forbid control characters), so a crafted description or bookmark in a repo you merely `cd` into could inject raw terminal escape sequences (title rewrite, cursor manipulation, clipboard tricks) since they previously flowed straight through to `echo -ns`. - Directory names can also legally contain control/ESC bytes on Unix, so `$PWD` components get the same treatment. - Both fixes are a single `string replace -ra` pass over the already-split data (`$raw_lines` in the jj backend, `$split_pwd` in `_tide_pwd`) — no forks, negligible cost. The jj fix preserves `\t` since that's the template's field separator; the pwd fix has no such exception. ## Test plan - [x] `mise run all` (fmt, lint, install, full littlecheck suite) — all green - [x] New regression case in `tests/_tide_item_vcs.test.fish`: a mocked `jj` emits a description containing a raw ESC byte; asserts the rendered item shows the text with the byte stripped. - [x] New regression case in `tests/_tide_item_pwd.test.fish`: a directory literally named with an embedded ESC byte; asserts `_tide_pwd` strips it. - [x] Verified in isolation (outside the test suite) that the regex actually strips the byte in both cases, confirming the new tests exercise real behavior. 🤖 Generated with [Claude Code](https://claude.com/claude-code)