Skip to content

Ticket workflow polish: Tickets strip, persistent Make PR chip, trimmed list view (#310 follow-up) #315

@onomojo

Description

@onomojo

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

  • `npm run typecheck` clean
  • All Vitest unit tests pass (1601+ baseline)
  • Tickets strip: each button opens its dialog
  • Create Ticket files an issue and surfaces the new id
  • Start Ticket fetches body and creates a stack with the body verbatim
  • Make PR chip appears on rows where status ∈ {completed, pushed} and pr_url is null
  • PR-Open rows show the ↗#N link
  • Hover a row → popover renders with description / services / resources / timestamps
  • Old stack-table column widths in localStorage don't break the new layout (cleared by storage-key bump)

Closes the visible-action gap from #310.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions