Repository navigation
fix(mcp): refuse unknown fields in the email template tools - #127183
trunk-io[bot] merged 49 commits into
Conversation
The send tool's Zod stripped unknown keys, so template.content_hash instead of template.hash sent the email without the hash check. Orval now generates strict bodies for the email_templates module only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upload, update and make-transactional join path params and a body, so they took the params' loose top level and stripped a misspelled key such as if_not_superseded. The joined input is now strict when its module has strict bodies. The design document stays open: its skeleton sets additionalProperties, and the Orval post-step turns those objects into looseObject, because Orval's strict mode ignores the flag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every open object the OpenAPI marks must now match a generated object, or the generator fails and names the module, the operation and the path. Unions with more than one non-null branch, colliding paths and dotted property names fail the same way instead of loosening a closed sibling. The update tool now tells the agent to keep the template id. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A closed property whose literal name contains a dot could alias a nested open path and be loosened with it. A body with open targets now refuses any dotted property name. The generator removes its temp directory when preparation or the collector throws, not only after post-processing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A code send without `from` now tells cdp-api its sender is the project's default (`from.isDefault`). cdp-api keys an Idempotency-Key retry on the sender the caller chose, so a retry after the default sender changed replays the first send instead of answering that the key was reused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s code form The rebase kept the base side of the generated MCP email clients, so the send and template tools still took unknown keys. Regenerating makes them strict, and the open design objects loose. The send tool takes only the email your code rendered, so its tests now send that form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The patch tools took their operations from a hand-written schema that dropped unknown keys, so a misspelled `index` moved a block to the end instead of the position the agent asked for. The operations and the patch root now refuse unknown keys. The freeform payloads stay open. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rations Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oute-idempotency Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ict-email-bodies Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oute-idempotency Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ict-email-bodies Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oute-idempotency Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ict-email-bodies Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oute-idempotency Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ict-email-bodies Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🤖 CI report
|
| File | Size | Δ vs base |
|---|---|---|
toolbar/src/toolbar/floating/components/experiments/chunk-ExperimentsToolbarMenu.js |
13.1 KiB | 🔺 +1.2 KiB (+10.0%) |
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.03 MiB · 25 files | no change | █████████░ 89.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.00 MiB · 623 files | no change | ██████████ 99.0% of 3.03 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
3.87 MiB · 1,233 files | no change | ██████████ 96.5% of 4.01 MiB |
dashboard scenesrc/scenes/dashboard/Dashboard.tsx |
7.55 MiB · 2,914 files | no change | ████████░░ 76.8% of 9.84 MiB |
today home pathsrc/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx |
4.72 MiB · 1,757 files | no change | ██████████ 95.7% of 4.93 MiB |
AI-first home pathsrc/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx |
5.97 MiB · 2,255 files | no change | ██████████ 95.2% of 6.27 MiB |
events scenesrc/scenes/activity/explore/EventsScene.tsx |
6.59 MiB · 2,485 files | no change | ███████░░░ 70.0% of 9.41 MiB |
web analytics scenesrc/scenes/web-analytics/WebAnalyticsScene.tsx |
7.57 MiB · 2,831 files | no change | ███████░░░ 72.1% of 10.49 MiB |
replay detail scenesrc/scenes/session-recordings/detail/SessionRecordingDetail.tsx |
6.87 MiB · 2,582 files | no change | ████████░░ 84.6% 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/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 |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 104.8 KiB | src/products.tsx |
| 89.6 KiB | src/lib/api.ts |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 41.9 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 |
| 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 |
| 28.5 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 |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 104.8 KiB | src/products.tsx |
| 89.6 KiB | src/lib/api.ts |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 41.9 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 |
| 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.3 KiB | src/lib/utils/eventUsageLogic.ts |
| 28.5 KiB | src/lib/constants.tsx |
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
| Size | File |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 114.5 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js |
| 110.8 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 104.8 KiB | src/products.tsx |
| 96.1 KiB | ../packages/quill/packages/components/dist/index.js |
| 89.6 KiB | src/lib/api.ts |
| 75.6 KiB | src/scenes/dashboard/dashboardLogic.tsx |
| 68.7 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 |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 110.8 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 104.8 KiB | src/products.tsx |
| 89.6 KiB | src/lib/api.ts |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 68.0 KiB | ../products/posthog_ai/frontend/logics/runStreamLogic.ts |
| 41.9 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 |
| 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 |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 110.8 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 104.8 KiB | src/products.tsx |
| 89.6 KiB | src/lib/api.ts |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 68.0 KiB | ../products/posthog_ai/frontend/logics/runStreamLogic.ts |
| 41.9 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 |
| 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 |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 110.8 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 104.8 KiB | src/products.tsx |
| 96.1 KiB | ../packages/quill/packages/components/dist/index.js |
| 89.6 KiB | src/lib/api.ts |
| 75.6 KiB | src/scenes/dashboard/dashboardLogic.tsx |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 68.0 KiB | ../products/posthog_ai/frontend/logics/runStreamLogic.ts |
Largest files eagerly shipped from src/scenes/web-analytics/WebAnalyticsScene.tsx
| Size | File |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 114.5 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js |
| 110.8 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 104.8 KiB | src/products.tsx |
| 96.1 KiB | ../packages/quill/packages/components/dist/index.js |
| 89.6 KiB | src/lib/api.ts |
| 75.6 KiB | src/scenes/dashboard/dashboardLogic.tsx |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
| Size | File |
|---|---|
| 356.2 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 321.5 KiB | ../node_modules/.pnpm/posthog-js@1.445.2_@types+react@18.3.27_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 |
| 110.8 KiB | ../packages/quill/packages/primitives/dist/index.js |
| 104.8 KiB | src/products.tsx |
| 96.1 KiB | ../packages/quill/packages/components/dist/index.js |
| 89.6 KiB | src/lib/api.ts |
| 68.7 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 68.0 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 | 2.99 MiB | no change |
| shell | 2.38 MiB | no change |
| query | 56.4 KiB | no change |
| features | 356.2 KiB | no change |
Download the interactive layer graph for this PR.
Posted automatically by check-layers
✅ Toolbar bundle — eager 2.39 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.39 MiB · 19 files | 🔺 +115 B (+0.0%) | ████░░░░░░ 41.7% of 5.72 MiB |
| Deferred (lazy) | 2.12 MiB · 42 files | 🔺 +1.2 KiB (+0.1%) | 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 |
|---|---|
| 962.0 KiB | dist/toolbar/toolbar-app-2YDO7Z76.css |
| 727.9 KiB | dist/toolbar/chunk-chunk-C3YI6GSO.js |
| 261.3 KiB | dist/toolbar/chunk-chunk-LPZVU6KG.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-FDH2IBXT.js |
| 130.4 KiB | dist/toolbar/chunk-chunk-T5YBIAR2.js |
| 75.7 KiB | dist/toolbar/toolbar-app-KQBCSO2E.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-TSAL54PB.js |
| 33.8 KiB | dist/toolbar/chunk-chunk-RNAY4ENA.js |
| 21.7 KiB | dist/toolbar/chunk-chunk-DOK7DOTD.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 — 🔺 +7.1 KiB (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 973.14 MiB · 🔺 +7.1 KiB (+0.0%)
ℹ️ MCP UI apps size — 35 app(s), 29271.9 KB JS
Built size of each MCP UI app (main.js + styles.css).
| App | JS | CSS |
|---|---|---|
| debug | 848.8 KB | 220.9 KB |
| explain-chart | 1123.7 KB | 220.9 KB |
| action | 771.5 KB | 220.9 KB |
| action-list | 839.8 KB | 220.9 KB |
| cohort | 770.5 KB | 220.9 KB |
| cohort-list | 838.8 KB | 220.9 KB |
| email-template | 770.4 KB | 220.9 KB |
| error-details | 775.4 KB | 220.9 KB |
| error-issue | 772.7 KB | 220.9 KB |
| error-issue-list | 841.2 KB | 220.9 KB |
| experiment | 836.9 KB | 220.9 KB |
| experiment-list | 840.5 KB | 220.9 KB |
| experiment-results | 838.7 KB | 220.9 KB |
| feature-flag | 839.2 KB | 220.9 KB |
| feature-flag-list | 842.9 KB | 220.9 KB |
| feature-flag-testing | 773.8 KB | 220.9 KB |
| inline-scan | 771.0 KB | 220.9 KB |
| insight-actors | 838.3 KB | 220.9 KB |
| llm-costs | 835.6 KB | 220.9 KB |
| session-recording | 772.8 KB | 220.9 KB |
| survey | 772.1 KB | 220.9 KB |
| survey-global-stats | 835.6 KB | 220.9 KB |
| survey-list | 840.5 KB | 220.9 KB |
| survey-stats | 835.6 KB | 220.9 KB |
| trace-span | 770.9 KB | 220.9 KB |
| trace-span-list | 839.7 KB | 220.9 KB |
| vision-observation-list | 838.9 KB | 220.9 KB |
| workflow | 770.9 KB | 220.9 KB |
| workflow-list | 839.1 KB | 220.9 KB |
| workflow-setup-status | 770.6 KB | 220.9 KB |
| query-results | 1095.2 KB | 220.9 KB |
| render-ui | 1199.7 KB | 220.9 KB |
| visual-review-snapshots | 775.4 KB | 220.9 KB |
| workflow-data-suggestions | 773.2 KB | 220.9 KB |
| workflow-sending-rules | 771.9 KB | 220.9 KB |
ℹ️ MCP agent API — agent-facing tool changes
What this PR changes for agents, from the tool schema snapshots and tool definitions.
Tools changed (5):
| Tool | Params | Scopes | Annotations | Schema chars |
|---|---|---|---|---|
workflows-create-email-template |
4,347 -> 4,486 | |||
workflows-get-email-template |
description changed | |||
workflows-patch-action-email |
4,441 -> 4,702 | |||
workflows-patch-email-template |
3,824 -> 4,085 | |||
workflows-update-email-template |
description changed | 4,433 -> 4,572 |
⚠️ Playwright — 2 flaky
🎭 Playwright report · View test results →
- Early access feature new and list (chromium)
- view results, pause, resume, and ship (chromium)
These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!
✅ Backend coverage — all changed backend lines covered
🧪 Backend test coverage
Patch coverage — changed backend lines (products + core): ████████████████████ 100.0% (8 / 8)
All changed backend lines are covered ✅
Per-product line coverage (touched products)
| Product | Coverage | Lines |
|---|---|---|
demo |
██████████████░░░░░░ 71.2% |
1,979 / 2,778 |
batch_exports |
████████████████░░░░ 82.2% |
23,521 / 28,601 |
engineering_analytics |
█████████████████░░░ 84.9% |
11,753 / 13,841 |
commands |
█████████████████░░░ 85.4% |
1,621 / 1,898 |
mcp_analytics |
█████████████████░░░ 86.3% |
5,812 / 6,733 |
posthog_ai |
██████████████████░░ 87.9% |
4,304 / 4,896 |
notebooks |
██████████████████░░ 88.8% |
15,454 / 17,407 |
mcp_registry |
██████████████████░░ 89.0% |
1,596 / 1,794 |
dashboards |
██████████████████░░ 89.4% |
8,048 / 9,003 |
product_tours |
██████████████████░░ 89.7% |
1,355 / 1,510 |
warehouse_suggestions |
██████████████████░░ 90.1% |
3,836 / 4,257 |
cohorts |
██████████████████░░ 90.3% |
9,203 / 10,195 |
signals |
██████████████████░░ 90.7% |
102,118 / 112,573 |
today |
██████████████████░░ 91.2% |
3,949 / 4,330 |
canvas |
██████████████████░░ 91.2% |
8,199 / 8,988 |
tasks |
██████████████████░░ 91.3% |
83,321 / 91,241 |
managed_warehouse |
██████████████████░░ 91.4% |
12,928 / 14,151 |
data_warehouse |
██████████████████░░ 91.4% |
15,913 / 17,416 |
data_modeling |
██████████████████░░ 91.5% |
11,714 / 12,806 |
autoresearch |
██████████████████░░ 91.5% |
11,717 / 12,805 |
cdp |
██████████████████░░ 91.5% |
10,433 / 11,399 |
metrics |
██████████████████░░ 91.8% |
11,380 / 12,399 |
streamlit_apps |
██████████████████░░ 91.9% |
3,139 / 3,415 |
business_knowledge |
██████████████████░░ 92.0% |
10,556 / 11,476 |
wizard |
██████████████████░░ 92.2% |
7,002 / 7,594 |
review_hog |
██████████████████░░ 92.3% |
17,768 / 19,256 |
conversations |
██████████████████░░ 92.3% |
31,368 / 33,969 |
error_tracking |
███████████████████░ 92.5% |
20,375 / 22,018 |
early_access_features |
███████████████████░ 92.6% |
1,339 / 1,446 |
alerts_platform |
███████████████████░ 92.6% |
8,643 / 9,329 |
slack_app |
███████████████████░ 92.7% |
22,443 / 24,215 |
notifications |
███████████████████░ 92.8% |
1,218 / 1,312 |
stamphog |
███████████████████░ 93.0% |
10,413 / 11,193 |
alerts |
███████████████████░ 93.0% |
11,701 / 12,575 |
surveys |
███████████████████░ 93.3% |
7,256 / 7,780 |
web_analytics |
███████████████████░ 93.4% |
26,472 / 28,347 |
approvals |
███████████████████░ 93.7% |
5,004 / 5,341 |
marketing_analytics |
███████████████████░ 93.8% |
22,066 / 23,535 |
workflows |
███████████████████░ 93.8% |
27,870 / 29,712 |
context_layer |
███████████████████░ 93.8% |
3,984 / 4,247 |
exports |
███████████████████░ 93.9% |
4,324 / 4,607 |
cross_project_dashboards |
███████████████████░ 93.9% |
858 / 914 |
mcp_store |
███████████████████░ 93.9% |
9,193 / 9,789 |
ai_observability |
███████████████████░ 94.0% |
33,124 / 35,252 |
authorization |
███████████████████░ 94.0% |
671 / 714 |
billing_alerts |
███████████████████░ 94.0% |
2,322 / 2,470 |
messaging |
███████████████████░ 94.1% |
7,669 / 8,150 |
customer_analytics |
███████████████████░ 94.1% |
30,760 / 32,679 |
replay_vision |
███████████████████░ 94.4% |
33,353 / 35,345 |
logs |
███████████████████░ 94.5% |
19,437 / 20,572 |
reminders |
███████████████████░ 94.8% |
782 / 825 |
experiments |
███████████████████░ 94.8% |
45,081 / 47,546 |
warehouse_sources |
███████████████████░ 94.8% |
135,153 / 142,521 |
actions |
███████████████████░ 94.9% |
997 / 1,051 |
growth |
███████████████████░ 95.0% |
11,563 / 12,176 |
endpoints |
███████████████████░ 95.0% |
9,665 / 10,177 |
annotations |
███████████████████░ 95.1% |
1,097 / 1,153 |
skills |
███████████████████░ 95.2% |
7,633 / 8,018 |
access_control |
███████████████████░ 95.4% |
8,461 / 8,871 |
subscriptions |
███████████████████░ 95.7% |
14,017 / 14,651 |
data_catalog |
███████████████████░ 95.7% |
4,715 / 4,928 |
product_analytics |
███████████████████░ 95.8% |
30,525 / 31,863 |
feature_flags |
███████████████████░ 95.8% |
29,678 / 30,973 |
revenue_analytics |
███████████████████░ 95.9% |
1,877 / 1,958 |
data_quality |
███████████████████░ 96.0% |
8,561 / 8,915 |
tracing |
███████████████████░ 96.5% |
4,572 / 4,737 |
account_audits |
███████████████████░ 96.7% |
770 / 796 |
pulse |
███████████████████░ 97.3% |
2,036 / 2,093 |
analytics_platform |
████████████████████ 98.0% |
2,883 / 2,943 |
groups |
████████████████████ 98.2% |
1,604 / 1,634 |
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.
✅ Django migration risk — no migrations to analyze
No Django migrations need risk analysis.
…cp-strict-email-bodies
…cp-strict-email-bodies
|
@PostHog review |
|
@Silthus PostHog Review is reviewing this pull request. |
…cp-strict-email-bodies
A new stamphog review started for this PR — the fresh verdict replaces this approval.
|
@PostHog review |
|
@Silthus PostHog Review is reviewing this pull request. |
|
Stacked PR 127187 failed testing in the merge queue. Please investigate the failure and re-submit the stack. |
|
Stacked PR 127187 failed testing in the merge queue. Please investigate the failure and re-submit the stack. |
…ies layer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new stamphog review started for this PR — the fresh verdict replaces this approval.
There was a problem hiding this comment.
Approved.
The author belongs to @PostHog/team-workflows, but the risky MCP and generator changes owned by @PostHog/team-context-and-mcp lack current-head review coverage; both supplied reviews concern older commits. Request review from @PostHog/team-context-and-mcp before re-requesting, with Julian Bez or Harley Alexander as suggested reviewers.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✓ | 417L, 10F substantive, 681L/22F incl. docs/generated/snapshots — within ceiling |
| tier | ✓ | T1-agent / T1d-complex (681L, 22F, two-areas, fix) |
| stamphog 2.7.0 | .stamphog/policy.yml @ 13bbcfb · reviewed head 13bbcfb |
|
This pull request was merged into |
Moved from Silthus#582.
Re-cut on 2026-11-02 onto #127167, after the scope cut parked local templates and sends by key. This layer keeps only what still applies to a code send. Since 2026-11-03 it sits on #127181: #127182 closed. Its diff stays MCP-only apart from two OpenAPI annotations.
Part of the code-first rebuild of the email send stack; replaces parts of #118924 (part 2, the MCP send tool's body check).
Problem
capture_engagmentinstead ofcapture_engagementsends the email with engagement capture still on.Impact
Pays into Grow Workflows: an agent that sends email from code learns about a wrong field at once, instead of sending the wrong content. In scope: the email template MCP tools.
Merge Danger
Warning
🟡 Merge risk: medium · two-way door: a revert lets the tools drop unknown keys again
workflows-email-from-code, and make-transactional behindworkflows-transactional-email-api.workflows-patch-email-templateandworkflows-patch-action-email) share the operation union, so both refuse an unknown operation field.created_at,updated_at,transactional_hog_flow_idand_posthogUrl. The get and update tool descriptions tell the agent to build the content from the fetched template and send only the other writable fields it changes. The error names the key.bodyand below.Changes
workflows-patch-action-email, which edits a workflow's email action and shares the patch schema.email_templatesmodule only. Tools that join path parameters and a body are strict at the top level too. Every other module's generated code is unchanged.bodyas open. A small step after Orval keeps those objects loose, because Orval's strict mode ignoresadditionalProperties: true. The step runs only for strict-body modules.indxinstead ofindexno longer appends the block at the end. The freeformpatch,contentandrowpayloads stay open.template_key,subject, the content and the options. Atemplateobject is an unknown key there. feat(workflows): send an email with inline html from an MCP tool #127167 splits the send intoworkflows-send-email-prepareand-execute; the prepare tool carries the strict body.items, a realoneOf/anyOf, or a body property name with a dot, in a body that has an open object, stops the generator with the module, operation and path. A nullable wrapper (one object plusnull) counts as the object itself, since that is how drf-spectacular writes a nullable field.email_templatesclient and tool schemas, the tool-schema snapshots, and an index signature on theEmailTemplateDesigntypes.How did you test this code?
Test seams: the schemas the generated tools use (
GENERATED_TOOL_MAP[tool]().schema), inservices/mcp/tests/unit/email-templates-generated.test.ts.Test rationale, each run red against the previous generator:
capture_engagment, or atemplateobject on the code-only send tool, that passes.indx) or an unknown top-level field that passes.created_atthat passes.content.emailthat passes. This row was checked red against the generated code from before this PR.bodythat the tool refuses.items, a two-branchoneOf, a path opened twice, a dotted key, open or closed (loosen-open-objects.test.ts). One more row pins the nullable wrapper as loose, with its closed sibling still strict.Proofs at
b9cb59d(saved withfleet proof), after the merge of #127181 at0b3662a, which carries #127167'sfcf42b0, #127123'sc81b9e0and master:e88ee89, mail caught locally. Every answer matches the run at the previous head77ecc1c.workflows-send-email-preparerefusescapture_engagmentand atemplate_id, each with an error that names the key.confirmation: "confirm", returns amessage_id, calls cdp-api once and delivers the mail. A second execute with the same hash is refused.0b3662a) and HEAD tool schemas: 0 regressions, the same classification as at77ecc1c. 22 are refused on purpose (unknown or read-only keys that base dropped silently), and 6 keep design keys that base dropped.77ecc1c: no template tool schema changes since, and every stored template shape gives the same result.f7bad79. The MCP unit tests pass at the stack top00f9015,paths-view.test.tsincluded.hogli build:openapigives no diff after the hand-resolved conflict in the generated send schema. A fresh review of the changes since77ecc1cfound nothing in this PR's diff. Its one finding was in master code that the base merge brought in.13bbcfbonly the bundle warning (+1.2 KiB) stays open, and it does not come from this layer: it measures the whole stack against master, and this layer's generated types add no bundle code. The two flaky Playwright tests passed on retry and touch nothing in this stack.Earlier live run at the pre-cut stack, 2026-10-31
Live run, 2026-10-31, the MCP send tool against django at the top of the stack (
3a30f51c529), cdp-api and both CDP workers at feat(cdp): send a template from the workflow version Django graded #127130 (f9abed0841c), mail caught in maildev.message_id, email delivered with the caller's contentfromfieldcapture_engagment(misspelled)Release status
workflows-patch-action-emailincluded, refuse unknown keys for everyoneDocs update
None.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: Claude Code, Claude Opus 5.5 (claude-opus-5-5)
srv2of map Map: send code-managed email templates with one PostHog call Silthus/posthog#461; restacked as lanedj3onto feat(messaging): mark a code send that leaves the sender to the project #127182 at688eba5, and onto feat(messaging): point a sender refusal at the from a send names #127181 when feat(messaging): mark a code send that leaves the sender to the project #127182 closed on 2026-11-03. Review round 1 (GPT-6.1 Sol) found the loose patch schema, fixed in1c2df13; its final read found nothing.qa-swarm,tdd,writing-tests,implementing-mcp-tools,improving-drf-endpoints,pr-description,writing-pr-descriptions.Involvement: one decision from Michael (D2); review rounds: srv2 round 1 (GPT-6.1 Sol, Opus fresh eyes) fixed; dj3 round 1 (GPT-6.1 Sol) fixed, final read clean; QA swarm on 2026-11-01 with one panel round (GPT-6.1 Sol review, Opus 5.5 fresh eyes): 2 findings fixed in this description; later changes are merges from below; live run captured. After the re-cut, one panel round (GPT-6.1 Sol lenses, Opus 5.5 fresh eyes): 2 findings fixed in
9e6fadb.Follow-up: the loose root of
workflows-patch-action-email, which drops a misspelledbase_updated_at, is master behavior.🤖 Generated with Claude Code