diff --git a/docs/guides/feedback.mdx b/docs/guides/feedback.mdx index 60e73550d..f7f70231e 100644 --- a/docs/guides/feedback.mdx +++ b/docs/guides/feedback.mdx @@ -127,12 +127,13 @@ Only the existence (or in some cases the value) of these variables is checked ### CLI feedback +Event: `cli_render_feedback` + | Field | Value | |-------|-------| -| `$survey_id` | `render_satisfaction` | -| `$survey_response` | Raw rating (0–10) | +| `rating` | Raw rating (0–10) | | `rating_scale` | `10` for the current recommendation scale | -| `$survey_response_2` | Free-text comment (only when provided) | +| `comment` | Free-text comment (only when provided) | | `render_duration_ms` | Time the render took in milliseconds | | `doctor_summary` | System context (see below) | @@ -146,12 +147,13 @@ It may also include `wsl` or sandbox runtime flags when those environments are d ### Studio feedback +Event: `studio_feedback` + | Field | Value | |-------|-------| -| `$survey_id` | `studio_experience` | -| `$survey_response` | Raw rating (0–10) | +| `rating` | Raw rating (0–10) | | `rating_scale` | `10` for the current recommendation scale | -| `$survey_response_2` | Free-text comment (only when provided) | +| `comment` | Free-text comment (only when provided) | | `source` | `studio` | | `doctor_summary` | Browser context (platform, screen, CPU cores, device memory, network type) | diff --git a/packages/cli/src/commands/feedback.ts b/packages/cli/src/commands/feedback.ts index f3be656f0..88ab5e371 100644 --- a/packages/cli/src/commands/feedback.ts +++ b/packages/cli/src/commands/feedback.ts @@ -33,7 +33,7 @@ function normalizeComment(raw?: string): string | undefined { /** * Compact PostHog join keys appended to the environment string that rides * along with the forwarded report (and therefore lands verbatim in the wild - * feedback channel): `fid` = this submission's PostHog `survey sent` + * feedback channel): `fid` = this submission's PostHog `cli_render_feedback` * `feedback_id`; `tid` = the install's telemetry distinct_id; `renders` = * recent `render_job_id`s (newest last, `!` suffix = the render failed). * Together they turn a wild report into an exact telemetry lookup instead of diff --git a/packages/cli/src/telemetry/events.test.ts b/packages/cli/src/telemetry/events.test.ts index 5dd6c6253..c35864d03 100644 --- a/packages/cli/src/telemetry/events.test.ts +++ b/packages/cli/src/telemetry/events.test.ts @@ -231,7 +231,7 @@ describe("render telemetry events", () => { }); expect(trackEvent).toHaveBeenCalledWith( - "survey sent", + "cli_render_feedback", expect.objectContaining({ feedback_id: "feedback-uuid", recent_render_ids: "render-a,render-b", @@ -504,7 +504,7 @@ describe("trackRenderFeedback", () => { const [, props] = trackEvent.mock.calls[0] as [string, Record]; expect(props).not.toHaveProperty("render_duration_ms"); - expect(props.$survey_response).toBe(4); + expect(props.rating).toBe(4); expect(props.rating_scale).toBe(10); }); @@ -512,7 +512,7 @@ describe("trackRenderFeedback", () => { trackRenderFeedback({ rating: 5, renderDurationMs: 6000 }); expect(trackEvent).toHaveBeenCalledWith( - "survey sent", + "cli_render_feedback", expect.objectContaining({ render_duration_ms: 6000 }), ); }); diff --git a/packages/cli/src/telemetry/events.ts b/packages/cli/src/telemetry/events.ts index 23085eb34..8c67b88a4 100644 --- a/packages/cli/src/telemetry/events.ts +++ b/packages/cli/src/telemetry/events.ts @@ -630,17 +630,18 @@ export function trackRenderFeedback(props: { /** * Join key shared with the forwarded feedback report (Slack/backend): the * same uuid rides in the report's env string as `fid=…`, so a wild report - * resolves to exactly one PostHog "survey sent" event and vice versa. + * resolves to exactly one PostHog `cli_render_feedback` event and vice versa. */ feedbackId?: string; /** render_job_id values of this install's recent renders (newest last). */ recentRenderIds?: string[]; }): void { - trackEvent("survey sent", { - $survey_id: "render_satisfaction", - $survey_response: props.rating, + // Plain product event, not a PostHog survey response: nothing here is served + // by the surveys product (no survey definition, no targeting, no popover). + trackEvent("cli_render_feedback", { + rating: props.rating, rating_scale: FEEDBACK_RATING_SCALE, - ...(props.comment ? { $survey_response_2: props.comment } : {}), + ...(props.comment ? { comment: props.comment } : {}), ...(props.renderDurationMs !== undefined ? { render_duration_ms: props.renderDurationMs } : {}), ...(props.doctorSummary ? { doctor_summary: props.doctorSummary } : {}), ...(props.feedbackId ? { feedback_id: props.feedbackId } : {}), diff --git a/packages/studio/src/telemetry/events.test.ts b/packages/studio/src/telemetry/events.test.ts index ad4e7f140..b5d24fa3b 100644 --- a/packages/studio/src/telemetry/events.test.ts +++ b/packages/studio/src/telemetry/events.test.ts @@ -84,8 +84,8 @@ describe("studio telemetry events", () => { trackStudioFeedback({ rating }); expect(trackEvent).toHaveBeenCalledWith( - "survey sent", - expect.objectContaining({ $survey_response: rating, rating_scale: 10 }), + "studio_feedback", + expect.objectContaining({ rating, rating_scale: 10 }), ); }); }); diff --git a/packages/studio/src/telemetry/events.ts b/packages/studio/src/telemetry/events.ts index b73d00802..fadc6fc25 100644 --- a/packages/studio/src/telemetry/events.ts +++ b/packages/studio/src/telemetry/events.ts @@ -69,11 +69,12 @@ export function trackStudioSegmentEaseEdit(props: { ease: string }): void { } export function trackStudioFeedback(props: { rating: number; comment?: string }): void { - trackEvent("survey sent", { - $survey_id: "studio_experience", - $survey_response: props.rating, + // Plain product event, not a PostHog survey response: nothing here is served + // by the surveys product (no survey definition, no targeting, no popover). + trackEvent("studio_feedback", { + rating: props.rating, rating_scale: 10, - ...(props.comment ? { $survey_response_2: props.comment } : {}), + ...(props.comment ? { comment: props.comment } : {}), doctor_summary: getBrowserDoctorSummary(), source: "studio", });