Skip to content

fix(experiments): small interaction polish in experiment view - #88275

Merged
trunk-io[bot] merged 1 commit into
masterfrom
experiments/view-polish-fixes
Aug 25, 2026
Merged

trunk-io[bot] merged 1 commit into
masterfrom
experiments/view-polish-fixes

Conversation

@jurajmajerik

Copy link
Copy Markdown
Contributor

Problem

Four small rough edges in the experiment view:

  • The Save button in the distribution modal disables with no explanation when variant splits don't sum to 100.
  • The pencil buttons on the Settings tab (statistics, CUPED) have no tooltip or accessible label.
  • The details table formats confidence intervals inline instead of using the shared formatIntervalPercent helper.
  • The timeseries tooltip renders "NaN%" or "Infinity%" if a bound is not a finite number.

Changes

  • The distribution modal's Save button now shows "Percentage splits must sum to 100" on hover when disabled, matching the editor's inline error copy.
  • The Settings tab pencil buttons now have "Edit statistics settings" / "Edit CUPED settings" tooltips and aria-labels.
  • The details table uses formatIntervalPercent. Mechanical, output is identical.
  • The timeseries tooltip shows "—" for non-finite values, matching formatMetricValue.

How did you test this code?

No logic changes beyond the non-finite guard. No tests reference the touched props or strings. Not run: frontend typecheck and jest (light worktree without node_modules); no screenshots for the same reason. The tooltip and disabled-reason changes use standard LemonButton props.

Automatic notifications

  • Publish to changelog?

Docs update

None.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Written with Claude Code. These fixes come from the same experiment-view polish audit as #88216. Skills invoked: /wt, /writing-user-facing-copy, /writing-pr-descriptions (loaded earlier this session).

@jurajmajerik jurajmajerik self-assigned this Aug 25, 2026
@trunk-io

trunk-io Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

😎 Merged successfully - details.

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown
Contributor

🤖 CI report

✅ Trunk lane — non-backend lane

This PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes.

⚠️ Bundle size — 🔺 +69 B (+0.0%)

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

Total: 68.94 MiB · 🔺 +69 B (+0.0%)

No file changed by more than 1000 B.

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.36 MiB · 22 files no change ███░░░░░░░ 30.2% of 4.51 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
8.76 MiB · 3,235 files no change █████████░ 90.2% of 9.71 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
762 B src/index.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
304.9 KiB ../node_modules/.pnpm/posthog-js@1.418.16/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
258.5 KiB ../node_modules/.pnpm/posthog-js@1.418.16/node_modules/posthog-js/dist/module.js
246.0 KiB src/taxonomy/core-filter-definitions-by-group.json
154.2 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
104.6 KiB src/lib/api.ts
95.1 KiB ../packages/quill/packages/quill/dist/index.js
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

✅ Toolbar bundle — eager 2.25 MiB within budget

What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.

Metric Size Δ vs base Budget
Eager (shipped)
entry + static imports
2.25 MiB · 17 files no change ████░░░░░░ 39.3% of 5.72 MiB
Deferred (lazy) 2.09 MiB · 33 files no change n/a — loads on demand
Loader dist/toolbar.js 1.1 KiB no change █░░░░░░░░░ 5.8% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
744.5 KiB dist/toolbar/toolbar-app-JVD2MQXK.css
582.8 KiB dist/toolbar/chunk-chunk-4UKWPMLR.js
484.6 KiB dist/toolbar/chunk-chunk-GTGJDCUD.js
133.8 KiB dist/toolbar/chunk-chunk-2RWF5UDS.js
131.8 KiB dist/toolbar/chunk-chunk-T5KY5WYR.js
71.2 KiB dist/toolbar/toolbar-app-P4IPDGWN.js
69.0 KiB dist/toolbar/chunk-chunk-27JL52RE.js
35.6 KiB dist/toolbar/chunk-chunk-4UQ6YUAN.js
20.9 KiB dist/toolbar/chunk-chunk-E6PLENAX.js
12.2 KiB dist/toolbar/chunk-chunk-PIK3PADE.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

✅ Dist folder size — 🔺 +428 B (+0.0%)

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

Total: 1462.63 MiB · 🔺 +428 B (+0.0%)

✅ Playwright — all passed

All tests passed.

View test results →

@github-actions

github-actions Bot commented Aug 25, 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 c58f386 · box box-099bdd508e3f · ready in 614s (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 August 25, 2026 09:48
@greptile-apps

greptile-apps Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "fix(experiments): small interaction poli..." | Re-trigger Greptile

@trunk-io

trunk-io Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

Static Badge   Static Badge   Static Badge

View Full Report ↗︎ ⋅ Docs

@jurajmajerik jurajmajerik added the stamphog Request AI approval (no full review) label Aug 25, 2026

@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, contained UI polish (tooltip/aria-label additions, disabled-reason text, shared formatting helper reuse, NaN/Infinity guard) with no risky-territory surface; author is on the owning team and the helper swap is verified to produce identical output.

  • Author wrote 60% of the modified lines and has 114 merged PRs in these paths (familiarity MODERATE).
  • 👍 on the PR from greptile-apps[bot].
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 31L, 4F substantive — within ceiling
tier ✓ T1-agent / T1b-small (31L, 4F, single-area, fix)
stamphog 2.0.0b4 .stamphog/policy.yml @ c58f386 · reviewed head c58f386

@trunk-io
trunk-io Bot merged commit 84b81c0 into master Aug 25, 2026
311 of 318 checks passed
@trunk-io
trunk-io Bot deleted the experiments/view-polish-fixes branch August 25, 2026 11:45
@deployment-status-posthog

deployment-status-posthog Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-08-25 13:18 UTC Run
prod-us ✅ Deployed 2026-08-25 14:08 UTC Run
prod-eu ✅ Deployed 2026-08-25 13:48 UTC Run

This branch was successfully deployed

1 active deployment
preview-pr-88275 — c58f386e Deployed Aug 25, 2026 by github-actions[bot]
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