From fa40708b74cfa649f60a6d5fec94d31e2feca48b Mon Sep 17 00:00:00 2001 From: MarcoDotIO Date: Thu, 29 Oct 2026 19:52:55 -0400 Subject: [PATCH 1/2] fix(cli): trace summary no longer prints near-second durations as "1000ms" `t3 trace summary` picked the unit before rounding, so a p50, p90 or max between 999.5 ms and 1 s printed as "1000ms" instead of "1.0s". Co-Authored-By: Claude Opus 5.5 --- apps/server/src/cli/trace.test.ts | 12 +++++++++++- apps/server/src/cli/trace.ts | 5 +++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/server/src/cli/trace.test.ts b/apps/server/src/cli/trace.test.ts index 6c00b240f0a71..b4e471dddd77b 100644 --- a/apps/server/src/cli/trace.test.ts +++ b/apps/server/src/cli/trace.test.ts @@ -1,6 +1,6 @@ import { assert, it } from "@effect/vitest"; -import { makeTraceSpanSummary } from "./trace.ts"; +import { formatTraceSummary, makeTraceSpanSummary } from "./trace.ts"; const MINUTE_MS = 60_000; @@ -62,3 +62,13 @@ it("reads failures and interrupts of browser spans from their OTLP status", () = const [render] = summarizer.finish().spans; assert.deepStrictEqual([render?.count, render?.interrupted, render?.failures], [4, 2, 1]); }); + +it("prints durations that round up to a second in seconds", () => { + const summarizer = makeTraceSpanSummary(); + [span("rpc", 999.4, MINUTE_MS), span("rpc", 999.6, 2 * MINUTE_MS)].forEach(summarizer.addLine); + + const row = formatTraceSummary(summarizer.finish(), 25) + .split("\n") + .find((line) => line.startsWith("rpc")); + assert.deepStrictEqual(row?.trim().split(/\s+/).slice(3, 6), ["999ms", "1.0s", "1.0s"]); +}); diff --git a/apps/server/src/cli/trace.ts b/apps/server/src/cli/trace.ts index 244636c514061..6540d6a6c6e2f 100644 --- a/apps/server/src/cli/trace.ts +++ b/apps/server/src/cli/trace.ts @@ -99,10 +99,11 @@ export function makeTraceSpanSummary(sinceMs = -Infinity) { return { addLine, finish }; } +// Round before picking the unit, or 999.6 ms prints as "1000ms". const formatMs = (ms: number) => - ms < 1_000 ? `${Math.round(ms)}ms` : `${(ms / 1_000).toFixed(1)}s`; + Math.round(ms) < 1_000 ? `${Math.round(ms)}ms` : `${(ms / 1_000).toFixed(1)}s`; -function formatTraceSummary( +export function formatTraceSummary( summary: ReturnType["finish"]>, limit: number, ) { From a4f1bdeb400cc709ae8935a8dc89182b63af53d0 Mon Sep 17 00:00:00 2001 From: maria-rcks Date: Sat, 31 Oct 2026 04:25:48 +0000 Subject: [PATCH 2/2] refactor(cli): remove redundant duration rounding comment --- apps/server/src/cli/trace.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/server/src/cli/trace.ts b/apps/server/src/cli/trace.ts index 0befd869fc2d5..b2463dab0d98d 100644 --- a/apps/server/src/cli/trace.ts +++ b/apps/server/src/cli/trace.ts @@ -99,7 +99,6 @@ export function makeTraceSpanSummary(sinceMs = -Infinity) { return { addLine, finish }; } -// Round before picking the unit, or 999.6 ms prints as "1000ms". const formatMs = (ms: number) => Math.round(ms) < 1_000 ? `${Math.round(ms)}ms` : `${Math.round(ms / 100) / 10}s`;