Skip to content

feat(mcp-analytics): crown the lab with the highest share - #114881

Merged
trunk-io[bot] merged 4 commits into
posthog/tile-groups-frontendfrom
posthog/lab-scoreboard-winner
Oct 11, 2026
Merged

trunk-io[bot] merged 4 commits into
posthog/tile-groups-frontendfrom
posthog/lab-scoreboard-winner

Conversation

@pauldambra

Copy link
Copy Markdown
Member

Problem

People on the MCP analytics leaderboard cannot see at a glance which model lab leads. The scoreboard shows the top three labs as equal cards, so they read each number to compare.

This is layer 3 of 3. It reuses the winner crown from #114811 on a page that is not a dashboard.

Changes

  • The lab scoreboard crowns the card with the highest share. The crown follows the Calls and Users toggle. A tie crowns each tied lab, and a scoreboard where every share is zero crowns none.
  • The crown and the cheeky hog now live in lib/components/TileDecorations, because products cannot import from each other. Dashboard tiles use the same component.
  • The hog rises when any card that holds it is hovered, not only a dashboard tile. Dashboard behavior is unchanged.
  • Mechanical: the first commit only moves and renames (TileDecorations, TileBadge, --tile-hog-slide-duration).

Before is the same cards without the crown. It was not captured.

Light Dark Narrow, 520px
Crown on the Anthropic card, light theme Crown on the Anthropic card, dark theme Crown on the first card, stacked cards

How did you test this code?

Test rationale: The new test.each rows for leadingLabs catch a tie that crowns one lab, a scoreboard of zeros that crowns the first card, and an empty scoreboard that throws. They failed before the function existed.

  • Looked at the existing leaderboard story in Storybook with fake data: light, dark and 520px wide.
  • On the dashboard story, a real hover raises the hog and the hog slides back down after the pointer leaves. The crown and the group title still render.
  • The existing leaderboard story now shows a crown, so its two snapshots change and need approval.
  • Not checked: a scoreboard with xAI in the top three, because the story data has Anthropic, OpenAI and Google.

Release status

  • No feature flag controls this change

Docs update

None.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Agent: Claude Code, Sonnet 5


Created with PostHog Desktop

@pauldambra pauldambra self-assigned this Oct 10, 2026
@pauldambra
pauldambra added this pull request to stack #114876 October 10, 2026 11:02
@posthog

posthog Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

PostHog Review · Standard · reviewed 419d507

Nothing to post.

Step Status Result
Prepare the diff done 10 files
Main review and lenses done 0 issues
Merge and cap done 0 → 0
Publish done Nothing to post

@github-actions

github-actions Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Trunk lane — backend Python lane

This PR is assigned to the backend Python lane. It runs backend Python tests and may merge in parallel with PRs in other lanes.

⚠️ Complexity (TypeScript) — 2 functions above the limit (max 30)

Cyclomatic complexity above the limit in changed typescript files (10 for production files, 15 for test files). Warn only: worth simplifying when you next touch these functions.

Function Location Complexity Limit
DashboardItems frontend/src/scenes/dashboard/DashboardItems.tsx:84 30 10
<anonymous> frontend/src/scenes/dashboard/DashboardItems.tsx:527 21 10
✅ Duplication (Python) — clean

New Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

✅ Duplication (TypeScript) — clean

New TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

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

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

Total: 75.57 MiB · 🔺 +641 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.67 MiB · 23 files 🟢 -127 B (-0.0%) █████████░ 90.7% of 1.84 MiB
logged-out boot: index + App + bootApp (preloaded by every page, including /login)
src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
3.83 MiB · 675 files 🟢 -127 B (-0.0%) ██████████ 95.0% of 4.03 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
7.79 MiB · 2,463 files 🟢 -127 B (-0.0%) █████████░ 93.4% of 8.34 MiB
dashboard scene
src/scenes/dashboard/Dashboard.tsx
9.95 MiB · 3,534 files 🔺 +166 B (+0.0%) █████████░ 91.1% of 10.92 MiB
today home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
7.81 MiB · 2,473 files 🟢 -127 B (-0.0%) █████████░ 90.9% of 8.58 MiB
events scene
src/scenes/activity/explore/EventsScene.tsx
9.55 MiB · 3,373 files 🟢 -127 B (-0.0%) █████████░ 90.9% of 10.51 MiB
replay detail scene
src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
12.36 MiB · 4,204 files 🟢 -127 B (-0.0%) ████████░░ 78.6% of 15.72 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/svg/ stays out of src/index.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/components/ stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonMarkdown/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/RichContentEditor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/CodeSnippet/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/dashboards/frontend/widgets/previews/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 zod/v4/locales/de.js stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/svg/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/components/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/project-homepage/today/TodayReportPage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/queries/Query/Query.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx stays out of src/scenes/activity/explore/EventsScene.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/index.tsx
1.3 KiB src/RootErrorBoundary.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
839 B src/scenes/ChunkLoadErrorBoundary.tsx
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
Size File
317.7 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
220.8 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
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
101.6 KiB src/products.tsx
99.6 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
40.7 KiB src/lib/utils/eventUsageLogic.ts
38.7 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
33.9 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
29.0 KiB ../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
317.7 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
280.8 KiB src/taxonomy/core-filter-definitions-by-group.json
220.8 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
153.7 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
112.1 KiB ../packages/quill/packages/quill/dist/index.js
101.6 KiB src/products.tsx
99.6 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
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
Size File
317.7 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
280.8 KiB src/taxonomy/core-filter-definitions-by-group.json
220.8 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
181.9 KiB src/queries/validators.js
153.7 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
112.1 KiB ../packages/quill/packages/quill/dist/index.js
101.6 KiB src/products.tsx
99.6 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
Size File
317.7 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
280.8 KiB src/taxonomy/core-filter-definitions-by-group.json
220.8 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
153.7 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
112.1 KiB ../packages/quill/packages/quill/dist/index.js
101.6 KiB src/products.tsx
99.6 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
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
Size File
317.7 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
280.8 KiB src/taxonomy/core-filter-definitions-by-group.json
220.8 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
181.9 KiB src/queries/validators.js
153.7 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
112.1 KiB ../packages/quill/packages/quill/dist/index.js
101.6 KiB src/products.tsx
99.6 KiB src/lib/api.ts
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
Size File
317.7 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
316.0 KiB ../node_modules/.pnpm/posthog-js@1.438.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/rrweb.js
280.8 KiB src/taxonomy/core-filter-definitions-by-group.json
220.8 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
181.9 KiB src/queries/validators.js
153.7 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
112.1 KiB ../packages/quill/packages/quill/dist/index.js
101.6 KiB src/products.tsx
99.6 KiB src/lib/api.ts

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.24 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.24 MiB · 19 files no change ████░░░░░░ 39.2% of 5.72 MiB
Deferred (lazy) 2.19 MiB · 44 files no change n/a — loads on demand
Loader dist/toolbar.js 1.2 KiB no change █░░░░░░░░░ 6.0% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
865.8 KiB dist/toolbar/toolbar-app-URUTSZGS.css
671.1 KiB dist/toolbar/chunk-chunk-DMUAVDNY.js
259.5 KiB dist/toolbar/chunk-chunk-LVD64W5Y.js
138.9 KiB dist/toolbar/chunk-chunk-HW4JNIUD.js
131.8 KiB dist/toolbar/chunk-chunk-FDH2IBXT.js
75.2 KiB dist/toolbar/toolbar-app-GE2AEUZQ.js
69.0 KiB dist/toolbar/chunk-chunk-TSAL54PB.js
35.6 KiB dist/toolbar/chunk-chunk-SWVSLHNK.js
21.7 KiB dist/toolbar/chunk-chunk-HKHDUKI3.js
6.8 KiB dist/toolbar/chunk-chunk-DV7IWQNF.js

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

✅ Dist folder size — 🔺 +1.6 KiB (+0.0%)

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

Total: 1007.80 MiB · 🔺 +1.6 KiB (+0.0%)

✅ Playwright — all passed

All tests passed.

View test results →

✅ Hogbox preview — ready, open the preview

▶ 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 419d507 · box box-e965679f300e · ready in 1123s (push → usable) · build log · rebuilds on every push, torn down on close

@posthog

posthog Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

🕓 This approval covered an earlier revision. There are new visual changes to review in the newer comment below.

✅ Visual changes approved by @pauldambra — baseline updated in 9f19ae5.

View this run in PostHog

4 new.

Install the Visual Review Chrome extension to see visual review results at the top of your pull requests.

@trunk-io

trunk-io Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Static Badge   Static Badge   Static Badge

Failed Test Failure Summary Logs
personalAPIKeysLogic clamps a group write to what each row can take The test exceeded the maximum allowed time of 5000 ms and did not complete. Logs ↗︎

View Full Report ↗︎ ⋅ Docs

@pauldambra
pauldambra force-pushed the posthog/lab-scoreboard-winner branch from 9f19ae5 to 8e943db Compare October 10, 2026 11:23
@pauldambra
pauldambra marked this pull request as ready for review October 10, 2026 11:24
@pauldambra pauldambra added the stamphog Request AI approval (no full review) label Oct 10, 2026 — with PostHog
@parameterai

parameterai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Risk: No findings

The change since the last review adds only a Storybook snapshot-test option (skipCanvasDraw) to the TileDecorations stories file; it is test configuration with no runtime, API, or data-handling surface. All previously reviewed layers of the pull request are unchanged since the last review, which found no issues.

Sentinel reviewed 5f51674 · Review settings

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-10T11:27:29.144154Z 8e943db Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

stamphog[bot]

This comment was marked as outdated.

@posthog

posthog Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

🕓 This approval covered an earlier revision. There are new visual changes to review in the newer comment below.

✅ Visual changes approved by @pauldambra — baseline updated in b2a2667.

View this run in PostHog

4 new.

Install the Visual Review Chrome extension to see visual review results at the top of your pull requests.

@trunk-io

trunk-io Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

😎 Stack merged successfully - details.

@stamphog
stamphog Bot dismissed their stale review October 10, 2026 13:47

A new stamphog review started for this PR — the fresh verdict replaces this approval.

stamphog[bot]

This comment was marked as outdated.

@pauldambra
pauldambra force-pushed the posthog/lab-scoreboard-winner branch from b2a2667 to 60292c7 Compare October 10, 2026 15:13
@stamphog
stamphog Bot dismissed their stale review October 10, 2026 15:13

A new stamphog review started for this PR — the fresh verdict replaces this approval.

@github-actions
github-actions Bot requested a deployment to preview-pr-114881 October 10, 2026 15:14 In progress
@pauldambra pauldambra removed the stamphog Request AI approval (no full review) label Oct 10, 2026
@pauldambra pauldambra added the stamphog Request AI approval (no full review) label Oct 10, 2026 — with PostHog
stamphog[bot]

This comment was marked as outdated.

@pauldambra
pauldambra force-pushed the posthog/lab-scoreboard-winner branch from 60292c7 to 0bbbe5e Compare October 10, 2026 15:23
@stamphog
stamphog Bot dismissed their stale review October 10, 2026 15:23

A new stamphog review started for this PR — the fresh verdict replaces this approval.

Copy link
Copy Markdown
Member Author

Note

🤖 Automated comment by QA Swarm — not written by a human

Review by one cheap first-pass reviewer (sonnet). It found nothing that needed a stronger reviewer, so none was called.

Verdict: ✅ APPROVE (round 1 @ 0bbbe5e)

No defects above NIT. The crown works on the MCP analytics lab scoreboard, and dashboards keep their behavior after the move.

Key findings

  • ⚪ NIT, checked In Users mode the crown on the first card might touch the caption above it. I measured it in a browser at 1280px and 520px. The caption ends 1px above the crown. They do not overlap.
  • ⚪ NIT, left as is The crown says "Winner" without the lab name. When two labs tie, a screen reader hears "Winner" twice. A lab name needs a new prop on the shared component. Not worth it now.
  • ⚪ NIT, left as is leadingLabs crowns every lab tied for first, including a three-way tie. That is the intended rule, and the tests cover a tie, all zeros and no labs.

Checked and clean

No old names are left after the move. The new hover rule matches the same elements as before for all five dashboard tile kinds. The crown is a sibling of the card, so the card's overflow: hidden cannot cut it off. The wrapper keeps the card height and the data-attr hook. Ties are safe with floats, because tied labs have identical inputs.

Reviewer summaries

Reviewer Assessment
🧭 router Danger LOW, confidence HIGH. Delegated nothing.
Previous rounds (0)

First round on this PR.


Automated by QA Swarm — not a human review

@pauldambra pauldambra removed the stamphog Request AI approval (no full review) label Oct 10, 2026
@pauldambra pauldambra added the stamphog Request AI approval (no full review) label Oct 10, 2026 — with PostHog
stamphog[bot]

This comment was marked as outdated.

The winner crown and the cheeky hog were made for dashboard tiles, but a second feature now needs them.
The component moves from the dashboards product to lib/components, because products do not import from each other.
Names follow: TileDecorations, TileBadge and the tile-hog-slide-duration property.
The hog now rises when any card that holds it is hovered, not only a grid tile.
Dashboard behavior is unchanged.

Generated-By: PostHog Desktop
Task-Id: a0588627-3b8c-4fc5-b331-716af1994715
…erboard

The lab scoreboard shows the top three labs as cards. The card with the highest share now wears the winner crown, for calls and for users.
A tie at the top crowns each tied lab, and no lab is crowned when every share is zero.

Generated-By: PostHog Desktop
Task-Id: a0588627-3b8c-4fc5-b331-716af1994715
@pauldambra
pauldambra force-pushed the posthog/lab-scoreboard-winner branch from 0bbbe5e to 6f8e852 Compare October 10, 2026 18:29
@stamphog
stamphog Bot dismissed their stale review October 10, 2026 18:29

A new stamphog review started for this PR — the fresh verdict replaces this approval.

stamphog[bot]

This comment was marked as outdated.

The full dashboard snapshot raced the async chart paint, so the
weekly file volume line was drawn in some runs and not in others.

Generated-By: PostHog Desktop
Task-Id: ce157272-6ad8-42da-8ce3-4fe4f408f574
@stamphog
stamphog Bot dismissed their stale review October 10, 2026 20:44

A new stamphog review started for this PR — the fresh verdict replaces this approval.

stamphog[bot]

This comment was marked as outdated.

@posthog

posthog Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

4 updated
Run: 8dbfdee0-4f89-40f2-9dc8-9888a43f09d2

Co-authored-by: pauldambra <984817+pauldambra@users.noreply.github.com>
@stamphog
stamphog Bot dismissed their stale review October 11, 2026 04:48

A new stamphog review started for this PR — the fresh verdict replaces this approval.

@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.

Approved.

Contained, reversible frontend changes with focused tests and no unresolved substantive review concerns. No risky behavior or policy refusal grounds were found; scanning comments and the thumbs-up reaction are not current-head reviews.

  • Author wrote 87% of the modified lines and has 83 merged PRs in these paths (familiarity STRONG).
  • 👍 on the PR from chatgpt-codex-connector[bot].
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 104L, 9F substantive, 120L/10F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1c-medium (120L, 10F, two-areas, feat)
stamphog 2.4.1 .stamphog/policy.yml @ 419d507 · reviewed head 419d507

@trunk-io
trunk-io Bot merged commit 235772a into master Oct 11, 2026
224 checks passed
@trunk-io
trunk-io Bot deleted the posthog/lab-scoreboard-winner branch October 11, 2026 05:25
@deployment-status-posthog

deployment-status-posthog Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-10-11 05:44 UTC Run
prod-us ✅ Deployed 2026-10-11 05:58 UTC Run
prod-eu ✅ Deployed 2026-10-11 05:58 UTC Run

This branch was successfully deployed

1 active deployment
preview-pr-114881 — 419d5074 Deployed Oct 11, 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