diff --git a/ui/src/components/IssuesList.tsx b/ui/src/components/IssuesList.tsx
index 6335f02c..4abd2cea 100644
--- a/ui/src/components/IssuesList.tsx
+++ b/ui/src/components/IssuesList.tsx
@@ -608,41 +608,26 @@ export function IssuesList({
- {/* Spacer matching caret width so status icon aligns with group title (hidden on mobile) */}
-
- { e.preventDefault(); e.stopPropagation(); }}>
- onUpdateIssue(issue.id, { status: s })}
- />
-
-
- {issue.identifier ?? issue.id.slice(0, 8)}
+ {/* Title line - first on mobile, middle on desktop */}
+
+ {issue.title}
- {issue.title}
- {(issue.labels ?? []).length > 0 && (
-
- {(issue.labels ?? []).slice(0, 3).map((label) => (
-
- {label.name}
-
- ))}
- {(issue.labels ?? []).length > 3 && (
- +{(issue.labels ?? []).length - 3}
- )}
-
- )}
-
+
+ {/* Metadata line - second on mobile, first on desktop */}
+
+ {/* Spacer matching caret width so status icon aligns with group title (hidden on mobile) */}
+
+ { e.preventDefault(); e.stopPropagation(); }}>
+ onUpdateIssue(issue.id, { status: s })}
+ />
+
+
+ {issue.identifier ?? issue.id.slice(0, 8)}
+
{liveIssueIds?.has(issue.id) && (
@@ -652,90 +637,116 @@ export function IssuesList({
Live
)}
-
+
+
+
{formatDate(issue.createdAt)}
-
+
))}
diff --git a/ui/src/pages/Dashboard.tsx b/ui/src/pages/Dashboard.tsx
index 823d57df..e4b8747e 100644
--- a/ui/src/pages/Dashboard.tsx
+++ b/ui/src/pages/Dashboard.tsx
@@ -313,26 +313,28 @@ export function Dashboard() {
-
-
-
-
- {issue.title}
- {issue.assigneeAgentId && (() => {
- const name = agentName(issue.assigneeAgentId);
- return name
- ?
- : null;
- })()}
-
-
-
- {timeAgo(issue.updatedAt)}
+
+
+ {issue.title}
+
+
+
+
+
+ {issue.identifier ?? issue.id.slice(0, 8)}
+
+ {issue.assigneeAgentId && (() => {
+ const name = agentName(issue.assigneeAgentId);
+ return name
+ ?
+ : null;
+ })()}
+ ·
+
+ {timeAgo(issue.updatedAt)}
+
diff --git a/ui/src/pages/Inbox.tsx b/ui/src/pages/Inbox.tsx
index ff72947e..e55b3866 100644
--- a/ui/src/pages/Inbox.tsx
+++ b/ui/src/pages/Inbox.tsx
@@ -841,38 +841,39 @@ export function Inbox() {
{staleIssues.map((issue) => (
+
-
-
-
-
- {issue.identifier ?? issue.id.slice(0, 8)}
+
+ {issue.title}
- {issue.title}
- {issue.assigneeAgentId &&
- (() => {
- const name = agentName(issue.assigneeAgentId);
- return name ? (
-
- ) : (
-
- {issue.assigneeAgentId.slice(0, 8)}
-
- );
- })()}
-
- updated {timeAgo(issue.updatedAt)}
+
+
+
+
+ {issue.identifier ?? issue.id.slice(0, 8)}
+
+ {issue.assigneeAgentId &&
+ (() => {
+ const name = agentName(issue.assigneeAgentId);
+ return name ? (
+
+ ) : null;
+ })()}
+ ·
+
+ updated {timeAgo(issue.updatedAt)}
+
dismiss(`stale:${issue.id}`)}
- className="rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover/stale:opacity-100"
+ className="mt-0.5 rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover/stale:opacity-100 sm:mt-0"
aria-label="Dismiss"
>
@@ -900,7 +901,7 @@ export function Inbox() {
key={issue.id}
className="flex items-start gap-3 px-4 py-3 transition-colors hover:bg-accent/50"
>
-
+
{(isUnread || isFading) && (
-
-
-
- {issue.identifier ?? issue.id.slice(0, 8)}
-
-
- {issue.lastExternalCommentAt
- ? `commented ${timeAgo(issue.lastExternalCommentAt)}`
- : `updated ${timeAgo(issue.updatedAt)}`}
-
-
+
{issue.title}
+
+
+
+
+ {issue.identifier ?? issue.id.slice(0, 8)}
+
+
+ ·
+
+
+ {issue.lastExternalCommentAt
+ ? `commented ${timeAgo(issue.lastExternalCommentAt)}`
+ : `updated ${timeAgo(issue.updatedAt)}`}
+
+
);