From ef4d17ad07dc12cd8589f62fc480cfd2ee00eeed Mon Sep 17 00:00:00 2001 From: Ashish Kolhe Date: Mon, 2 Nov 2026 16:17:46 +0530 Subject: [PATCH] fix(autoobserve): never number a service label onto another service's real name Services still identical after every naming tier get #n. The number now skips any label another service already shows, so a service really named like a numbered label keeps it and every row stays distinct. --- .../components/autoobserve/live/liveAdapter.spec.ts | 11 +++++++++++ web/src/components/autoobserve/live/liveAdapter.ts | 13 ++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/web/src/components/autoobserve/live/liveAdapter.spec.ts b/web/src/components/autoobserve/live/liveAdapter.spec.ts index 60dd6b00c6..7ffd653b56 100644 --- a/web/src/components/autoobserve/live/liveAdapter.spec.ts +++ b/web/src/components/autoobserve/live/liveAdapter.spec.ts @@ -329,4 +329,15 @@ describe("toCoverageSource service names", () => { "web", ]); }); + + it("never numbers a label onto the name another service really has", () => { + const labels = names([ + svc("api", "prod"), + svc("api", "prod", "other"), + svc("api (prod/ns)", "elsewhere"), + svc("api (prod/ns) #1", "elsewhere"), + ]); + expect(new Set(labels).size).toBe(4); + expect(labels[3]).toBe("api (prod/ns) #1"); + }); }); diff --git a/web/src/components/autoobserve/live/liveAdapter.ts b/web/src/components/autoobserve/live/liveAdapter.ts index 652b7f4623..49496ee62a 100644 --- a/web/src/components/autoobserve/live/liveAdapter.ts +++ b/web/src/components/autoobserve/live/liveAdapter.ts @@ -293,9 +293,16 @@ const uniqueNames = (rows: AutoObserveCoverageRow[]) => { } const labels = rows.map((_, i) => labelOf(i)); const groups = groupBy(labels); - return labels.map((label, i) => { - const group = groups.get(label) ?? [i]; - return group.length > 1 ? `${label} #${group.indexOf(i) + 1}` : label; + const taken = new Set(labels); + const lastNumber = new Map(); + return labels.map((label) => { + if ((groups.get(label)?.length ?? 1) < 2) return label; + let n = (lastNumber.get(label) ?? 0) + 1; + while (taken.has(`${label} #${n}`)) n += 1; + const numbered = `${label} #${n}`; + lastNumber.set(label, n); + taken.add(numbered); + return numbered; }); };