Per spec §19310-19312, each resource gets its own sandbox and Apply
commits each sandbox separately.
When a plan is linked to multiple projects with git-checkout resources:
- _create_sandbox_for_plan creates a worktree for EACH resource
(not just the first), returning a list of _SandboxInfo objects
- LLM output is written to the first resource's worktree (primary)
- _route_sandbox_files_to_worktrees moves files that belong to
other resources into their worktrees by matching against each
resource's git ls-files output
- Each worktree is committed independently
- _apply_sandbox_changes merges each resource's worktree separately,
showing per-resource Apply Summary and Sandbox Cleanup panels
- Partial apply: if one resource's merge fails, others still proceed
Single-resource plans are fully backward compatible — same behavior
as before.
ISSUES CLOSED: #7270