Add per-repository diff for workspace children master
Workspace child rows showed live +N/-M line counts but offered no way to open the diff: the child rows passed a nil diff callback and every diff entry point (badge delegate, ⌘⇧Y, View menu, Command Palette) was keyed on Worktree.ID, which is nil while a workspace child is selected. Introduce DiffTarget/DiffTargetID to separate the Git target from the terminal host, and route all diff entry points through it: - Child rows gain a working diff badge plus Show Diff / Show Outgoing Changes context-menu items. - ⌘⇧Y, ⌘⌥⇧Y, the View menu, and the Command Palette follow the selected workspace child via a new selectedDiffTargetID query. - ExternalDiffToolClient, OutgoingChangesClient, and the snapshot client take a DiffTarget; the Hunk tool opens its tab in the workspace's own terminal with the child directory as cwd, so no terminal state exists outside the workspace lifecycle. - Outgoing Changes resolves the child's PR from the per-child info cache; base resolution reuses the existing ladder. - Child branch display falls back live branch → metadata branch → repository name; a broken child path degrades to the existing "Unable to open diff" error alert. - The +N/-M badge renders as plain text (no dead button or Show Diff tooltip) when no diff action is wired. Fixes #616 Claude-Session: https://claude.ai/code/session_01WoqhZai4i4izqbUZLtbjde