diff --git a/packages/coding-agent/.changes/remove-test-telemetry-branch.md b/packages/coding-agent/.changes/remove-test-telemetry-branch.md new file mode 100644 index 000000000..350439952 --- /dev/null +++ b/packages/coding-agent/.changes/remove-test-telemetry-branch.md @@ -0,0 +1 @@ +- Stopped treating `NODE_ENV=test` as an implicit telemetry opt-out. diff --git a/packages/coding-agent/src/core/telemetry.ts b/packages/coding-agent/src/core/telemetry.ts index de8eb860f..bb32bce5f 100644 --- a/packages/coding-agent/src/core/telemetry.ts +++ b/packages/coding-agent/src/core/telemetry.ts @@ -212,9 +212,6 @@ export function isTelemetryEnabled(settingsManager: SettingsManager): boolean { if (override !== undefined) { return override; } - if (process.env.NODE_ENV === "test") { - return false; - } return settingsManager.getTelemetryEnabled(); } diff --git a/packages/coding-agent/test/agent-session-services.test.ts b/packages/coding-agent/test/agent-session-services.test.ts index 81a2414a3..7c1eec6c7 100644 --- a/packages/coding-agent/test/agent-session-services.test.ts +++ b/packages/coding-agent/test/agent-session-services.test.ts @@ -29,6 +29,7 @@ describe("createAgentSessionFromServices", () => { }); it("shows the telemetry disclosure independently of the Herdr reporter", async () => { + vi.stubEnv("DO_NOT_TRACK", "0"); vi.stubEnv("PRIME_AGENT_TELEMETRY", "1"); const tempDir = join(tmpdir(), `pi-session-telemetry-notice-${Date.now()}`); mkdirSync(tempDir, { recursive: true }); @@ -50,6 +51,7 @@ describe("createAgentSessionFromServices", () => { }); it("honors an explicit daemon-carried telemetry opt-out", async () => { + vi.stubEnv("DO_NOT_TRACK", "0"); vi.stubEnv("PRIME_AGENT_TELEMETRY", "1"); const tempDir = join(tmpdir(), `pi-session-daemon-telemetry-opt-out-${Date.now()}`); mkdirSync(tempDir, { recursive: true }); @@ -81,6 +83,7 @@ describe("createAgentSessionFromServices", () => { }); it("does not install top-level telemetry for a resumed child session", async () => { + vi.stubEnv("DO_NOT_TRACK", "0"); vi.stubEnv("PRIME_AGENT_TELEMETRY", "1"); const tempDir = join(tmpdir(), `pi-session-child-telemetry-${Date.now()}`); mkdirSync(tempDir, { recursive: true }); diff --git a/packages/coding-agent/test/telemetry.test.ts b/packages/coding-agent/test/telemetry.test.ts index 12b4e17c5..49c2ba426 100644 --- a/packages/coding-agent/test/telemetry.test.ts +++ b/packages/coding-agent/test/telemetry.test.ts @@ -2,7 +2,7 @@ import { lstatSync, mkdtempSync, readFileSync, statSync, symlinkSync, writeFileS import { tmpdir } from "node:os"; import { join } from "node:path"; import type { AssistantMessage } from "@earendil-works/pi-ai"; -import { afterEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { AgentSession, AgentSessionEvent } from "../src/core/agent-session.js"; import { SettingsManager } from "../src/core/settings-manager.js"; import { @@ -236,7 +236,7 @@ describe("telemetry controls", () => { it("honors settings and environment opt-outs", () => { const settings = SettingsManager.inMemory({ telemetry: { enabled: true } }); - vi.stubEnv("NODE_ENV", "production"); + vi.stubEnv("DO_NOT_TRACK", "0"); expect(isTelemetryEnabled(settings)).toBe(true); vi.stubEnv("DO_NOT_TRACK", "1"); @@ -251,14 +251,6 @@ describe("telemetry controls", () => { expect(isTelemetryEnabled(settings)).toBe(false); }); - it("is disabled by default in tests unless explicitly enabled", () => { - const settings = SettingsManager.inMemory({ telemetry: { enabled: true } }); - vi.stubEnv("NODE_ENV", "test"); - expect(isTelemetryEnabled(settings)).toBe(false); - vi.stubEnv("PRIME_AGENT_TELEMETRY", "1"); - expect(isTelemetryEnabled(settings)).toBe(true); - }); - it("normalizes malformed telemetry settings before updating them", async () => { const settings = SettingsManager.inMemory({ telemetry: true as never }); const disabledSettings = SettingsManager.inMemory({ telemetry: false as never }); @@ -276,6 +268,10 @@ describe("telemetry controls", () => { }); describe("agent telemetry aggregation", () => { + beforeEach(() => { + vi.stubEnv("DO_NOT_TRACK", "0"); + }); + it("captures only allowlisted built-in command names", async () => { vi.stubEnv("PRIME_AGENT_TELEMETRY", "1"); const sink = new FakeTelemetrySink(); diff --git a/packages/coding-agent/vitest.config.ts b/packages/coding-agent/vitest.config.ts index 04ec6693a..320ff2a98 100644 --- a/packages/coding-agent/vitest.config.ts +++ b/packages/coding-agent/vitest.config.ts @@ -12,6 +12,7 @@ export default defineConfig({ globals: true, environment: "node", testTimeout: 30000, + env: { DO_NOT_TRACK: "1" }, tags: [ { name: "process-stress",