Commit 5a81b00
authored
feat(gastown): redesign Merge Queue with needs-attention and activity log (#1378)
* feat(gastown): add getMergeQueueData tRPC procedure for merge queue page
Add a dedicated tRPC query that returns structured merge queue data:
- needsAttention section with openPRs, failedReviews, and stalePRs
- activityLog with enriched review-related bead events
- Full JOINs to review_metadata, source beads, convoy_metadata, agents, rigs
- Input params: townId (required), rigId, limit, since for filtering/polling
- Zod schemas with rpcSafe wrappers and type declarations for frontend
* feat(gastown): build 'Needs Your Attention' section for Merge Queue page (#1365)
* feat(gastown): configurable terminal orientation with drag-to-resize (#1299)
* feat(gastown): configurable terminal orientation and drag-to-resize (#1237)
Terminal bar can be positioned at bottom/top/left/right with drag-to-resize.
Position and size persisted to localStorage. Collapsed state only reserves
the tab bar strip. Dynamic page padding replaces static pb-[340px].
DrawerStack offsets when terminal is on the right.
* fix(gastown): clamp size on orientation switch, add vertical close button
Re-clamp persisted size when switching position so horizontal minimum
(100px) doesn't persist as a too-small vertical width (min 200px).
Show close button on agent tabs in vertical mode via absolute positioning
on hover.
* fix(gastown): fix terminal resize handle and position picker for left/right orientations
- Make resize handle a flex child instead of absolute positioned to avoid
z-index conflicts with framer-motion stacking contexts
- Add visible hover indicator pill on resize handle for discoverability
- Remove width/height from CSS transition so drag resize is immediate
- Use fixed positioning with viewport clamping for position picker popup
to prevent overflow on left/right orientations
* chore: cherry-pick getMergeQueueData types from bead 0
* feat(gastown): build 'Needs Your Attention' section for Merge Queue page
Add NeedsAttention component with:
- Three attention categories: open PRs, failed reviews, stale PRs
- Convoy grouping with header cards showing progress, branch, merge mode
- Action buttons: Open PR, Retry Review, Fail Bead, View Bead
- DrawerStack integration for bead and convoy drawer opening
- Confirmation dialogs for destructive actions
- Empty state when no items need attention
Rewrite MergesPageClient to use getMergeQueueData tRPC procedure
with 5s polling interval.
* feat(gastown): add convoy grouping and per-rig filtering to Merge Queue page (#1366)
* feat(gastown): add convoy grouping and per-rig filtering to Merge Queue page
- Add RefineryActivityLog with convoy grouping: entries grouped by convoy
with header cards showing title, branch, progress, clickable to open
convoy drawer
- Add per-rig filter dropdown using listRigs query and shadcn Select,
passes rigId to getMergeQueueData for server-side filtering
- Include status_changed ActionType with type guard (no unsafe 'as' cast)
- Polish layout: page title, rig filter, Needs Attention, Activity Log
sections with consistent headers and empty states
* fix(gastown): move hooks above early returns and paginate by convoy groups
- Move all useMemo hooks above isLoading/empty early returns to prevent
React crash when entries transition from 0 to non-zero (hooks must be
called in the same order on every render)
- Replace flat-entry pagination with group-based pagination: convoy
groups (sorted by most recent activity) are kept whole, and standalone
entries fill remaining page budget. This ensures recently active
convoys appear on page 1 regardless of other convoys' sizes.
* fix(gastown): interleave convoy groups and standalone entries by recency in pagination
The previous pagination showed all convoy groups before any standalone
entries regardless of timestamps. A standalone entry more recent than all
convoy groups would still appear below them on page 1.
Merge convoy groups and standalone entries into a unified DisplayItem list
sorted by most-recent timestamp, then paginate over that list. Convoy
groups use their latestTimestamp as sort key; standalone entries use their
event.created_at. This ensures the most recently active items appear first
on page 1 regardless of whether they are convoy-grouped or standalone.
Hooks were already correctly placed before early returns (no conditional
hooks issue in the current code).
* fix(gastown): gate fail button behind admin check and fix pagination remaining count
Hide the admin-only 'Fail Bead' button for non-admin users by checking
isAdmin from the session. Fix the activity log pagination to compute
hasMore and remaining count based on actual visible entries rather than
the budget, preventing incorrect 'Show more' state when a convoy group
exceeds the page budget.1 parent ee2748f commit 5a81b00
8 files changed
Lines changed: 2234 additions & 45 deletions
File tree
- cloudflare-gastown/src
- dos
- town
- trpc
- src
- app/(app)/gastown/[townId]/merges
- lib/gastown/types
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1734 | 1734 | | |
1735 | 1735 | | |
1736 | 1736 | | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
1737 | 1745 | | |
1738 | 1746 | | |
1739 | 1747 | | |
| |||
0 commit comments