Move the following audited-and-implemented changes into openspec/changes/archive/2026-06-12-completed-changes-archive/: - backend-frontend-refactoring - config-profile-git-mounts - config-profile-includes-ui - config-profile-multi-repo-mounts - container-monitoring-notifications - git-mount-url-validation - home-path-expansion - mobile-terminal-ux - mount-specificity-ordering - notification-center - persistent-terminal-sessions - session-list-overhaul - ssh-key-mounting - terminal-fullscreen-unified-header - tool-session-progress-and-updates Also regenerated .pi-map*.md files for openspec/changes so the remaining active changes (multi-session-terminal-ux, reorganize-long-files, working-copies, workspace-first-ui) reflect the new layout.
2.5 KiB
Context
The current session list implementation duplicates rendering logic across dashboard.tsx and sessions.tsx. Both pages fetch the same data, apply similar filtering (active vs recent/stopped), and render session cards with inconsistent styling and controls. The dashboard has a compact grid view while the sessions page has a list view, but neither provides all control actions (open, stop, start, delete) in a consistent way.
Goals / Non-Goals
Goals:
- Unified session card component with all control actions visible and accessible
- Unified session list component that handles filtering, grouping, and empty states
- Consistent visual design across dashboard and sessions pages
- Clear status indicators (running, stopped, error, building, etc.)
- Project/repository context visible on each card
- Responsive layout that works on mobile and desktop
Non-Goals:
- No API changes
- No new session management features (just better UI for existing ones)
- No changes to session creation flow
- No real-time updates beyond existing polling
Decisions
Decision: Two levels of components
SessionCard: Individual session display with actionsSessionList: Container that handles grouping and layout This allows the dashboard to useSessionListdirectly while the sessions page can add additional filtering/controls around it.
Decision: Card-based layout over table Cards provide better mobile experience and can show richer information (project context, tool icon, status badge). Tables are harder to make responsive.
Decision: Inline actions on cards Each card shows primary action (Open for running, Start for stopped) and secondary actions in a dropdown or secondary button row. This matches the existing dashboard pattern but makes it consistent.
Decision: Status colors
- Running: green
- Building/Starting/Probing: yellow/amber
- Stopped: gray
- Error: red
- Unhealthy: orange
Risks / Trade-offs
Risk: Breaking existing dashboard layout → Mitigation: Keep the same grid layout structure, just swap the inner rendering to use SessionCard
Risk: Mobile experience with many action buttons → Mitigation: Use icon buttons on mobile, text buttons on desktop. Collapse secondary actions into a "..." menu.
Migration Plan
- Create SessionCard and SessionList components
- Update dashboard.tsx to use SessionList
- Update sessions.tsx to use SessionList
- Remove old duplicated session rendering code
- Update styles
- Test both pages
Open Questions
None