From 62775dbdc3b63867464c5bdd7e50fe9eb309b87f Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Tue, 10 Nov 2026 11:39:31 -0600 Subject: [PATCH 1/2] fix(shared): show zero seconds in minute durations --- packages/shared/src/orchestrationTiming.test.ts | 16 +++++++++++++++- packages/shared/src/orchestrationTiming.ts | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/orchestrationTiming.test.ts b/packages/shared/src/orchestrationTiming.test.ts index 9f75d70c37381..be3837d1fc4f3 100644 --- a/packages/shared/src/orchestrationTiming.test.ts +++ b/packages/shared/src/orchestrationTiming.test.ts @@ -1,6 +1,20 @@ import { describe, expect, it } from "vite-plus/test"; -import { deriveSubagentElapsedMs } from "./orchestrationTiming.ts"; +import { deriveSubagentElapsedMs, formatDuration } from "./orchestrationTiming.ts"; + +describe("formatDuration", () => { + it.each([ + [59_000, "59s"], + [59_500, "1m 0s"], + [60_000, "1m 0s"], + [720_000, "12m 0s"], + [736_000, "12m 16s"], + [3_600_000, "1h"], + [3_660_000, "1h 1m 0s"], + ])("formats %i milliseconds as %s", (durationMs, expected) => { + expect(formatDuration(durationMs)).toBe(expected); + }); +}); describe("deriveSubagentElapsedMs", () => { const startedAt = "2026-09-21T12:00:00.000Z"; diff --git a/packages/shared/src/orchestrationTiming.ts b/packages/shared/src/orchestrationTiming.ts index 1f43f99453456..f78c683931c2a 100644 --- a/packages/shared/src/orchestrationTiming.ts +++ b/packages/shared/src/orchestrationTiming.ts @@ -32,6 +32,6 @@ export function formatDuration(durationMs: number): string { const parts: string[] = []; if (hours > 0) parts.push(`${hours}h`); if (minutes > 0) parts.push(`${minutes}m`); - if (seconds > 0) parts.push(`${seconds}s`); + if (seconds > 0 || minutes > 0) parts.push(`${seconds}s`); return parts.join(" "); } From 6f89a7c76c8f4cc5098ace67620753ffe9fabea4 Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Tue, 10 Nov 2026 11:44:43 -0600 Subject: [PATCH 2/2] test(mobile): expect zero seconds in minute durations --- .../src/features/threads/subagent-card-presentation.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/mobile/src/features/threads/subagent-card-presentation.test.ts b/apps/mobile/src/features/threads/subagent-card-presentation.test.ts index e77e76472b34e..2b32f84fcb9cc 100644 --- a/apps/mobile/src/features/threads/subagent-card-presentation.test.ts +++ b/apps/mobile/src/features/threads/subagent-card-presentation.test.ts @@ -22,7 +22,7 @@ describe("subagent card", () => { expect(subagentCardElapsed([unfinished], DateTime.toEpochMillis(later))).toBeNull(); expect( subagentCardElapsed([{ ...unfinished, status: "running" }], DateTime.toEpochMillis(later)), - ).toBe("2m"); + ).toBe("2m 0s"); expect( subagentCardElapsed([{ ...unfinished, status: "idle" }], DateTime.toEpochMillis(later)), ).toBeNull();