From c691ac52acbfdbe72eb54532724956b0d3f1afd1 Mon Sep 17 00:00:00 2001 From: Sean Oliver <882952+seanoliver@users.noreply.github.com> Date: Fri, 29 May 2026 09:23:03 -0700 Subject: [PATCH] fix(cli): drop redundant identify from identity stitch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Go StitchLogin and TS X-Gotrue-Id interception both fired $create_alias and $identify(distinctID, nil) back-to-back on first stitch. The Identify carries no person properties, so $create_alias already owns the device->user merge — the Identify was pure event volume waste (verified: 0 of 638K posthog-go identify events on 2026-05-26 carried $anon_distinct_id linkage). The ephemeral-environment gate from #5366 already handles the spike population; this halves the remaining persistent-laptop stitch volume. GROWTH-890 --- apps/cli-go/internal/telemetry/service.go | 3 --- apps/cli-go/internal/telemetry/service_test.go | 3 +-- apps/cli/src/legacy/auth/legacy-platform-api.layer.ts | 1 - .../src/legacy/auth/legacy-platform-api.layer.unit.test.ts | 4 ++-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/cli-go/internal/telemetry/service.go b/apps/cli-go/internal/telemetry/service.go index 26869ad5a8..6b237f7e8c 100644 --- a/apps/cli-go/internal/telemetry/service.go +++ b/apps/cli-go/internal/telemetry/service.go @@ -137,9 +137,6 @@ func (s *Service) StitchLogin(distinctID string) error { if err := s.analytics.Alias(distinctID, s.state.DeviceID); err != nil { return err } - if err := s.analytics.Identify(distinctID, nil); err != nil { - return err - } } s.state.DistinctID = distinctID return SaveState(s.state, s.fsys) diff --git a/apps/cli-go/internal/telemetry/service_test.go b/apps/cli-go/internal/telemetry/service_test.go index 5a19198c83..39df2bd0e2 100644 --- a/apps/cli-go/internal/telemetry/service_test.go +++ b/apps/cli-go/internal/telemetry/service_test.go @@ -151,8 +151,7 @@ func TestServiceStitchLoginPersistsDistinctID(t *testing.T) { require.Len(t, analytics.aliases, 1) assert.Equal(t, "user-123", analytics.aliases[0].distinctID) assert.Equal(t, deviceID, analytics.aliases[0].alias) - require.Len(t, analytics.identifies, 1) - assert.Equal(t, "user-123", analytics.identifies[0].distinctID) + assert.Empty(t, analytics.identifies) require.Len(t, analytics.captures, 1) assert.Equal(t, "user-123", analytics.captures[0].distinctID) diff --git a/apps/cli/src/legacy/auth/legacy-platform-api.layer.ts b/apps/cli/src/legacy/auth/legacy-platform-api.layer.ts index ff16c8afcf..654c97fb5e 100644 --- a/apps/cli/src/legacy/auth/legacy-platform-api.layer.ts +++ b/apps/cli/src/legacy/auth/legacy-platform-api.layer.ts @@ -97,7 +97,6 @@ const makeLegacyPlatformApiServices = Effect.gen(function* () { stitchAttempted = true; yield* analytics.alias(gotrueId, runtime.deviceId); - yield* analytics.identify(gotrueId); const state: LegacyTelemetryState = { enabled, diff --git a/apps/cli/src/legacy/auth/legacy-platform-api.layer.unit.test.ts b/apps/cli/src/legacy/auth/legacy-platform-api.layer.unit.test.ts index 1047501322..a33d241ebc 100644 --- a/apps/cli/src/legacy/auth/legacy-platform-api.layer.unit.test.ts +++ b/apps/cli/src/legacy/auth/legacy-platform-api.layer.unit.test.ts @@ -296,7 +296,7 @@ describe("legacyPlatformApiLayer", () => { yield* api.v1.listAllProjects(); expect(analytics.aliases).toEqual([{ distinctId: "user-123", alias: "device-123" }]); - expect(analytics.identifies).toEqual([{ distinctId: "user-123", properties: {} }]); + expect(analytics.identifies).toEqual([]); const telemetry = readTelemetryConfig(configDir); expect(telemetry.distinct_id).toBe("user-123"); expect(telemetry.enabled).toBe(true); @@ -374,7 +374,7 @@ describe("legacyPlatformApiLayer", () => { yield* api.v1.listAllProjects(); expect(analytics.aliases).toEqual([{ distinctId: "user-123", alias: "device-123" }]); - expect(analytics.identifies).toEqual([{ distinctId: "user-123", properties: {} }]); + expect(analytics.identifies).toEqual([]); expect(readTelemetryConfig(configDir).distinct_id).toBe("user-123"); } finally { rmSync(configDir, { recursive: true, force: true });