Conversation
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
🤖 CI report✅ Trunk lane — non-backend laneThis 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.
|
| Function | Location | Complexity | Limit |
|---|---|---|---|
<anonymous> |
products/workflows/frontend/Workflows/workflowLogic.ts:3643 |
39 | 10 |
onDrop |
products/workflows/frontend/Workflows/hogflows/hogFlowEditorLogic.tsx:2731 |
36 | 10 |
runSave |
products/workflows/frontend/Workflows/workflowLogic.ts:3204 |
35 | 10 |
HogFlowEditorPanelBuildDetail |
products/workflows/frontend/Workflows/hogflows/panel/HogFlowEditorPanelBuildDetail.tsx:41 |
33 | 10 |
saveWorkflowSuccess |
products/workflows/frontend/Workflows/workflowLogic.ts:4139 |
31 | 10 |
launchBroadcast |
products/workflows/frontend/Broadcasts/broadcastWizardLogic.ts:1403 |
24 | 10 |
<anonymous> |
products/workflows/frontend/Broadcasts/broadcastWizardLogic.ts:942 |
17 | 10 |
BroadcastReviewStep |
products/workflows/frontend/Broadcasts/steps/BroadcastReviewStep.tsx:61 |
17 | 10 |
getBranchLabel |
products/workflows/frontend/Workflows/hogflows/hogFlowEditorLogic.tsx:78 |
14 | 10 |
fitView |
products/workflows/frontend/Workflows/hogflows/hogFlowEditorLogic.tsx:2899 |
13 | 10 |
setEmail |
products/workflows/frontend/Broadcasts/broadcastWizardLogic.ts:1189 |
12 | 10 |
saveName |
products/workflows/frontend/Broadcasts/broadcastWizardLogic.ts:1245 |
11 | 10 |
moveToDraft |
products/workflows/frontend/Broadcasts/broadcastWizardLogic.ts:1562 |
11 | 10 |
BroadcastContentStep |
products/workflows/frontend/Broadcasts/steps/BroadcastContentStep.tsx:17 |
11 | 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) — 13 new duplicated blocks (worst 3357 tokens)
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.
| First copy | Second copy | Lines | Tokens |
|---|---|---|---|
products/workflows/frontend/Workflows/hogflows/hogFlowEditorLogic.tsx:233 |
products/workflows/frontend/Workflows/hogflows/hogFlowEditorLogic.tsx:1098 |
863 | 3357 |
products/workflows/frontend/Workflows/workflowLogic.ts:338 |
products/workflows/frontend/Workflows/workflowLogic.ts:1203 |
863 | 3357 |
products/workflows/frontend/Workflows/hogflows/steps/stepWaitUntilTimeWindowLogic.ts:404 |
products/workflows/frontend/Workflows/workflowLogic.ts:2076 |
308 | 1123 |
products/workflows/frontend/Workflows/hogflows/steps/stepDelayLogic.ts:478 |
products/workflows/frontend/Workflows/workflowLogic.ts:2468 |
306 | 1119 |
products/workflows/frontend/Workflows/hogflows/steps/stepWaitUntilTimeWindowLogic.ts:101 |
products/workflows/frontend/Workflows/hogflows/steps/stepWaitUntilTimeWindowLogic.ts:407 |
304 | 1115 |
products/workflows/frontend/Workflows/hogflows/steps/stepDelayLogic.ts:176 |
products/workflows/frontend/Workflows/hogflows/steps/stepWaitUntilTimeWindowLogic.ts:102 |
302 | 1110 |
products/workflows/frontend/Workflows/workflowMetricsSummaryLogic.ts:448 |
products/workflows/frontend/Workflows/workflowMetricsSummaryLogic.ts:824 |
58 | 259 |
products/workflows/frontend/Workflows/workflowMetricsSummaryLogic.ts:448 |
products/workflows/frontend/Workflows/workflowMetricsSummaryLogic.ts:682 |
58 | 257 |
products/workflows/frontend/Workflows/workflowLogic.ts:579 |
products/workflows/frontend/Workflows/workflowMetricsSummaryLogic.ts:448 |
58 | 246 |
nodejs/src/cdp/schema/hogflow.ts:223 |
products/workflows/frontend/Workflows/hogflows/steps/types.ts:358 |
28 | 183 |
products/workflows/frontend/Workflows/workflowLogic.ts:604 |
products/workflows/frontend/Workflows/workflowLogic.ts:973 |
31 | 136 |
products/workflows/frontend/Workflows/hogflows/steps/stepDelayLogic.ts:450 |
products/workflows/frontend/Workflows/hogflows/steps/stepDelayLogic.ts:755 |
28 | 109 |
products/workflows/frontend/Workflows/hogflows/steps/stepDelayLogic.ts:452 |
products/workflows/frontend/Workflows/workflowLogic.ts:580 |
26 | 105 |
✅ Comment density — 2% of added code lines are comments (11 of 559)
This section warns when comments are more than 3% of the code lines a PR adds, and alerts above 6%. Before agent-assisted PRs, the typical share was about 2%. Only full-line comments count. Docstrings, generated files, snapshots, migrations, and workflow files are left out.
Comments that restate the code, record how the change came about, or narrate the next line add noise for the next reader. Keep the comments that explain a reason the code cannot show, and remove the rest. See .agents/skills/writing-code-comments/SKILL.md for the house rules.
Files with the most added comment lines:
| File | Comment lines | Added lines |
|---|---|---|
nodejs/src/cdp/services/messaging/helpers/utm.ts |
3 | 116 |
nodejs/src/cdp/schema/hogflow.ts |
2 | 11 |
products/workflows/frontend/Broadcasts/broadcastTestSendLogic.ts |
2 | 13 |
products/workflows/frontend/Workflows/hogflows/steps/types.ts |
2 | 11 |
nodejs/src/cdp/services/messaging/email.service.ts |
1 | 30 |
products/workflows/frontend/Workflows/hogflows/steps/components/UtmTagFields.tsx |
1 | 48 |
This check does not block merging. It updates on every push and clears when the share drops.
⚠️ Bundle size — 🔺 +227.0 KiB (+0.3%)
Uncompressed size of every built .js bundle, compared against the base branch.
Total: 69.79 MiB · 🔺 +227.0 KiB (+0.3%)
| File | Size | Δ vs base |
|---|---|---|
exporter/src/exporter/scenes/ExporterNotebookScene.js |
3.90 MiB | 🔺 +68.1 KiB (+1.7%) |
posthog-app/src/scenes/project-homepage/ProjectHomepage.js |
1.6 KiB | 🟢 -57.4 KiB (-97.2%) |
posthog-app/src/scenes/project-homepage/ai-first/AiFirstHomepage.js |
43.4 KiB | 🔺 +43.4 KiB (new) |
posthog-app/src/scenes/AuthenticatedShell.js |
268.1 KiB | 🟢 -35.6 KiB (-11.7%) |
posthog-app/src/layout/today/TodaySpacesPane.js |
31.9 KiB | 🔺 +31.9 KiB (new) |
posthog-app/_parent/products/ai_observability/frontend/scoreDefinitions/AIObservabilityScorerScene.js |
21.6 KiB | 🔺 +21.6 KiB (new) |
posthog-app/src/scenes/project-homepage/today/TodayReportPage.js |
19.0 KiB | 🔺 +19.0 KiB (new) |
posthog-app/_parent/products/posthog_ai/frontend/scenes/TaskTracker/components/ArtifactObjectEmbed.js |
removed | 🟢 -18.7 KiB (-100.0%) |
posthog-app/_parent/products/data_modeling/frontend/ModelsScene.js |
58.3 KiB | 🔺 +18.7 KiB (+47.1%) |
posthog-app/_parent/products/canvas/frontend/scene/CanvasScene.js |
69.1 KiB | 🔺 +14.5 KiB (+26.5%) |
posthog-app/_parent/products/tasks/frontend/spaces/SpaceScene.js |
71.6 KiB | 🟢 -13.7 KiB (-16.0%) |
posthog-app/src/scenes/project-homepage/today/TodayHome.js |
10.3 KiB | 🔺 +10.3 KiB (new) |
posthog-app/_parent/products/tasks/frontend/spaces/NewSessionScene.js |
9.4 KiB | 🔺 +9.4 KiB (new) |
render-query/src/render-query/render-query.js |
18.76 MiB | 🔺 +9.0 KiB (+0.0%) |
posthog-app/src/layout/today/TodayViewsSidebar.js |
8.5 KiB | 🔺 +8.5 KiB (new) |
posthog-app/src/layout/today/TodaySessionHoverCard.js |
8.3 KiB | 🔺 +8.3 KiB (new) |
exporter/_parent/products/posthog_ai/frontend/scenes/TaskTracker/components/ArtifactObjectEmbed.js |
removed | 🟢 -8.0 KiB (-100.0%) |
posthog-app/_parent/products/ai_observability/frontend/scoreDefinitions/AIObservabilityScorersScene.js |
13.6 KiB | 🟢 -7.6 KiB (-35.9%) |
posthog-app/src/scenes/project-homepage/today/TodayReportHoverCard.js |
6.8 KiB | 🔺 +6.8 KiB (new) |
posthog-app/src/layout/today/TodaySpaceHoverCard.js |
6.7 KiB | 🔺 +6.7 KiB (new) |
posthog-app/_parent/products/canvas/frontend/sidePanel/CanvasSidePanel.js |
45.9 KiB | 🟢 -5.6 KiB (-10.8%) |
posthog-app/_parent/products/tasks/frontend/spaces/NewSpaceDialog.js |
5.5 KiB | 🔺 +5.5 KiB (new) |
posthog-app/_parent/products/posthog_ai/frontend/scenes/TaskTracker/TaskTracker.js |
91.9 KiB | 🔺 +4.6 KiB (+5.3%) |
exporter/_parent/products/posthog_ai/frontend/scenes/TaskTracker/TaskTracker.js |
92.2 KiB | 🔺 +4.4 KiB (+5.0%) |
posthog-app/src/scenes/notebooks/NotebookScene.js |
34.7 KiB | 🟢 -3.3 KiB (-8.8%) |
posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene.js |
94.3 KiB | 🔺 +2.4 KiB (+2.7%) |
posthog-app/src/layout/today/TodayToolsSidebar.js |
2.1 KiB | 🔺 +2.1 KiB (new) |
posthog-app/src/layout/today/TodayChatHoverCard.js |
2.0 KiB | 🔺 +2.0 KiB (new) |
exporter/_parent/products/workflows/frontend/Workflows/Workflow.js |
124.7 KiB | 🔺 +1.9 KiB (+1.5%) |
posthog-app/src/layout/today/TodayLibrarySidebar.js |
1.8 KiB | 🔺 +1.8 KiB (new) |
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.63 MiB · 22 files | 🔺 +12.0 KiB (+0.7%) | █████████░ 88.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.72 MiB · 661 files | 🔺 +144.2 KiB (+3.9%) | █████████░ 92.3% of 4.03 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
7.59 MiB · 2,409 files | 🟢 -201.9 KiB (-2.5%) | █████████░ 91.0% of 8.34 MiB |
dashboard scenesrc/scenes/dashboard/Dashboard.tsx |
9.67 MiB · 3,392 files | 🔺 +26.8 KiB (+0.3%) | ███████░░░ 71.8% of 13.48 MiB |
today home pathsrc/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx |
7.61 MiB · 2,417 files | (no base measurement) | █████████░ 88.6% of 8.58 MiB |
events scenesrc/scenes/activity/explore/EventsScene.tsx |
9.29 MiB · 3,244 files | 🔺 +26.7 KiB (+0.3%) | ███████░░░ 73.5% of 12.64 MiB |
replay detail scenesrc/scenes/session-recordings/detail/SessionRecordingDetail.tsx |
12.12 MiB · 4,130 files | 🔺 +47.8 KiB (+0.4%) | ████████░░ 77.1% 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
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] 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
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts 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
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.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
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 |
| 854 B | src/scenes/ChunkLoadErrorBoundary.tsx |
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
| Size | File |
|---|---|
| 306.2 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 220.3 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 |
| 100.5 KiB | src/lib/api.ts |
| 92.7 KiB | src/products.tsx |
| 69.4 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 40.1 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 |
|---|---|
| 306.2 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.3 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 |
| 110.1 KiB | ../packages/quill/packages/quill/dist/index.js |
| 100.5 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 92.7 KiB | src/products.tsx |
| 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 |
|---|---|
| 306.2 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.3 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.8 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 |
| 110.1 KiB | ../packages/quill/packages/quill/dist/index.js |
| 100.5 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 92.7 KiB | src/products.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
| Size | File |
|---|---|
| 306.2 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.3 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 |
| 110.1 KiB | ../packages/quill/packages/quill/dist/index.js |
| 100.5 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 92.7 KiB | src/products.tsx |
| 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 |
|---|---|
| 306.2 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.3 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.8 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 |
| 110.1 KiB | ../packages/quill/packages/quill/dist/index.js |
| 100.5 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 92.7 KiB | src/products.tsx |
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
| Size | File |
|---|---|
| 315.5 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/rrweb.js |
| 306.2 KiB | ../node_modules/.pnpm/posthog-js@1.435.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 279.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 220.3 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.8 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 |
| 110.1 KiB | ../packages/quill/packages/quill/dist/index.js |
| 100.5 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/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.20 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.20 MiB · 19 files | 🔺 +1.8 KiB (+0.1%) | ████░░░░░░ 38.4% of 5.72 MiB |
| Deferred (lazy) | 2.11 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 |
|---|---|
| 835.5 KiB | dist/toolbar/toolbar-app-FSDWO46I.css |
| 657.5 KiB | dist/toolbar/chunk-chunk-SLUTN3OK.js |
| 259.4 KiB | dist/toolbar/chunk-chunk-7JWMBALG.js |
| 138.2 KiB | dist/toolbar/chunk-chunk-JZ43POKQ.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-FDH2IBXT.js |
| 75.2 KiB | dist/toolbar/toolbar-app-LJ7FFVU6.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-TSAL54PB.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-P52PYKZI.js |
| 21.0 KiB | dist/toolbar/chunk-chunk-BO2MEODF.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 — 🔺 +2.65 MiB (+0.3%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 960.40 MiB · 🔺 +2.65 MiB (+0.3%)
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
🧰 Additional context used📚 Code guidelines (2)No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: PostHog/posthog/.coderabbit.yaml Review profile: QUIET Plan: Enterprise Run ID: 📒 Files selected for processing (1)
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 1 remain after this review. 📝 WalkthroughWalkthroughBroadcast and workflow email actions now support optional UTM tagging and custom UTM parameters. When enabled, email sending adds missing tags to eligible links, using rendered values where configured and workflow or action names for defaults. Broadcast settings also apply to test sends. Priority: ➖ Normal Merge Risk: 🔵 Low · up to Email viewers may omit UTM tags that recipients received, making post-send inspection inaccurate. This is a bounded discrepancy; the PR is otherwise mergeable with owner awareness. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to Tagging is opt-in, encodes link values, and preserves team-scoped sender checks. However, saved copies of sent emails omit the added tags, potentially obscuring recipient data included in delivered links. Configuration authorization and privacy-policy coverage remain unverified. Retained concerns
Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 1✅ Passed checks (1 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to GitHub limitations.
🟠 Major · Capture the HTML that the provider sends. · email.service.ts:603
nodejs/src/cdp/services/messaging/email.service.ts:603
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winCapture the HTML that the provider sends.
When UTM tagging is enabled, the provider receives
sendParams, butbuildRowForEmailon Line 618 still receives the originalparams. The captured email asset therefore shows untagged links even though the recipient receives tagged links. PasssendParamsto asset capture so the stored email matches the sent email.
🧹 Nitpick comments (1)
nodejs/src/cdp/services/messaging/helpers/utm.test.ts (1)
71-74: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAssert every resolved tag.
toMatchObjectlets these cases pass ifresolveUtmTagsdropsutm_mediumor an omitted defaultutm_content. UsetoEqualwith all four expected tags for each case. As per coding guidelines, assertions should be “as concrete as possible” so broken code cannot pass the test.Source: Coding guidelines
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
Review profile: QUIET
Plan: Enterprise
Run ID: ba3776ec-9d8b-4af7-ad2a-ccb33cd4e3ff
📒 Files selected for processing (16)
nodejs/src/cdp/schema/hogflow.tsnodejs/src/cdp/services/hogflows/actions/hog_function.tsnodejs/src/cdp/services/hogflows/hogflow-functions.service.tsnodejs/src/cdp/services/messaging/email.service.test.tsnodejs/src/cdp/services/messaging/email.service.tsnodejs/src/cdp/services/messaging/helpers/utm.test.tsnodejs/src/cdp/services/messaging/helpers/utm.tsproducts/workflows/frontend/Broadcasts/broadcastTestSendLogic.tsproducts/workflows/frontend/Broadcasts/broadcastWizardLogic.tsproducts/workflows/frontend/Broadcasts/broadcastWorkflowEdits.test.tsproducts/workflows/frontend/Broadcasts/steps/BroadcastContentStep.tsxproducts/workflows/frontend/Broadcasts/steps/BroadcastReviewStep.tsxproducts/workflows/frontend/Workflows/hogflows/panel/HogFlowEditorPanelBuildDetail.tsxproducts/workflows/frontend/Workflows/hogflows/steps/components/UtmTagFields.stories.tsxproducts/workflows/frontend/Workflows/hogflows/steps/components/UtmTagFields.tsxproducts/workflows/frontend/Workflows/hogflows/steps/types.ts
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 10 remain after this review.
|
✅ Visual changes approved by @dmarchuk — baseline updated in 4 changed, 2 new. Install the Visual Review Chrome extension to see visual review results at the top of your pull requests. |
6 updated Run: f0eea788-77f7-425a-ae7c-49860e1fa072 Co-authored-by: dmarchuk <8395106+dmarchuk@users.noreply.github.com>
Problem
Changes
The email step gets an Add UTM tags to links switch, in the workflow editor and on the broadcast Content step. It is off by default.
With the switch on, each link in the sent email gets four tags. Each tag has a field, and an empty field uses the default:
utm_sourceposthogutm_mediumemailutm_campaignutm_contentFields accept Liquid with the recipient's data, for example
{{ person.properties.plan }}.The fields show an example link with the current values.
Links that stay as written:
mailto:, relative links and anchors.data-ph-no-utmattribute.The tags go before any
#fragment. The rest of the URL stays as written.The tags are added at send time, before click tracking wraps the links, so they reach the destination page through the click redirect.
The broadcast Review step says when links get tags. A broadcast test email uses the same values, so the test shows the links the audience gets.
Mechanical: the step config keys
utm_tags_enabledandutm_paramsin the nodejs and frontend schemas, and the flow and step names passed to the send code.Note
Open question for review: should new broadcasts have the switch on by default? A team-level default belongs in a follow-up, because it needs a settings migration.
How did you test this code?
Local stack, driven in Playwright. Django and a
cdp-apiNode process ran from this branch. The sender was the local maildev integration, and each email was read back from the maildev API. The broadcast was namedSpring sale 🎉 Zoë.…/pricing?utm_source=posthog&utm_medium=email&utm_campaign=Spring%20sale%20%F0%9F%8E%89%20Zo%C3%AB…&utm_content=Send%20emailutm_source=newsletter,utm_campaign={{ person.properties.email }}…/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=success%40simulator.amazonses.com&utm_content=Send%20emailutm_campaign={{ person.properties.not_a_property }}utm_campaignfalls back to the broadcast nameutm_campaign={{ person.properties.email(broken)Per link, in the switched-on emails:
https://example.com/p?a=1&b=2#plans#plans,aandbkepthttps://example.com/?utm_campaign=launchutm_campaign=launchkept, the other tags added{{ unsubscribe_url }},mailto:,<a data-ph-no-utm href="https://example.com/partner">Postgres after Continue: the email step config holds
utm_tags_enabled: trueandutm_params: {"utm_source": "newsletter", "utm_campaign": "{{ person.properties.plan }}"}.Workflow editor: switch on,
utm_campaignandutm_contentfilled in, Save. Postgres holds the same two keys underutm_params.Test rationale:
helpers/utm.test.tscovers the link rules and how custom values replace defaults.tracking_enabledblock ofemail.service.test.tscover the send path: defaults from the flow and step names, rendered custom values, and the fallback for a Liquid error.broadcastWorkflowEdits.test.tschecks that a broadcast saves the switch and the values onto the email step.Real launches through the queue worker and SES: four broadcasts launched from the wizard to one person, with this branch's Node running in place of the local CDP worker. Every batch job completed and each run logged "Email sent" through the SES sender.
utm_tags_enabled: true,utm_params: {}newsletter,{{ person.properties.plan }}{{ person.properties.planutm_tags_enabled: falseEdge cases in a maildev test send:
utm_campaign={{ "Starter & Premium" }}arrives asutm_campaign=Starter%20%26%20Premium, not HTML-escaped. A link withdata-hrefbeforehrefis tagged. A link whosetitlementionsdata-ph-no-utmis tagged. A link with the realdata-ph-no-utmattribute is unchanged.SES delivery to a real inbox: a wizard test email went through SES from a
tracia.iosender to a Gmail inbox, withutm_source=newsletterandutm_campaign={{ person.properties.email }}. In the delivered HTML, SES click tracking wraps each link, and the wrapped targets are:https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=success%40simulator.amazonses.com&utm_content=Send%20emailhttps://example.com/p?a=1&b=2&utm_source=newsletter&…#planshttps://example.com/?utm_campaign=launch&utm_source=newsletter&utm_medium=email&utm_content=Send%20emailmailto:and thedata-ph-no-utmlink, unchangedRelease status
Automatic notifications
Docs update
None yet. The workflow email docs can describe the switch once the default is settled.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: Claude Code, Claude Opus 5.5
🤖 Generated with Claude Code
https://claude.ai/code/session_01BR6LoqsDMB9Wfnftcy2KiG