Skip to content

feat(insights): migrate the metric insight to the composable quill Metric - #70220

Merged
sampennington merged 2 commits into
masterfrom
posthog-code/metric-insight-composable
Jul 14, 2026
Merged

feat(insights): migrate the metric insight to the composable quill Metric#70220
sampennington merged 2 commits into
masterfrom
posthog-code/metric-insight-composable

Conversation

@sampennington

Copy link
Copy Markdown
Contributor

Problem

The metric insight renders the legacy monolithic MetricCard from @posthog/quill-charts. The composable Metric in @posthog/quill-components/metric is the direction of travel and reached feature parity in #70142 (user-configured pill colors, working change-pill tooltip); the insight should compose it instead.

Changes

Stacked on #70142.

frontend/src/scenes/insights/views/Metric/Metric.tsx swaps MetricCard for the composed parts. All data wiring — summary modes, comparison change, labels, dashed in-progress period, axis formatting — is unchanged; only the presentation layer moves:

  • MetricCard's title={null} + changeInline + changeSize="md" props become composition: no MetricTitle, and a MetricHeader row of MetricValue + MetricDelta with the insight's larger-pill classes passed via className
  • The scene component keeps the name MetricCard (quill's Metric is imported un-aliased)

At rest and hovering a period:

resting
hover

The Metric chart type stays gated on the metric-insight flag (the flag only gates the picker option; saved insights render regardless).

How did you test this code?

  • Verified in the running app with Playwright: resting/hover states, headline following the hovered point, subtitle swapping to the period label, pill swapping to point-vs-previous, custom pill colors, and the change tooltip opening — no console errors
  • The existing Insights/Metric story snapshot covers the rendered scene; no new tests, since the change is presentational and the data wiring is untouched

Automatic notifications

  • Publish to changelog?
  • Alert Sales and Marketing teams?

Docs update

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

  • Authored with PostHog Code (Claude). Split out of feat(mcp-analytics): migrate metric tiles to the composable quill Metric #70142 on request so the quill/MCP work and the insight migration review independently.
  • The insight's pill sizing intentionally lives at this call site (a className on MetricDelta) rather than as a quill Badge size variant — the larger pill is an insight need, not a design-system concept.

Created with PostHog Code

@github-actions

github-actions Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

🦔 Hogbox preview · ✅ ready

▶ Open the preview

🔑 Login test@posthog.com / 12345678 (demo data)
🧩 Running this PR's backend and frontend, on the PostHog :master base
🔗 Link stable across rebuilds — a re-push swaps the box underneath, the URL stays
🔒 Access tailnet only (PostHog VPN)
🛠️ Admin inspect & debug state in hogland
💤 Idle sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen

commit 08199d7 · box box-7a7bf1e9175f · ready in 712s (push → usable) · build log · rebuilds on every push, torn down on close

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team July 11, 2026 09:47
@greptile-apps

greptile-apps Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "feat(insights): migrate the metric insig..." | Re-trigger Greptile

Comment thread frontend/src/scenes/insights/views/Metric/Metric.tsx
@github-actions

github-actions Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Bundle size — 🔺 +33.0 KiB (+0.0%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 64.43 MiB · 🔺 +33.0 KiB (+0.0%)

File Size Δ vs base
render-query/src/render-query/render-query.js 21.24 MiB 🔺 +29.6 KiB (+0.1%)

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.21 MiB · 22 files 🔺 +161 B (+0.0%) ███░░░░░░░ 28.2% of 4.29 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
8.11 MiB · 2,973 files no change █████████░ 87.7% of 9.25 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx

Largest files eagerly shipped from src/index.tsx
Size File
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
6.3 KiB ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js
4.5 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
3.9 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.4 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.3 KiB src/RootErrorBoundary.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
789 B src/scenes/ChunkLoadErrorBoundary.tsx
668 B src/index.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
278.6 KiB ../node_modules/.pnpm/posthog-js@1.399.5/node_modules/posthog-js/dist/rrweb.js
267.7 KiB ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
234.9 KiB src/taxonomy/core-filter-definitions-by-group.json
222.1 KiB ../node_modules/.pnpm/posthog-js@1.399.5/node_modules/posthog-js/dist/module.js
164.0 KiB src/queries/validators.js
154.3 KiB ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
105.9 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

⚠️ Dist folder size — 🔺 +493.5 KiB (+0.0%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1284.35 MiB · 🔺 +493.5 KiB (+0.0%)

Playwright — all passed

All tests passed.

View test results →

@trunk-io

trunk-io Bot commented Jul 11, 2026

Copy link
Copy Markdown

Static BadgeStatic BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

@posthog

posthog Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Visual changes approved by @sampennington — baseline updated in 08199d7.

View this run in PostHog

2 changed.

Changed

Snapshot Before After
insights-metric--default--dark before after
insights-metric--default--light before after

Base automatically changed from posthog-code/metric-composable-migration to master July 13, 2026 08:24
…tric

Swaps the legacy quill-charts MetricCard for the composed parts; the
scene component is renamed MetricCard locally. Data wiring (summary
modes, comparison change, labels, dashed in-progress period, axis
formatting) is unchanged.

Generated-By: PostHog Code
Task-Id: 72430f28-e189-4960-a853-2de2c6250990
2 updated
Run: 689cece9-f1c2-4c5a-a69d-3c6c0adf3848

Co-authored-by: sampennington <56024559+sampennington@users.noreply.github.com>

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small presentational refactor swapping a monolithic quill component for its composable parts, authored by the owning team with strong familiarity; the one substantive Greptile concern was discussed and mutually resolved as inapplicable, and visual snapshots were reviewed/approved.

  • Author wrote 100% of the modified lines and has 406 merged PRs in these paths (familiarity STRONG).
  • 👍 on the PR from greptile-apps[bot], hex-security-app[bot].
Gate mechanics and policy version
Gate Result
prerequisites all clear
deny-list no deny categories matched
size 43L, 4F substantive — within ceiling
tier T1-agent / T1b-small (43L, 4F, single-area, feat)
stamphog 2.0.0b3 .stamphog/policy.yml @ 1d13637 · reviewed head 08199d7

@sampennington
sampennington enabled auto-merge (squash) July 14, 2026 08:06
@sampennington
sampennington merged commit a60981a into master Jul 14, 2026
226 of 267 checks passed
@sampennington
sampennington deleted the posthog-code/metric-insight-composable branch July 14, 2026 08:19
@deployment-status-posthog

deployment-status-posthog Bot commented Jul 14, 2026

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-07-14 08:48 UTC Run
prod-us ✅ Deployed 2026-07-14 09:01 UTC Run
prod-eu ✅ Deployed 2026-07-14 09:03 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stamphog Request AI approval (no full review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant