fix(dashboard): primary mission CTA, auto-select first, richer empty state

- Promote the sidebar "Plan New Mission" CTA to a btn-primary (matching the
  chat sidebar's "New Chat") and drop the dashed icon buttons; full-width
  progress bar and Activity row each get their own line in the card.
- Auto-select the first mission in the inline desktop view so users land
  in detail rather than the empty placeholder. Skipped in mobile and the
  standalone modal so existing flows and unit tests stay intact.
- Replace the bare "No missions yet" line with a richer empty state that
  explains what missions are and offers an inline Plan New Mission CTA.
- Guard loadMissionDetail against malformed responses (missing milestones)
  so racing fetch fallbacks don't crash the detail render.
- Update three MissionManager tests to match the new copy/structure.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-05-06 00:05:51 -07:00
parent b2aed0fd42
commit 76e5f510ca
4 changed files with 97 additions and 30 deletions

View File

@@ -8,8 +8,17 @@ Mission sidebar follow-ups for card density and CTA prominence.
sidebar so the title row spans the full card width instead of competing
with the action buttons. Action buttons now sit on their own row below.
- **Activity on its own row**: the `Activity X ago` label moved out of the
cramped stats line into its own row above the progress bar.
cramped stats line into its own row.
- **Full-width progress bar**: the completion bar moved out of the stats
row onto its own line and now scales to the full card width instead of
competing with stat labels for horizontal space.
- **Centered "Plan New Mission" CTA**: the sidebar header now hosts a
full-width centered button with the Sparkles icon and "Plan New Mission"
text (instead of an icon-only button tucked in the corner). The mobile
footer button uses the same label for consistency.
full-width primary-styled button (matches the chat sidebar's "New Chat"
affordance) with the Sparkles icon and "Plan New Mission" text — replacing
the dashed-outline icon-only buttons. Mobile footer uses the same label.
- **Auto-select first mission (inline desktop)**: the inline mission view
now opens with the first mission preloaded into the detail pane instead
of an empty placeholder. Falls back to the existing empty-pane copy when
no missions exist. Standalone-modal usage is unchanged.
- **Richer empty state**: when no missions exist, the list now explains
what missions are and surfaces a primary "Plan New Mission" CTA inline.