f8f43c9523
Cmd/Ctrl+Shift+B worktree flows on a remote gateway route through the backend's /api/git mirror (hermes_cli/web_git.py), but that mirror had drifted behind the Electron-local git ops the same UI drives locally, so the flows broke exactly and only on remote connections: - Convert-a-branch: the picker offers remote-tracking refs, and the Electron op turns "origin/feature" into a local tracking branch. The mirror ran `git worktree add <dir> origin/feature` verbatim, which either fails or detaches HEAD. It now resolves the ref's remote via git (never assuming "origin"), fetches best-effort, and creates the worktree with `--track -b <short-name>`. - branch_list omitted remote-tracking refs entirely and never set the `isRemote` flag the renderer's HermesGitBranch contract requires — the convert picker on a remote gateway couldn't reach a teammate's branch and mislabeled every row's action. - Branching off an `origin/…` base silently wired the new branch to the remote upstream; the mirror now passes `--no-track` like the Electron op does. Renderer side, replace the silent degradation with a capability gate: when a remote backend predates the /api/git worktree routes, worktree creation failed with an opaque "Expected JSON … got HTML" toast. The route-missing shapes now surface a clear "update the Hermes backend" message (isGitEndpointMissingError, mirroring the sidebar batch-endpoint detector); real git errors still pass through untouched. Sibling audit (documented, no code change needed): repo status / review / file-diff / git-root / default-cwd already route through desktopGit()'s REST bridge or /api/fs on remote; repo scan is deliberately a no-op there. Stale comments claiming "empty/false on a remote backend" in projects.ts and coding-status.ts updated to describe the backend-routed reality. Fixes #81724