Follow-up to #310 / PR #314. Brings the dashboard up to the deterministic-UI vision the original ticket described and fixes UX issues found in review.
Tickets strip
Replace the single header "Refine Ticket" button with a full-width strip below the header containing three project-scoped actions:
- + Create Ticket — modal with title + body, shells `gh issue create`, returns the new id. Optional one-click hand-off to Refine on the new ticket.
- ↻ Refine Ticket — existing dialog, just relocated.
- ▶ Start Ticket — lightweight modal: ticket id + auto-suggested stack name → `tickets:fetch` (verbatim) → `stacks.create({gateApproved: true})`. Zero LLM in dispatch.
Make PR chip — actually visible this time
The Make PR button I shipped in #310 sits inside an `opacity-0 group-hover:opacity-100` action row in both StackCard and StackTableRow, so it looks like it doesn't work. Pull it out into a persistent primary-action chip:
| Stack state |
Chip |
| `status ∈ {completed, pushed}` AND `pr_url == null` |
`[🆕 Make PR]` |
| `status == pr_created` AND `pr_url` |
`[↗ #N]` link |
| anything else |
(none) |
Both card and table views render the same chip. Secondary actions (Teardown, Stop, Shell) stay hover-gated.
Trim the list view
Drop `description`, `services` (bubbles), `resources` cells from the table — the columns that get squished on narrow screens and that nobody scans. Move all of it into a hover popover anchored to the row. ~150ms enter delay so quick scrolls don't flash popovers.
Visible row: Status · Name (+ ↗#N for PR Open) · Model · Svcs count · Duration · Actions chip
Popover: description, per-service status with exit codes, memory/CPU/tokens, started/updated.
Bump the `useResizableColumns` storage key (`stack-table` → `stack-table-v2`) so old saved widths for the dropped columns don't wreck the new layout.
Test plan
Closes the visible-action gap from #310.
Follow-up to #310 / PR #314. Brings the dashboard up to the deterministic-UI vision the original ticket described and fixes UX issues found in review.
Tickets strip
Replace the single header "Refine Ticket" button with a full-width strip below the header containing three project-scoped actions:
Make PR chip — actually visible this time
The Make PR button I shipped in #310 sits inside an `opacity-0 group-hover:opacity-100` action row in both StackCard and StackTableRow, so it looks like it doesn't work. Pull it out into a persistent primary-action chip:
Both card and table views render the same chip. Secondary actions (Teardown, Stop, Shell) stay hover-gated.
Trim the list view
Drop `description`, `services` (bubbles), `resources` cells from the table — the columns that get squished on narrow screens and that nobody scans. Move all of it into a hover popover anchored to the row. ~150ms enter delay so quick scrolls don't flash popovers.
Visible row: Status · Name (+ ↗#N for PR Open) · Model · Svcs count · Duration · Actions chip
Popover: description, per-service status with exit codes, memory/CPU/tokens, started/updated.
Bump the `useResizableColumns` storage key (`stack-table` → `stack-table-v2`) so old saved widths for the dropped columns don't wreck the new layout.
Test plan
Closes the visible-action gap from #310.