Previous push hit the gates job's file-size gate — MissionCanvas.tsx
was 1517 lines (17 over). The Live Pane xterm subcomponent is
cleanly separable (no shared state with the parent, just takes
nodeId + visible props), so it lifts into its own file at zero
behavior cost.
frontend/src/components/dashboard/MissionLivePane.tsx (new, 106 LoC)
frontend/src/components/dashboard/MissionCanvas.tsx (1517 → 1424)
Also drops the xterm.css + useResilientTerminal imports from
MissionCanvas since only MissionLivePane needs them now.