mirror of
https://github.com/multica-ai/multica.git
synced 2026-08-03 19:20:07 +02:00
* chore(analytics): retire redundant PostHog tracking (MUL-4127) PostHog had become a chaotic, largely-unused second copy of data we already query from the DB and Grafana. Remove the redundant instrumentation. Server: every product event (signup, workspace_created, issue_created, issue_executed, chat_message_sent, team_invite_*, onboarding_*, agent_created, cloud_waitlist_joined, feedback_submitted, contact_sales_submitted, squad_created, autopilot_created) is now in metricsOnlyEvents, so metrics.RecordEvent still increments the Prometheus/Grafana counter but no longer ships to PostHog. DB rows remain the source of truth. Runtime/autopilot/ agent_task lifecycle were already Prometheus-only. Frontend: delete the PostHog-only funnel instrumentation — $pageview (+ web and desktop trackers), download_intent_expressed/page_viewed/initiated, the onboarding_started mirror, onboarding_runtime_path_selected/detected, feedback_opened, and source_backfill_*. The source-backfill modal itself stays (it PATCHes the questionnaire to the DB). Kept on PostHog (frontend only): $exception autocapture and the client_crash / client_unresponsive stability telemetry (no DB equivalent), plus $identify/$set. captureSignupSource (attribution cookie) stays — it still feeds the signup_source Prometheus label. Verified: pnpm typecheck, pnpm lint (0 errors), vitest (core/views/web/desktop), go test ./internal/analytics/... ./internal/metrics/... Co-authored-by: multica-agent <github@multica.ai> * docs(analytics): fix stale PostHog references after MUL-4127 (review follow-up) Addresses review of #4996 — three spots still described server events as active PostHog signals after they became metrics-only: - docs/analytics.md: issue_executed is no longer a PostHog success signal; it is Prometheus-only (multica_issue_executed_total) + issue.first_executed_at, in both the event contract and the Reconciliation section. - docs/analytics.md: the signup $set_once person properties (email, signup_source) are no longer emitted — signup is Prometheus-only; only the bucketed signup_source survives as the multica_signup_total label. - server/internal/metrics/business_events.go: RecordEvent doc comment no longer claims it ships product events to PostHog / "PostHog is reserved for user/product-behaviour events" — every server event is now metrics-only. Co-authored-by: multica-agent <github@multica.ai> --------- Co-authored-by: J <j@multica.ai> Co-authored-by: multica-agent <github@multica.ai>
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
|
|
import { render, screen } from "@testing-library/react";
|
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
import type { AgentRuntime } from "@multica/core/types";
|
|
import { I18nProvider } from "@multica/core/i18n/react";
|
|
import enCommon from "../../locales/en/common.json";
|
|
import enOnboarding from "../../locales/en/onboarding.json";
|
|
|
|
const TEST_RESOURCES = { en: { common: enCommon, onboarding: enOnboarding } };
|
|
|
|
// Drive the runtime picker via a hoisted mock so the step renders without a
|
|
// live daemon. (The onboarding_runtime_detected PostHog event this file used
|
|
// to cover was removed in MUL-4127.)
|
|
const mocks = vi.hoisted(() => ({
|
|
pickerState: {
|
|
runtimes: [] as AgentRuntime[],
|
|
selected: null as AgentRuntime | null,
|
|
selectedId: null as string | null,
|
|
setSelectedId: vi.fn<(id: string) => void>(),
|
|
hasRuntimes: false,
|
|
},
|
|
}));
|
|
|
|
vi.mock("../components/use-runtime-picker", () => ({
|
|
useRuntimePicker: () => mocks.pickerState,
|
|
}));
|
|
|
|
import { StepRuntimeConnect } from "./step-runtime-connect";
|
|
|
|
function renderStep() {
|
|
const onNext = vi.fn();
|
|
const onBack = vi.fn();
|
|
const qc = new QueryClient({
|
|
defaultOptions: { queries: { retry: false } },
|
|
});
|
|
render(
|
|
<QueryClientProvider client={qc}>
|
|
<I18nProvider locale="en" resources={TEST_RESOURCES}>
|
|
<StepRuntimeConnect wsId="ws_test" onNext={onNext} onBack={onBack} />
|
|
</I18nProvider>
|
|
</QueryClientProvider>,
|
|
);
|
|
return { onNext, onBack };
|
|
}
|
|
|
|
describe("StepRuntimeConnect", () => {
|
|
beforeEach(() => {
|
|
mocks.pickerState.runtimes = [];
|
|
mocks.pickerState.selected = null;
|
|
mocks.pickerState.selectedId = null;
|
|
mocks.pickerState.hasRuntimes = false;
|
|
vi.useFakeTimers({ shouldAdvanceTime: true });
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
it("mounts and shows the scanning UI without touching framework-level globals", () => {
|
|
renderStep();
|
|
expect(
|
|
screen.getByText(/connecting this computer/i),
|
|
).toBeInTheDocument();
|
|
});
|
|
});
|