diff --git a/apps/dashboard/src/RoomCardV2.test.ts b/apps/dashboard/src/RoomCardV2.test.ts
index b347f9d..31be0d3 100644
--- a/apps/dashboard/src/RoomCardV2.test.ts
+++ b/apps/dashboard/src/RoomCardV2.test.ts
@@ -109,4 +109,56 @@ describe('RoomCardV2', () => {
expect(html).toContain('TASK_DONE');
expect(html).toContain('prod 배포 완료');
});
+
+ it('renders live progress as markdown', () => {
+ const html = renderToStaticMarkup(
+ createElement(RoomCardV2, {
+ activity: activity({
+ pairedTask: {
+ id: 'task-1',
+ title: 'OpenAPI sync',
+ status: 'running',
+ roundTripCount: 1,
+ updatedAt: '2026-04-28T02:01:00.000Z',
+ currentTurn: {
+ turnId: 'turn-1',
+ role: 'owner',
+ intentKind: 'implementation',
+ state: 'running',
+ attemptNo: 1,
+ executorServiceId: 'svc-1',
+ executorAgentType: 'codex',
+ activeRunId: null,
+ createdAt: '2026-04-28T02:00:00.000Z',
+ updatedAt: '2026-04-28T02:01:00.000Z',
+ completedAt: null,
+ lastError: null,
+ progressText:
+ '최신 `origin/dev`로 fast-forward한 뒤 `pnpm openapi:sync`를 실행합니다.',
+ progressUpdatedAt: '2026-04-28T02:01:00.000Z',
+ },
+ outputs: [],
+ },
+ }),
+ activityLoading: false,
+ busy: false,
+ draft: '',
+ entry: { ...entry, status: 'processing' },
+ expanded: false,
+ inboxItems: [],
+ locale: 'ko',
+ onDraftChange: () => {},
+ onSendMessage: () => {},
+ onToggle: () => {},
+ pinned: false,
+ t,
+ ...formatters,
+ }),
+ );
+
+ expect(html).toContain('class="live-progress"');
+ expect(html).toContain('origin/dev');
+ expect(html).toContain('pnpm openapi:sync');
+ expect(html).not.toContain('`origin/dev`');
+ });
});
diff --git a/apps/dashboard/src/RoomCardV2.tsx b/apps/dashboard/src/RoomCardV2.tsx
index 1f77e34..758b62a 100644
--- a/apps/dashboard/src/RoomCardV2.tsx
+++ b/apps/dashboard/src/RoomCardV2.tsx
@@ -519,7 +519,7 @@ function CollapsedLiveTurn({
{turn.progressText && turn.progressText.trim() ? (
-
{turn.progressText}
+ {turn.activeRunId}
) : null}
@@ -527,6 +527,14 @@ function CollapsedLiveTurn({
);
}
+function LiveProgressBody({ text }: { text: string }) {
+ return (
+ {liveProgressDisplay}
+ {t.rooms.loadingActivity}
)}