Skip to content

feat(cdp): replay failed workflow runs from the admin replay tool - #124789

Merged
trunk-io[bot] merged 78 commits into
masterfrom
dmarchuk/cdp-invocation-replay-workflows
Nov 12, 2026
Merged

trunk-io[bot] merged 78 commits into
masterfrom
dmarchuk/cdp-invocation-replay-workflows

Conversation

@dmarchuk

@dmarchuk dmarchuk commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Problem

  • After an outage, staff can replay failed destination runs (#122314) but not failed workflow runs, so those people stay stuck.

Changes

  • The replay tool gets an "Include workflows" option, off by default. The CLI flag is --include-workflows.
  • The tool is renamed "Replay failed CDP runs", because it now covers workflows too. A longer name runs past the sidebar.
  • A replayed workflow run continues from the failed step, so earlier steps are not sent again.
  • Inactive workflows and workflows with a sensitive email step are skipped.
  • Template filters match a workflow when one of its steps uses the template.
  • Workflow rows link to the workflow admin page.

Note

A failed email step counts as a failed run only when the step is set to stop the workflow on error. The default is to continue, so the run ends as succeeded and the tool cannot find the failed send.

How did you test this code?

  • Email replay, all real: the local Node CDP services, ClickHouse and Amazon SES (sandbox, simulator recipient). A batch workflow emailed 4 people while SES was unreachable. After SES was back, the tool replayed those runs from the browser and the emails went out.
  • The other cases below used failed runs written straight into ClickHouse and a stand-in rerun API.
Email replay steps and results
Step Result
Batch run with an email step that continues on error, SES unreachable SES refused all 4 sends, yet each run was recorded as succeeded. Nothing to replay.
Same with the step set to stop on error 4 failed runs: "Failed to send email via SES: connect ECONNREFUSED"
Preview, before any later send succeeded 0 runs. 4 under "Function has not succeeded since the window ended".
One batch run after SES was back 4 emails sent
Preview again 1 workflow, 4 runs
Send 4 Status "Done", 1 request, HTTP 200
hog_invocation_results for the 4 run IDs failed at 14:14, then running and succeeded at 14:29. The 8 failures outside the window were untouched.
app_metrics2 for the failed batch run email_sent 4 on the email step
Preview once more 0 runs
Other steps and results

Setup: 3 workflows and 1 webhook destination in a demo team. Failed runs: active workflow 3, draft workflow 2, sensitive-email workflow 2, destination 2. All data is invented.

Case Result
Preview without "Include workflows" 1 destination, 2 runs
Preview with it 1 workflow and 1 destination, 5 runs. Draft (2) and sensitive email (2) listed as not replayed.
Workflow name links Workflow admin page, 200
Wrong count on the send page 400, "Type 5 to confirm. Nothing was sent." The API got 0 requests.
Send 5 2 of 2 requests, both 200
Requests the API got hog_flows/<id>/rerun with the workflow's 3 run IDs. hog_functions/<id>/rerun with the destination's 2.
Saved replay state done, both requests 200
Send the same plan again Refused, "already sent". No new request.
Template filter template-hubspot / exclude template-webhook / template-webhook 0 / 0 / 5 runs
Status page at 520 px No sideways scroll

Local test runs: test_invocation_replay.py cannot start here, because local ClickHouse fails the test table setup on _source_topic, an unrelated table. CI is the check.

Test rationale: test_workflow_failures_are_planned_only_when_included fails if the console form drops the option. The workflow planner and send tests cover what gets skipped, and that workflow runs are resent as workflows.

CI report: the bundle size warning does not apply. This PR changes no frontend files.

Screenshots

These replace the earlier screenshots, which showed the old tool name.

Failed email runs ready to replay

Failed email runs ready to replay

Status after the email replay

Status after the email replay

Details with workflows included

Details with workflows included

Status after the send

Status after the send

Release status

  • No feature flag controls this change

Docs update

  • None. Staff-only admin tooling.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Agent: Claude Code, Claude Opus 5.5

  • Skills: /stacking-prs, /extending-the-admin-console, /writing-tests, /posthog-local-e2e-qa, /merging-prs, /writing-pr-descriptions, /writing-plainly.

🤖 Generated with Claude Code

dmarchuk and others added 20 commits October 22, 2026 21:20
@dmarchuk dmarchuk self-assigned this Oct 28, 2026
@github-actions

github-actions Bot commented Oct 28, 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.

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

✅ Comment density — 3% of added code lines are comments (9 of 344)

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
products/cdp/backend/services/invocation_replay.py 5 152
products/workflows/backend/facade/contracts.py 2 11
products/cdp/backend/test/test_invocation_replay.py 1 77
products/workflows/backend/services/hog_flow_reads.py 1 28

This check does not block merging. It updates on every push and clears when the share drops.

⚠️ Bundle size — 🔺 +313.5 KiB (+0.4%)

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

Total: 78.20 MiB · 🔺 +313.5 KiB (+0.4%)

File Size Δ vs base
render-query/src/render-query/render-query.js 22.08 MiB 🔺 +95.8 KiB (+0.4%)
exporter/src/queries/schema.js 1.44 MiB 🔺 +82.2 KiB (+5.9%)
posthog-app/src/queries/schema.js 1.44 MiB 🔺 +82.2 KiB (+5.9%)
posthog-app/_parent/products/data_modeling/frontend/ModelsScene.js 27.0 KiB 🟢 -66.0 KiB (-71.0%)
posthog-app/_parent/products/data_catalog/frontend/DataCatalogSections.js 46.5 KiB 🔺 +46.5 KiB (new)
posthog-app/_parent/products/data_catalog/frontend/DataCatalogMetricScene.js 77.6 KiB 🔺 +42.4 KiB (+120.9%)
posthog-app/_parent/products/data_catalog/frontend/DataCatalogScene.js 21.0 KiB 🟢 -21.5 KiB (-50.5%)
posthog-app/_parent/products/data_catalog/frontend/DataCatalogNewMetricScene.js 31.9 KiB 🔺 +12.5 KiB (+64.6%)
posthog-app/src/layout/today/TodayTopBar.js 7.9 KiB 🟢 -10.9 KiB (-58.0%)
posthog-app/src/layout/today/TodayShell.js 31.8 KiB 🔺 +10.4 KiB (+48.8%)
exporter/src/scenes/web-analytics/WebAnalyticsInsight.js 199.2 KiB 🔺 +9.8 KiB (+5.2%)
posthog-app/src/scenes/AuthenticatedShell.js 149.2 KiB 🔺 +8.9 KiB (+6.3%)
posthog-app/_parent/products/mcp_registry/frontend/MCPRegistryScene.js removed 🟢 -5.8 KiB (-100.0%)
posthog-app/_parent/products/wizard/frontend/views/run-sidebar/WizardRailButton.js 5.8 KiB 🔺 +5.8 KiB (new)
posthog-app/src/scenes/project-homepage/today/TodayHome.js 48.3 KiB 🔺 +3.7 KiB (+8.3%)
posthog-app/_parent/products/wizard/frontend/views/run-sidebar/WizardRunsMoreMenuItem.js removed 🟢 -3.5 KiB (-100.0%)
posthog-app/_parent/products/signals/frontend/inbox/components/shell/ImplementClaimDialog.js 2.2 KiB 🔺 +2.2 KiB (new)
exporter/src/exporter/scenes/ExporterNotebookScene.js 3.90 MiB 🔺 +2.2 KiB (+0.1%)
posthog-app/_parent/products/cross_project_dashboards/frontend/CrossProjectDashboardScene.js 46.3 KiB 🔺 +2.0 KiB (+4.5%)
posthog-app/_parent/products/wizard/frontend/views/run-sidebar/WizardRunsUnseenDot.js removed 🟢 -1.9 KiB (-100.0%)
posthog-app/_parent/products/signals/frontend/inbox/utils/reportActions.js 1.8 KiB 🔺 +1.8 KiB (new)
posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene.js 212.1 KiB 🔺 +1.7 KiB (+0.8%)
posthog-app/_parent/products/signals/frontend/inbox/utils/reportClaim.js 1.7 KiB 🔺 +1.7 KiB (new)
posthog-app/_parent/products/signals/frontend/inbox/logics/inboxBulkActionsLogic.js 1.6 KiB 🔺 +1.6 KiB (new)
posthog-app/src/scenes/onboarding/Onboarding.js 792.0 KiB 🔺 +1.2 KiB (+0.1%)
posthog-app/src/scenes/authentication/device/OAuthDeviceAuthorize.js 12.5 KiB 🔺 +1.1 KiB (+10.1%)
posthog-app/src/scenes/experiments/Experiment.js 446.6 KiB 🔺 +1.1 KiB (+0.2%)

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.04 MiB · 25 files 🔺 +3.1 KiB (+0.3%) █████████░ 90.7% of 1.14 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.03 MiB · 628 files 🔺 +3.8 KiB (+0.1%) ██████████ 99.8% of 3.03 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
3.86 MiB · 1,236 files 🔺 +15.5 KiB (+0.4%) ██████████ 96.3% of 4.01 MiB
dashboard scene
src/scenes/dashboard/Dashboard.tsx
7.75 MiB · 2,990 files 🟢 -2.7 KiB (-0.0%) ████████░░ 78.8% of 9.84 MiB
today home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
4.83 MiB · 1,858 files 🔺 +27.3 KiB (+0.6%) ██████████ 98.0% of 4.93 MiB
AI-first home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
6.06 MiB · 2,290 files 🔺 +24.7 KiB (+0.4%) ██████████ 96.6% of 6.27 MiB
events scene
src/scenes/activity/explore/EventsScene.tsx
6.77 MiB · 2,550 files 🔺 +5.9 KiB (+0.1%) ███████░░░ 71.9% of 9.41 MiB
web analytics scene
src/scenes/web-analytics/WebAnalyticsScene.tsx
7.83 MiB · 2,929 files 🔺 +28.0 KiB (+0.4%) ███████░░░ 74.6% of 10.49 MiB
replay detail scene
src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
6.95 MiB · 2,612 files 🔺 +10.4 KiB (+0.1%) █████████░ 85.5% of 8.13 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 products/product_analytics/frontend/insights/activityDescriptions 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/zod/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/logic/billing/billingLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/ProductEmptyState/productSetupPreloadLogic.ts stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/kea-test-utils/ 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
🟢 products/product_analytics/frontend/insights/activityDescriptions stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/kea-test-utils/ 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
🟢 src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/navigation/projectNoticeLogic.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/navigation/ImpersonationNotice/ImpersonationNotice.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/cohorts/cohortSavedToast.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/wizard/frontend/runs/WizardRunDetailsDrawer.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayShell.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayContextPanelFloating.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodaySidePanel.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayTopBar.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/todayRailItems.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/subscriptions/frontend/components/Subscriptions/exportNudge/exportNudgeLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/billing/paymentEntryLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/conversations/frontend/components/SidePanel/sidepanelTicketsLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/zod/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/authentication/auth/loginLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/authentication/shared/passkeyLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/cohorts/CohortFilters/constants.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/persons/frontend/logics/personsLogic.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/surveys/constants.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/re2js/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/react-markdown/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/Command/Command.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 packages/quill/packages/ 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
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/marked/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/frimousse/ stays out of src/scenes/dashboard/Dashboard.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/queries/validators.js stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/web-analytics-validators.js stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/re2js/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.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
🟢 packages/quill/packages/charts/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/components/tool/widgets/VisualizationWidget.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/components/tool/widgets/RecordingsWidget.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 src/queries/Query/Query.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/api/primitives.ts stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 src/scenes/notebooks/Notebook/notebookLogic.ts stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/marked/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/frimousse/ stays out of src/scenes/activity/explore/EventsScene.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
🟢 src/queries/validators.js stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/web-analytics-validators.js stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/re2js/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/InsightViz/InsightViz.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/DataVisualization/DataVisualization.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/WebOverview/WebOverview.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/marked/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/frimousse/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/scenes/web-analytics/LiveMetricsDashboard/LiveWebAnalyticsMetrics.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 products/product_analytics/frontend/insights/trends/WorldMap/countryVectors.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/queries/validators.js stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/re2js/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/marked/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 src/scenes/settings/SettingsMap.tsx stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 @jspm/core/nodelibs/browser/fs stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/re2js/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/d3/src/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.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.7 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
4.0 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.9 KiB src/lib/utils/bootTiming.ts
1.7 KiB src/index.tsx
1.7 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.2 KiB src/RootErrorBoundary.tsx
1.1 KiB src/lib/utils/deferredAppContext.ts
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
106.0 KiB src/products.tsx
87.8 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
42.7 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 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 src/lib/constants.tsx
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
106.0 KiB src/products.tsx
87.8 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
42.7 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
32.6 KiB src/lib/utils/eventUsageLogic.ts
29.0 KiB src/lib/constants.tsx
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
113.4 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
112.2 KiB ../packages/quill/packages/primitives/dist/index.js
106.0 KiB src/products.tsx
96.7 KiB ../packages/quill/packages/components/dist/index.js
87.8 KiB src/lib/api.ts
78.8 KiB src/scenes/dashboard/dashboardLogic.tsx
69.0 KiB src/lib/lemon-ui/icons/icons.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
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
112.2 KiB ../packages/quill/packages/primitives/dist/index.js
106.0 KiB src/products.tsx
87.8 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
42.7 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
112.2 KiB ../packages/quill/packages/primitives/dist/index.js
106.0 KiB src/products.tsx
87.8 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
42.7 KiB ../node_modules/.pnpm/@dnd-kit+core@6.3.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
41.7 KiB src/scenes/hog-functions/sub-templates/sub-templates.ts
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
112.2 KiB ../packages/quill/packages/primitives/dist/index.js
106.0 KiB src/products.tsx
96.7 KiB ../packages/quill/packages/components/dist/index.js
87.8 KiB src/lib/api.ts
78.8 KiB src/scenes/dashboard/dashboardLogic.tsx
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
Largest files eagerly shipped from src/scenes/web-analytics/WebAnalyticsScene.tsx
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
113.4 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
112.2 KiB ../packages/quill/packages/primitives/dist/index.js
106.0 KiB src/products.tsx
96.7 KiB ../packages/quill/packages/components/dist/index.js
87.8 KiB src/lib/api.ts
78.8 KiB src/scenes/dashboard/dashboardLogic.tsx
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
Size File
361.8 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/module.mjs
322.0 KiB ../node_modules/.pnpm/posthog-js@1.447.7_@types+react@18.3.31_react@18.3.1/node_modules/posthog-js/dist/rrweb.js
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.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
112.2 KiB ../packages/quill/packages/primitives/dist/index.js
106.0 KiB src/products.tsx
96.7 KiB ../packages/quill/packages/components/dist/index.js
87.8 KiB src/lib/api.ts
69.0 KiB src/lib/lemon-ui/icons/icons.tsx
68.5 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts

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

✅ Frontend layers — no new upward imports, 0 removed

Static imports from a lower frontend layer into a higher one (layers, lowest first: kernel, shell, query, features). Compared with the base branch, so an import that a PR also adds to layer-baseline.txt still shows here. Sizes are the source bytes on the eager path of every logged-in page.

Layer Eager source bytes Δ vs base
kernel 3.00 MiB 🔺 +4.4 KiB (+0.1%)
shell 2.41 MiB 🔺 +40.3 KiB (+1.7%)
query 56.9 KiB 🔺 +711 B (+1.2%)
features 274.1 KiB 🔺 +165 B (+0.1%)

Download the interactive layer graph for this PR.

Posted automatically by check-layers

✅ Toolbar bundle — eager 2.44 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.44 MiB · 19 files 🔺 +3.3 KiB (+0.1%) ████░░░░░░ 42.6% of 5.72 MiB
Deferred (lazy) 2.64 MiB · 44 files 🔺 +36 B (+0.0%) 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
974.8 KiB dist/toolbar/toolbar-app-W7RYTFLH.css
737.5 KiB dist/toolbar/chunk-chunk-2GUA5KB7.js
290.5 KiB dist/toolbar/chunk-chunk-QRQPQULA.js
137.6 KiB dist/toolbar/chunk-chunk-KUOTCAG7.js
131.8 KiB dist/toolbar/chunk-chunk-FQJO25M6.js
75.7 KiB dist/toolbar/toolbar-app-PXH7UCE5.js
69.0 KiB dist/toolbar/chunk-chunk-BFAXZMC5.js
33.8 KiB dist/toolbar/chunk-chunk-RDAX246Y.js
21.9 KiB dist/toolbar/chunk-chunk-GDK4T7BX.js
6.8 KiB dist/toolbar/chunk-chunk-RVLGRPCH.js

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

✅ Dist folder size — 🔺 +3.71 MiB (+0.4%)

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

Total: 1003.03 MiB · 🔺 +3.71 MiB (+0.4%)

⚠️ Backend coverage — 79.0% of changed backend lines covered — 27 uncovered

🧪 Backend test coverage

Patch coverage — changed backend lines (products + core): ████████████████░░░░ 79.0% (106 / 133)

File Patch Uncovered changed lines
products/workflows/backend/services/hog_flow_reads.py 22.2% 574, 577–580, 583, 596
products/workflows/backend/facade/contracts.py 25.0% 204–207, 209, 211
products/cdp/backend/services/invocation_replay.py 80.0% 223, 277, 360, 371–379, 621
products/cdp/backend/console.py 92.3% 542

🤖 Agents: add a test only if an uncovered line exposes a realistic regression that existing tests miss. Otherwise explain why no new test is needed under "How did you test this code?". Gap list: the patch-coverage artifact on this run (gh run download 390299105991194 -n patch-coverage), or the coverage-data block at the end of this comment.

Per-product line coverage (touched products)
Product Coverage Lines
platform_features ██░░░░░░░░░░░░░░░░░░ 12.1% 7 / 58
data_tools ████████████░░░░░░░░ 57.6% 95 / 165
warehouse_sources_queue █████████████░░░░░░░ 65.8% 2,192 / 3,330
demo ██████████████░░░░░░ 71.6% 2,006 / 2,803
knowledge_writer ████████████████░░░░ 77.8% 1,474 / 1,895
batch_exports █████████████████░░░ 83.0% 24,967 / 30,076
engineering_analytics █████████████████░░░ 85.6% 12,515 / 14,615
ml_inference █████████████████░░░ 86.3% 524 / 607
commands █████████████████░░░ 86.7% 1,674 / 1,930
mcp_analytics ██████████████████░░ 87.8% 6,827 / 7,777
posthog_ai ██████████████████░░ 88.2% 4,514 / 5,116
notebooks ██████████████████░░ 88.6% 15,599 / 17,612
apm ██████████████████░░ 89.2% 2,250 / 2,523
dashboards ██████████████████░░ 89.6% 9,057 / 10,105
cohorts ██████████████████░░ 90.5% 9,895 / 10,932
warehouse_suggestions ██████████████████░░ 90.7% 4,264 / 4,700
actions ██████████████████░░ 90.9% 1,524 / 1,677
visual_review ██████████████████░░ 90.9% 10,634 / 11,698
data_warehouse ██████████████████░░ 91.0% 15,808 / 17,369
cdp ██████████████████░░ 91.1% 11,814 / 12,967
signals ██████████████████░░ 91.2% 113,418 / 124,409
canvas ██████████████████░░ 91.5% 8,559 / 9,351
tasks ██████████████████░░ 91.6% 86,739 / 94,681
autoresearch ██████████████████░░ 91.6% 12,280 / 13,400
today ██████████████████░░ 91.7% 4,270 / 4,655
streamlit_apps ██████████████████░░ 92.0% 3,200 / 3,478
alerts_platform ██████████████████░░ 92.1% 11,062 / 12,013
business_knowledge ██████████████████░░ 92.2% 10,900 / 11,824
data_modeling ██████████████████░░ 92.3% 13,023 / 14,117
review_hog ██████████████████░░ 92.4% 18,498 / 20,025
conversations ██████████████████░░ 92.4% 31,728 / 34,335
metrics ██████████████████░░ 92.4% 13,031 / 14,101
wizard ██████████████████░░ 92.4% 7,323 / 7,922
slack_app ███████████████████░ 92.6% 25,685 / 27,748
error_tracking ███████████████████░ 92.6% 21,447 / 23,154
notifications ███████████████████░ 92.8% 1,230 / 1,326
early_access_features ███████████████████░ 92.8% 1,400 / 1,509
legal_documents ███████████████████░ 93.0% 2,380 / 2,558
ai_training ███████████████████░ 93.1% 605 / 650
managed_warehouse ███████████████████░ 93.2% 15,792 / 16,947
authorization ███████████████████░ 93.2% 850 / 912
webmcp ███████████████████░ 93.3% 277 / 297
stamphog ███████████████████░ 93.3% 11,751 / 12,592
alerts ███████████████████░ 93.3% 14,214 / 15,228
surveys ███████████████████░ 93.6% 7,847 / 8,388
web_analytics ███████████████████░ 93.6% 27,148 / 29,017
exports ███████████████████░ 93.7% 4,474 / 4,777
approvals ███████████████████░ 93.7% 5,026 / 5,366
cross_project_dashboards ███████████████████░ 93.7% 867 / 925
context_layer ███████████████████░ 93.9% 4,075 / 4,342
marketing_analytics ███████████████████░ 93.9% 22,429 / 23,882
ai_observability ███████████████████░ 93.9% 41,218 / 43,873
mcp_store ███████████████████░ 94.0% 9,391 / 9,991
billing_alerts ███████████████████░ 94.0% 2,332 / 2,480
messaging ███████████████████░ 94.0% 10,484 / 11,149
workflows ███████████████████░ 94.1% 30,964 / 32,922
annotations ███████████████████░ 94.1% 1,460 / 1,552
managed_migrations ███████████████████░ 94.2% 1,886 / 2,003
customer_analytics ███████████████████░ 94.2% 31,853 / 33,815
access_control ███████████████████░ 94.4% 8,663 / 9,179
replay_vision ███████████████████░ 94.4% 33,460 / 35,451
ai_gateway ███████████████████░ 94.4% 1,580 / 1,674
logs ███████████████████░ 94.4% 20,561 / 21,776
reminders ███████████████████░ 94.5% 837 / 886
experiments ███████████████████░ 95.0% 48,331 / 50,893
growth ███████████████████░ 95.0% 11,603 / 12,217
endpoints ███████████████████░ 95.0% 9,725 / 10,239
warehouse_sources ███████████████████░ 95.0% 142,683 / 150,210
release ███████████████████░ 95.0% 703 / 740
product_tours ███████████████████░ 95.1% 1,271 / 1,337
skills ███████████████████░ 95.1% 7,658 / 8,053
uptime_monitoring ███████████████████░ 95.3% 306 / 321
subscriptions ███████████████████░ 95.7% 14,272 / 14,921
ui_customization ███████████████████░ 95.7% 714 / 746
data_catalog ███████████████████░ 95.7% 5,409 / 5,651
tracing ███████████████████░ 95.8% 5,113 / 5,339
feature_flags ███████████████████░ 95.8% 31,130 / 32,505
product_analytics ███████████████████░ 95.8% 31,522 / 32,913
revenue_analytics ███████████████████░ 95.9% 1,877 / 1,958
data_quality ███████████████████░ 96.0% 8,583 / 8,937
groups ███████████████████░ 96.4% 2,068 / 2,145
aeo ███████████████████░ 96.4% 4,958 / 5,141
account_audits ███████████████████░ 96.5% 823 / 853
security ███████████████████░ 96.8% 1,597 / 1,650
pulse ███████████████████░ 97.0% 2,044 / 2,107
analytics_platform ████████████████████ 98.0% 2,962 / 3,022
field_notes ████████████████████ 98.4% 181 / 184

Report-only. Patch coverage = changed backend lines covered vs origin/master. Sorted lowest first.
Known gaps: lines covered only by Temporal tests show as uncovered; core line numbers may drift if master changed the same file.

…ole-tool-operations

# Conflicts:
#	posthog/admin/console/AGENTS.md
#	posthog/admin/console/tools.py
#	posthog/admin/test_admin_console.py
#	posthog/templates/admin_console/_block.html
…ole-tool-operations

# Conflicts:
#	posthog/admin/test_admin_console.py
…-invocation-replay-workflows

# Conflicts:
#	products/workflows/backend/services/hog_flow_reads.py
…ole-tool-operations

# Conflicts:
#	posthog/admin/test_admin_console.py
Base automatically changed from dmarchuk/cdp-invocation-replay-admin to master November 11, 2026 19:27
@trunk-io

trunk-io Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

😎 Stack merged successfully - details.

…tion-replay-workflows

# Conflicts:
#	products/cdp/backend/console.py
#	products/cdp/backend/management/commands/replay_failed_invocations.py
#	products/cdp/backend/services/invocation_replay.py
#	products/cdp/backend/test/test_invocation_replay.py
@dmarchuk
dmarchuk marked this pull request as ready for review November 11, 2026 23:48
@parameterai

parameterai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Risk: No findings

The only change since the last review is a merge of master into the branch; the +22 lines in products/workflows/backend/facade/contracts.py (CodeEmailWorkflow, SegmentCohortFilters, ImportSegment.conditions, ImportOptions.pending_segment_cohorts) are master code, not PR-authored, and are pure dataclass field declarations with no logic. The PR's own replay-tool code in products/cdp, hog_flow_reads.py, and facade/workflows.py is byte-identical to the state the last review cleared, so no previously reviewed risk changed.

Sentinel reviewed be0964e · Review settings

@stamphog
stamphog Bot requested review from a team November 11, 2026 23:48
@veria-ai

veria-ai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

PR overview

No security issues were found in this pull request.

Reviews

stamphog[bot]

This comment was marked as outdated.

@stamphog
stamphog Bot dismissed their stale review November 12, 2026 13:29

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.

Risky replay and cross-team access changes have current-head approval, owning-team authorship, and STRONG familiarity. No unresolved substantive concerns or policy-specific refusal grounds were found; the new security-rule suppression is not one of the prohibited house-pattern exemptions.

  • Author wrote 99% of the modified lines and has 22 merged PRs in these paths (familiarity STRONG).
  • webjunkie reviewed the current head.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 369L, 7F substantive, 462L/8F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (462L, 8F, single-area, feat)
stamphog 2.8.0 .stamphog/policy.yml @ be0964e · reviewed head be0964e

@dmarchuk

Copy link
Copy Markdown
Contributor Author

/trunk merge

@trunk-io
trunk-io Bot merged commit b3aa84f into master Nov 12, 2026
302 of 306 checks passed
@trunk-io
trunk-io Bot deleted the dmarchuk/cdp-invocation-replay-workflows branch November 12, 2026 16:48
@deployment-status-posthog

deployment-status-posthog Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-11-12 17:58 UTC Run
prod-us ✅ Deployed 2026-11-12 18:21 UTC Run
prod-eu ✅ Deployed 2026-11-12 18:24 UTC Run

This table shows the posthog release only. Hogstation shows every service that this PR reaches, Kargo services included.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants